Lines Matching defs:lif

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