Lines Matching refs:lif
364 dhcp_lif_t *lif; in pif_status() local
370 for (lif = pif->pif_lifs; lif != NULL; lif = lif->lif_next) { in pif_status()
371 for (dsmp = lif->lif_smachs; dsmp != NULL; in pif_status()
384 lif->v6 = ((struct sockaddr_in6 *)&lifr.lf)->sin6_addr; \
386 lif->v4 = ((struct sockaddr_in *)&lifr.lf)->sin_addr.s_addr; \
406 dhcp_lif_t *lif; in insert_lif() local
410 if ((lif = calloc(1, sizeof (*lif))) == NULL) { in insert_lif()
417 lif->lif_sock_ip_fd = -1; in insert_lif()
418 lif->lif_packet_id = -1; in insert_lif()
419 lif->lif_iaid_id = -1; in insert_lif()
420 lif->lif_hold_count = 1; in insert_lif()
421 lif->lif_pif = pif; in insert_lif()
422 lif->lif_removed = B_TRUE; in insert_lif()
423 init_timer(&lif->lif_preferred, 0); in insert_lif()
424 init_timer(&lif->lif_expire, 0); in insert_lif()
426 if (strlcpy(lif->lif_name, lname, LIFNAMSIZ) >= LIFNAMSIZ) { in insert_lif()
438 lif->lif_max = 1024; in insert_lif()
440 lif->lif_max = lifr.lifr_mtu; in insert_lif()
467 lif->lif_flags = lifr.lifr_flags; in insert_lif()
494 lif->lif_broadcast = in insert_lif()
504 lif->lif_removed = B_FALSE; in insert_lif()
505 insque(lif, &pif->pif_lifs); in insert_lif()
507 return (lif); in insert_lif()
510 release_lif(lif); in insert_lif()
522 hold_lif(dhcp_lif_t *lif) in hold_lif() argument
524 lif->lif_hold_count++; in hold_lif()
525 dhcpmsg(MSG_DEBUG2, "hold_lif: hold count on %s: %u", lif->lif_name, in hold_lif()
526 lif->lif_hold_count); in hold_lif()
538 release_lif(dhcp_lif_t *lif) in release_lif() argument
540 if (lif->lif_hold_count == 0) { in release_lif()
542 lif->lif_name); in release_lif()
546 if (lif->lif_hold_count == 1 && !lif->lif_removed) { in release_lif()
547 unplumb_lif(lif); in release_lif()
551 if (--lif->lif_hold_count == 0) { in release_lif()
555 lif->lif_name); in release_lif()
557 if (lif->lif_lease != NULL) in release_lif()
560 close_ip_lif(lif); in release_lif()
561 pif = lif->lif_pif; in release_lif()
567 free(lif); in release_lif()
570 lif->lif_name, lif->lif_hold_count); in release_lif()
584 remove_lif(dhcp_lif_t *lif) in remove_lif() argument
586 if (lif->lif_plumbed) { in remove_lif()
588 lif->lif_name); in remove_lif()
591 if (lif->lif_removed) { in remove_lif()
593 lif->lif_name); in remove_lif()
598 dhcpmsg(MSG_DEBUG2, "remove_lif: removing %s", lif->lif_name); in remove_lif()
599 lif->lif_removed = B_TRUE; in remove_lif()
600 lifnext = lif->lif_next; in remove_lif()
601 clear_lif_dhcp(lif); in remove_lif()
602 cancel_lif_timers(lif); in remove_lif()
603 if (lif->lif_iaid_id != -1 && in remove_lif()
604 iu_cancel_timer(tq, lif->lif_iaid_id, NULL) == 1) { in remove_lif()
605 lif->lif_iaid_id = -1; in remove_lif()
606 release_lif(lif); in remove_lif()
610 remque(lif); in remove_lif()
613 if ((dlp = lif->lif_lease) != NULL) { in remove_lif()
616 else if (dlp->dl_lifs == lif) in remove_lif()
618 if (lif->lif_declined != NULL) { in remove_lif()
620 lif->lif_declined = NULL; in remove_lif()
622 if (lif->lif_dad_wait) { in remove_lif()
623 lif->lif_dad_wait = _B_FALSE; in remove_lif()
626 lif->lif_lease = NULL; in remove_lif()
627 release_lif(lif); in remove_lif()
644 dhcp_lif_t *lif; in lookup_lif_by_name() local
646 for (lif = pif->pif_lifs; lif != NULL; lif = lif->lif_next) { in lookup_lif_by_name()
647 if (strcmp(lif->lif_name, lname) == 0) in lookup_lif_by_name()
651 return (lif); in lookup_lif_by_name()
665 checkaddr(const dhcp_lif_t *lif, int ioccmd, const in6_addr_t *addr, in checkaddr() argument
675 (void) strlcpy(lifr.lifr_name, lif->lif_name, LIFNAMSIZ); in checkaddr()
677 isv6 = lif->lif_pif->pif_isv6; in checkaddr()
683 lif->lif_name); in checkaddr()
688 lif->lif_name, ioccmd, strerror(errno)); in checkaddr()
697 lif->lif_name, inet_ntop(AF_INET6, &sin6->sin6_addr, in checkaddr()
711 lif->lif_name, inet_ntop(AF_INET, &sinp->sin_addr, in checkaddr()
728 verify_lif(const dhcp_lif_t *lif) in verify_lif() argument
733 dhcp_pif_t *pif = lif->lif_pif; in verify_lif()
736 (void) strlcpy(lifr.lifr_name, lif->lif_name, LIFNAMSIZ); in verify_lif()
745 lif->lif_name); in verify_lif()
753 if ((lif->lif_flags ^ lifr.lifr_flags) & DHCP_IFF_WATCH) { in verify_lif()
755 "%llx to %llx (%llx)", lif->lif_name, lif->lif_flags, in verify_lif()
756 lifr.lifr_flags, (lif->lif_flags ^ lifr.lifr_flags) & in verify_lif()
767 "on %s", lif->lif_name); in verify_lif()
774 lif->lif_name, pif->pif_index, lifr.lifr_index); in verify_lif()
805 if (!checkaddr(lif, SIOCGLIFADDR, &lif->lif_v6addr, "local address")) in verify_lif()
813 return (!(lif->lif_flags & IFF_POINTOPOINT) || in verify_lif()
814 checkaddr(lif, SIOCGLIFDSTADDR, &lif->lif_v6peer, in verify_lif()
817 if (!checkaddr(lif, SIOCGLIFNETMASK, &lif->lif_v6mask, in verify_lif()
821 return (checkaddr(lif, in verify_lif()
822 (lif->lif_flags & IFF_POINTOPOINT) ? SIOCGLIFDSTADDR : in verify_lif()
823 SIOCGLIFBRDADDR, &lif->lif_v6peer, "peer address")); in verify_lif()
839 canonize_lif(dhcp_lif_t *lif, boolean_t dhcponly) in canonize_lif() argument
849 if (IN6_IS_ADDR_UNSPECIFIED(&lif->lif_v6addr)) in canonize_lif()
852 isv6 = lif->lif_pif->pif_isv6; in canonize_lif()
854 isv6 ? 6 : 4, lif->lif_name); in canonize_lif()
856 lif->lif_v6addr = my_in6addr_any; in canonize_lif()
857 lif->lif_v6mask = my_in6addr_any; in canonize_lif()
858 lif->lif_v6peer = my_in6addr_any; in canonize_lif()
861 (void) strlcpy(lifr.lifr_name, lif->lif_name, LIFNAMSIZ); in canonize_lif()
868 lif->lif_name); in canonize_lif()
872 lif->lif_flags = lifr.lifr_flags; in canonize_lif()
877 lif->lif_name, lifr.lifr_flags); in canonize_lif()
899 lif->lif_name); in canonize_lif()
903 if (lif->lif_dad_wait) { in canonize_lif()
904 lif->lif_dad_wait = _B_FALSE; in canonize_lif()
905 lif->lif_lease->dl_smach->dsm_lif_wait--; in canonize_lif()
908 if (lif->lif_flags & IFF_POINTOPOINT) { in canonize_lif()
912 lif->lif_name); in canonize_lif()
918 lif->lif_name); in canonize_lif()
931 lif->lif_name); in canonize_lif()
940 "netmask on %s", lif->lif_name); in canonize_lif()
943 lif->lif_netmask = in canonize_lif()
964 dhcp_lif_t *lif; in plumb_lif() local
972 for (lif = pif->pif_lifs; lif != NULL; lif = lif->lif_next) { in plumb_lif()
973 if (IN6_ARE_ADDR_EQUAL(&lif->lif_v6addr, addr)) { in plumb_lif()
1028 if ((lif = insert_lif(pif, lifr.lifr_name, &error)) == NULL) in plumb_lif()
1032 lif->lif_name); in plumb_lif()
1033 lif->lif_plumbed = B_TRUE; in plumb_lif()
1035 return (lif); in plumb_lif()
1055 unplumb_lif(dhcp_lif_t *lif) in unplumb_lif() argument
1059 if (lif->lif_plumbed) { in unplumb_lif()
1063 (void) strlcpy(lifr.lifr_name, lif->lif_name, in unplumb_lif()
1068 lif->lif_name); in unplumb_lif()
1070 lif->lif_plumbed = B_FALSE; in unplumb_lif()
1078 if ((dlp = lif->lif_lease) != NULL && dlp->dl_smach->dsm_lif == lif) { in unplumb_lif()
1079 canonize_lif(lif, B_TRUE); in unplumb_lif()
1080 cancel_lif_timers(lif); in unplumb_lif()
1081 if (lif->lif_declined != NULL) { in unplumb_lif()
1083 lif->lif_declined = NULL; in unplumb_lif()
1087 lif->lif_lease = NULL; in unplumb_lif()
1088 release_lif(lif); in unplumb_lif()
1090 remove_lif(lif); in unplumb_lif()
1140 set_lif_dhcp(dhcp_lif_t *lif) in set_lif_dhcp() argument
1145 dhcp_pif_t *pif = lif->lif_pif; in set_lif_dhcp()
1149 (void) strlcpy(lifr.lifr_name, lif->lif_name, LIFNAMSIZ); in set_lif_dhcp()
1154 lif->lif_name); in set_lif_dhcp()
1157 lif->lif_flags = lifr.lifr_flags; in set_lif_dhcp()
1166 lif->lif_name, lifr.lifr_flags); in set_lif_dhcp()
1178 " on %s", lif->lif_name); in set_lif_dhcp()
1194 lif->lif_name); in set_lif_dhcp()
1197 lif->lif_flags = lifr.lifr_flags; in set_lif_dhcp()
1211 clear_lif_dhcp(dhcp_lif_t *lif) in clear_lif_dhcp() argument
1216 fd = lif->lif_pif->pif_isv6 ? v6_sock_fd : v4_sock_fd; in clear_lif_dhcp()
1218 (void) strlcpy(lifr.lifr_name, lif->lif_name, LIFNAMSIZ); in clear_lif_dhcp()
1226 lif->lif_flags = lifr.lifr_flags &= ~IFF_DHCPRUNNING; in clear_lif_dhcp()
1240 set_lif_deprecated(dhcp_lif_t *lif) in set_lif_deprecated() argument
1245 if (lif->lif_flags & IFF_DEPRECATED) in set_lif_deprecated()
1248 fd = lif->lif_pif->pif_isv6 ? v6_sock_fd : v4_sock_fd; in set_lif_deprecated()
1250 (void) strlcpy(lifr.lifr_name, lif->lif_name, LIFNAMSIZ); in set_lif_deprecated()
1260 lif->lif_flags = lifr.lifr_flags; in set_lif_deprecated()
1274 clear_lif_deprecated(dhcp_lif_t *lif) in clear_lif_deprecated() argument
1279 fd = lif->lif_pif->pif_isv6 ? v6_sock_fd : v4_sock_fd; in clear_lif_deprecated()
1281 (void) strlcpy(lifr.lifr_name, lif->lif_name, LIFNAMSIZ); in clear_lif_deprecated()
1285 lif->lif_name); in clear_lif_deprecated()
1296 "are %llx", lif->lif_name, lifr.lifr_flags); in clear_lif_deprecated()
1313 lif->lif_name); in clear_lif_deprecated()
1316 lif->lif_flags = lifr.lifr_flags; in clear_lif_deprecated()
1331 open_ip_lif(dhcp_lif_t *lif, in_addr_t addr_hbo, boolean_t bringup) in open_ip_lif() argument
1338 dhcp_pif_t *pif = lif->lif_pif; in open_ip_lif()
1340 if (lif->lif_sock_ip_fd != -1) { in open_ip_lif()
1342 lif->lif_name); in open_ip_lif()
1346 lif->lif_sock_ip_fd = socket(AF_INET, SOCK_DGRAM, 0); in open_ip_lif()
1347 if (lif->lif_sock_ip_fd == -1) { in open_ip_lif()
1352 if (!bind_sock(lif->lif_sock_ip_fd, IPPORT_BOOTPC, addr_hbo)) { in open_ip_lif()
1366 if (setsockopt(lif->lif_sock_ip_fd, IPPROTO_IP, IP_UNSPEC_SRC, in open_ip_lif()
1372 if (setsockopt(lif->lif_sock_ip_fd, IPPROTO_IP, IP_DHCPINIT_IF, in open_ip_lif()
1385 if (setsockopt(lif->lif_sock_ip_fd, IPPROTO_IP, IP_BROADCAST_TTL, &ttl, in open_ip_lif()
1392 if (setsockopt(lif->lif_sock_ip_fd, IPPROTO_IP, IP_BOUND_IF, &ifindex, in open_ip_lif()
1398 (void) strlcpy(lifr.lifr_name, lif->lif_name, LIFNAMSIZ); in open_ip_lif()
1418 lif->lif_flags = lifr.lifr_flags; in open_ip_lif()
1428 canonize_lif(lif, B_FALSE); in open_ip_lif()
1435 lif->lif_flags = lifr.lifr_flags; in open_ip_lif()
1446 lif->lif_netmask = in open_ip_lif()
1474 lif->lif_packet_id = iu_register_event(eh, lif->lif_sock_ip_fd, POLLIN, in open_ip_lif()
1475 dhcp_packet_lif, lif); in open_ip_lif()
1476 if (lif->lif_packet_id == -1) { in open_ip_lif()
1483 dhcpmsg(MSG_ERR, "open_ip_lif: %s: %s", lif->lif_name, errmsg); in open_ip_lif()
1484 close_ip_lif(lif); in open_ip_lif()
1496 close_ip_lif(dhcp_lif_t *lif) in close_ip_lif() argument
1498 if (lif->lif_packet_id != -1) { in close_ip_lif()
1499 (void) iu_unregister_event(eh, lif->lif_packet_id, NULL); in close_ip_lif()
1500 lif->lif_packet_id = -1; in close_ip_lif()
1502 if (lif->lif_sock_ip_fd != -1) { in close_ip_lif()
1503 (void) close(lif->lif_sock_ip_fd); in close_ip_lif()
1504 lif->lif_sock_ip_fd = -1; in close_ip_lif()
1519 lif_mark_decline(dhcp_lif_t *lif, const char *reason) in lif_mark_decline() argument
1521 if (lif->lif_declined == NULL) { in lif_mark_decline()
1524 lif->lif_declined = reason; in lif_mark_decline()
1525 if ((dlp = lif->lif_lease) != NULL) in lif_mark_decline()
1540 schedule_lif_timer(dhcp_lif_t *lif, dhcp_timer_t *dt, iu_tq_callback_t *expire) in schedule_lif_timer() argument
1549 release_lif(lif); in schedule_lif_timer()
1552 if (schedule_timer(dt, expire, lif)) { in schedule_lif_timer()
1553 hold_lif(lif); in schedule_lif_timer()
1571 cancel_lif_timer(dhcp_lif_t *lif, dhcp_timer_t *dt) in cancel_lif_timer() argument
1578 lif->lif_name); in cancel_lif_timer()
1579 release_lif(lif); in cancel_lif_timer()
1583 lif->lif_name); in cancel_lif_timer()
1595 cancel_lif_timers(dhcp_lif_t *lif) in cancel_lif_timers() argument
1597 cancel_lif_timer(lif, &lif->lif_preferred); in cancel_lif_timers()
1598 cancel_lif_timer(lif, &lif->lif_expire); in cancel_lif_timers()
1616 dhcp_lif_t *lif; in get_max_mtu() local
1623 for (lif = pif->pif_lifs; lif != NULL; in get_max_mtu()
1624 lif = lif->lif_next) { in get_max_mtu()
1625 (void) strlcpy(lifr.lifr_name, lif->lif_name, in get_max_mtu()
1649 dhcp_lif_t *lif; in expired_lif_state() local
1656 lif = dlp->dl_lifs; in expired_lif_state()
1659 for (; nlifs > 0; nlifs--, lif = lif->lif_next) { in expired_lif_state()
1660 if (lif->lif_expired) in expired_lif_state()
1685 dhcp_lif_t *lif; in find_expired_lif() local
1689 lif = dlp->dl_lifs; in find_expired_lif()
1691 for (; nlifs > 0; nlifs--, lif = lif->lif_next) { in find_expired_lif()
1692 if (lif->lif_expired) in find_expired_lif()
1693 return (lif); in find_expired_lif()