Lines Matching +full:use +full:- +full:rtm
2 * Copyright (c) 2001-2003
8 * Redistribution and use in source and binary forms, with or without
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * $Begemot: mibII.c 516 2006-10-27 15:54:02Z brandt_h $
48 /* if-index allocator */
108 /* user-forced update interval */
148 if (ifp->index == idx) in mib_find_if()
159 if (ifp->sysindex == sysindex) in mib_find_if_sys()
170 if (strcmp(ifp->name, name) == 0) in mib_find_if_name()
188 if (strlen(d->name) == len && strncmp(d->name, name, len) == 0) in mib_if_is_dyn()
200 if (strcmp(name, d->name) == 0) in mib_if_set_dyn()
204 strlcpy(d->name, name, sizeof(d->name)); in mib_if_set_dyn()
217 if (reg->mod == mod) { in mib_register_newif()
218 reg->func = func; in mib_register_newif()
223 return (-1); in mib_register_newif()
225 reg->mod = mod; in mib_register_newif()
226 reg->func = func; in mib_register_newif()
238 if (reg->mod == mod) { in mib_unregister_newif()
265 strlcpy(ifr.ifr_name, ifp->name, sizeof(ifr.ifr_name)); in mib_if_admin()
266 if (ioctl(mib_netsock, SIOCGIFFLAGS, &ifr) == -1) { in mib_if_admin()
267 syslog(LOG_ERR, "SIOCGIFFLAGS(%s): %m", ifp->name); in mib_if_admin()
268 return (-1); in mib_if_admin()
274 if (ioctl(mib_netsock, SIOCSIFFLAGS, &ifr) == -1) { in mib_if_admin()
275 syslog(LOG_ERR, "SIOCSIFFLAGS(%s): %m", ifp->name); in mib_if_admin()
276 return (-1); in mib_if_admin()
293 ifindex.var.subs[ifindex.var.len++] = ifp->index; in link_trap()
295 ifindex.v.integer = ifp->index; in link_trap()
309 struct mibif_private *p = ifp->private; in fetch_generic_mib()
315 name[4] = ifp->sysindex; in fetch_generic_mib()
318 len = sizeof(ifp->mib); in fetch_generic_mib()
319 if (sysctl(name, nitems(name), &ifp->mib, &len, NULL, 0) == -1) { in fetch_generic_mib()
322 ifp->name); in fetch_generic_mib()
323 return (-1); in fetch_generic_mib()
330 p->hc_inoctets = ifp->mib.ifmd_data.ifi_ibytes; in fetch_generic_mib()
331 p->hc_outoctets = ifp->mib.ifmd_data.ifi_obytes; in fetch_generic_mib()
332 p->hc_omcasts = ifp->mib.ifmd_data.ifi_omcasts; in fetch_generic_mib()
333 p->hc_opackets = ifp->mib.ifmd_data.ifi_opackets; in fetch_generic_mib()
334 p->hc_imcasts = ifp->mib.ifmd_data.ifi_imcasts; in fetch_generic_mib()
335 p->hc_ipackets = ifp->mib.ifmd_data.ifi_ipackets; in fetch_generic_mib()
340 if (old->ifmd_data.MIB > ifp->mib.ifmd_data.MIB) \ in fetch_generic_mib()
341 p->HC += (0x100000000ULL + \ in fetch_generic_mib()
342 ifp->mib.ifmd_data.MIB) - \ in fetch_generic_mib()
343 old->ifmd_data.MIB; \ in fetch_generic_mib()
345 p->HC += ifp->mib.ifmd_data.MIB - \ in fetch_generic_mib()
346 old->ifmd_data.MIB; in fetch_generic_mib()
362 * Update the 64-bit interface counters
371 oldmib = ifp->mib; in update_hc_counters()
439 static int kmib[2] = { -1, 0 }; /* for sysctl net.ifdescr_maxlen */ in mib_fetch_ifmib()
445 struct ifmibdata oldmib = ifp->mib; in mib_fetch_ifmib()
449 if (fetch_generic_mib(ifp, &oldmib) == -1) in mib_fetch_ifmib()
450 return (-1); in mib_fetch_ifmib()
457 if (ifp->trap_enable && ifp->mib.ifmd_data.ifi_link_state != in mib_fetch_ifmib()
459 (ifp->mib.ifmd_data.ifi_link_state == LINK_STATE_DOWN || in mib_fetch_ifmib()
461 link_trap(ifp, ifp->mib.ifmd_data.ifi_link_state == in mib_fetch_ifmib()
464 ifp->flags &= ~(MIBIF_HIGHSPEED | MIBIF_VERYHIGHSPEED); in mib_fetch_ifmib()
465 if (ifp->mib.ifmd_data.ifi_baudrate > 20000000) { in mib_fetch_ifmib()
466 ifp->flags |= MIBIF_HIGHSPEED; in mib_fetch_ifmib()
467 if (ifp->mib.ifmd_data.ifi_baudrate > 650000000) in mib_fetch_ifmib()
468 ifp->flags |= MIBIF_VERYHIGHSPEED; in mib_fetch_ifmib()
470 if (ifp->mib.ifmd_data.ifi_baudrate > mibif_maxspeed) { in mib_fetch_ifmib()
471 mibif_maxspeed = ifp->mib.ifmd_data.ifi_baudrate; in mib_fetch_ifmib()
482 name[4] = ifp->sysindex; in mib_fetch_ifmib()
484 if (sysctl(name, nitems(name), NULL, &len, NULL, 0) == -1) { in mib_fetch_ifmib()
486 ifp->name); in mib_fetch_ifmib()
487 if (ifp->specmib != NULL) { in mib_fetch_ifmib()
488 ifp->specmib = NULL; in mib_fetch_ifmib()
489 ifp->specmiblen = 0; in mib_fetch_ifmib()
494 if (ifp->specmib != NULL) { in mib_fetch_ifmib()
495 ifp->specmib = NULL; in mib_fetch_ifmib()
496 ifp->specmiblen = 0; in mib_fetch_ifmib()
501 if (ifp->specmiblen != len) { in mib_fetch_ifmib()
502 if ((newmib = realloc(ifp->specmib, len)) == NULL) { in mib_fetch_ifmib()
503 ifp->specmib = NULL; in mib_fetch_ifmib()
504 ifp->specmiblen = 0; in mib_fetch_ifmib()
507 ifp->specmib = newmib; in mib_fetch_ifmib()
508 ifp->specmiblen = len; in mib_fetch_ifmib()
510 if (sysctl(name, nitems(name), ifp->specmib, &len, NULL, 0) == -1) { in mib_fetch_ifmib()
511 syslog(LOG_WARNING, "sysctl linkmib (%s): %m", ifp->name); in mib_fetch_ifmib()
512 if (ifp->specmib != NULL) { in mib_fetch_ifmib()
513 ifp->specmib = NULL; in mib_fetch_ifmib()
514 ifp->specmiblen = 0; in mib_fetch_ifmib()
521 * kmib[0] == -1 at first call to mib_fetch_ifmib(). in mib_fetch_ifmib()
536 /* unexpected error from the kernel, use default value */ in mib_fetch_ifmib()
552 if ((ifp->alias = malloc(alias_maxlen)) == NULL) { in mib_fetch_ifmib()
557 strlcpy(irr.ifr_name, ifp->name, sizeof(irr.ifr_name)); in mib_fetch_ifmib()
558 irr.ifr_buffer.buffer = ifp->alias; in mib_fetch_ifmib()
560 if (ioctl(mib_netsock, SIOCGIFDESCR, &irr) == -1) { in mib_fetch_ifmib()
561 free(ifp->alias); in mib_fetch_ifmib()
562 ifp->alias = NULL; in mib_fetch_ifmib()
564 syslog(LOG_WARNING, "SIOCGIFDESCR (%s): %m", ifp->name); in mib_fetch_ifmib()
566 free(ifp->alias); in mib_fetch_ifmib()
567 ifp->alias = NULL; in mib_fetch_ifmib()
569 ifp->name, irr.ifr_buffer.length); in mib_fetch_ifmib()
571 ifp->alias_size = strnlen(ifp->alias, alias_maxlen) + 1; in mib_fetch_ifmib()
573 if (ifp->alias_size > MIBIF_ALIAS_SIZE) in mib_fetch_ifmib()
574 ifp->alias_size = MIBIF_ALIAS_SIZE; in mib_fetch_ifmib()
576 if (ifp->alias_size < alias_maxlen) in mib_fetch_ifmib()
577 ifp->alias = realloc(ifp->alias, ifp->alias_size); in mib_fetch_ifmib()
581 ifp->mibtick = get_ticks(); in mib_fetch_ifmib()
592 if (ifp->index == ifa->ifindex) in mib_first_ififa()
604 if (ifa->ifindex == ifa0->ifindex) in mib_next_ififa()
622 ifa->inaddr = addr; in alloc_ifa()
623 ifa->ifindex = ifindex; in alloc_ifa()
625 ha = ntohl(ifa->inaddr.s_addr); in alloc_ifa()
626 ifa->index.len = 4; in alloc_ifa()
627 ifa->index.subs[0] = (ha >> 24) & 0xff; in alloc_ifa()
628 ifa->index.subs[1] = (ha >> 16) & 0xff; in alloc_ifa()
629 ifa->index.subs[2] = (ha >> 8) & 0xff; in alloc_ifa()
630 ifa->index.subs[3] = (ha >> 0) & 0xff; in alloc_ifa()
632 ifa->flags = 0; in alloc_ifa()
633 ifa->inbcast.s_addr = 0; in alloc_ifa()
634 ifa->inmask.s_addr = 0xffffffff; in alloc_ifa()
664 info += roundup((*out)->sa_len, sizeof(long)); in mib_extract_addrs()
680 if (sdl->sdl_alen == 0) { in get_physaddr()
682 if (ifp->physaddrlen != 0) { in get_physaddr()
683 if ((rcv = mib_find_rcvaddr(ifp->index, ifp->physaddr, in get_physaddr()
684 ifp->physaddrlen)) != NULL) in get_physaddr()
686 free(ifp->physaddr); in get_physaddr()
687 ifp->physaddr = NULL; in get_physaddr()
688 ifp->physaddrlen = 0; in get_physaddr()
693 if (ifp->physaddrlen != sdl->sdl_alen) { in get_physaddr()
695 if (ifp->physaddrlen) { in get_physaddr()
697 if ((rcv = mib_find_rcvaddr(ifp->index, ifp->physaddr, in get_physaddr()
698 ifp->physaddrlen)) != NULL) in get_physaddr()
701 if ((np = realloc(ifp->physaddr, sdl->sdl_alen)) == NULL) { in get_physaddr()
702 free(ifp->physaddr); in get_physaddr()
703 ifp->physaddr = NULL; in get_physaddr()
704 ifp->physaddrlen = 0; in get_physaddr()
707 ifp->physaddr = np; in get_physaddr()
708 ifp->physaddrlen = sdl->sdl_alen; in get_physaddr()
710 } else if (memcmp(ifp->physaddr, ptr, ifp->physaddrlen) == 0) { in get_physaddr()
718 if ((rcv = mib_find_rcvaddr(ifp->index, ifp->physaddr, in get_physaddr()
719 ifp->physaddrlen)) != NULL) in get_physaddr()
723 memcpy(ifp->physaddr, ptr, ifp->physaddrlen); in get_physaddr()
726 if ((rcv = mib_rcvaddr_create(ifp, ifp->physaddr, ifp->physaddrlen)) != NULL) in get_physaddr()
727 rcv->flags |= MIBRCVADDR_HW; in get_physaddr()
742 if (ifp->xnotify != NULL) in mibif_free()
743 (*ifp->xnotify)(ifp, MIBIF_NOTIFY_DESTROY, ifp->xnotify_data); in mibif_free()
750 /* if this was the fastest interface - recompute this */ in mibif_free()
751 if (ifp->mib.ifmd_data.ifi_baudrate == mibif_maxspeed) { in mibif_free()
752 mibif_maxspeed = ifp->mib.ifmd_data.ifi_baudrate; in mibif_free()
754 if (ifp1->mib.ifmd_data.ifi_baudrate > mibif_maxspeed) in mibif_free()
756 ifp1->mib.ifmd_data.ifi_baudrate; in mibif_free()
760 if (ifp->alias != NULL) { in mibif_free()
761 free(ifp->alias); in mibif_free()
762 ifp->alias = NULL; in mibif_free()
764 free(ifp->private); in mibif_free()
765 ifp->private = NULL; in mibif_free()
766 free(ifp->physaddr); in mibif_free()
767 ifp->physaddr = NULL; in mibif_free()
768 free(ifp->specmib); in mibif_free()
769 ifp->specmib = NULL; in mibif_free()
772 if (map->mibif == ifp) { in mibif_free()
773 map->mibif = NULL; in mibif_free()
781 if (ifa->ifindex == ifp->index) in mibif_free()
790 if (rcv->ifindex == ifp->index) in mibif_free()
799 if (at->index.subs[0] == ifp->index) in mibif_free()
806 mib_if_number--; in mibif_free()
824 if ((ifp->private = malloc(sizeof(struct mibif_private))) == NULL) { in mibif_create()
829 memset(ifp->private, 0, sizeof(struct mibif_private)); in mibif_create()
831 ifp->sysindex = sysindex; in mibif_create()
832 strlcpy(ifp->name, name, sizeof(ifp->name)); in mibif_create()
833 strlcpy(ifp->descr, name, sizeof(ifp->descr)); in mibif_create()
834 ifp->spec_oid = oid_zeroDotZero; in mibif_create()
837 if (!mib_if_is_dyn(ifp->name)) { in mibif_create()
838 /* non-dynamic. look whether we know the interface */ in mibif_create()
840 if (strcmp(map->name, ifp->name) == 0) { in mibif_create()
841 ifp->index = map->ifindex; in mibif_create()
842 map->mibif = ifp; in mibif_create()
846 ifp->has_connector = 1; in mibif_create()
847 ifp->trap_enable = 1; in mibif_create()
850 /* new interface - get new index */ in mibif_create()
859 map->ifindex = next_if_index++; in mibif_create()
860 map->sysindex = ifp->sysindex; in mibif_create()
861 strcpy(map->name, ifp->name); in mibif_create()
862 map->mibif = ifp; in mibif_create()
865 /* re-instantiate. Introduce a counter discontinuity */ in mibif_create()
866 ifp->counter_disc = get_ticks(); in mibif_create()
868 ifp->index = map->ifindex; in mibif_create()
869 ifp->mib.ifmd_data.ifi_link_state = LINK_STATE_UNKNOWN; in mibif_create()
891 if ((*reg->func)(ifp)) in notify_newif()
906 if (!(ifp->mib.ifmd_flags & IFF_BROADCAST)) in check_llbcast()
909 switch (ifp->mib.ifmd_data.ifi_type) { in check_llbcast()
915 if (mib_find_rcvaddr(ifp->index, ether_bcast, 6) == NULL && in check_llbcast()
917 rcv->flags |= MIBRCVADDR_BCAST; in check_llbcast()
937 ifp->flags &= ~MIBIF_FOUND; in mib_refresh_iflist()
941 NULL, 0) == -1) { in mib_refresh_iflist()
953 if (sysctl(name, nitems(name), &mib, &len, NULL, 0) == -1) { in mib_refresh_iflist()
960 ifp->flags |= MIBIF_FOUND; in mib_refresh_iflist()
963 /* Unknown interface - create */ in mib_refresh_iflist()
965 ifp->flags |= MIBIF_FOUND; in mib_refresh_iflist()
978 if (!(ifp->flags & MIBIF_FOUND)) in mib_refresh_iflist()
993 if (ifa->inaddr.s_addr == addr.s_addr) in mib_find_ifa()
1002 process_arp(const struct rt_msghdr *rtm, const struct sockaddr_dl *sdl, in process_arp() argument
1009 if (sdl->sdl_alen == 0) in process_arp()
1011 if ((ifp = mib_find_if_sys(sdl->sdl_index)) == NULL) in process_arp()
1014 if ((at = mib_find_arp(ifp, sa->sin_addr)) == NULL && in process_arp()
1015 (at = mib_arp_create(ifp, sa->sin_addr, in process_arp()
1016 sdl->sdl_data + sdl->sdl_nlen, sdl->sdl_alen)) == NULL) in process_arp()
1019 if (rtm->rtm_rmx.rmx_expire == 0) in process_arp()
1020 at->flags |= MIBARP_PERM; in process_arp()
1022 at->flags &= ~MIBARP_PERM; in process_arp()
1023 at->flags |= MIBARP_FOUND; in process_arp()
1030 handle_rtmsg(struct rt_msghdr *rtm) in handle_rtmsg() argument
1046 if (rtm->rtm_version != RTM_VERSION) { in handle_rtmsg()
1047 syslog(LOG_ERR, "Bogus RTM version %u", rtm->rtm_version); in handle_rtmsg()
1051 switch (rtm->rtm_type) { in handle_rtmsg()
1054 ifamp = (struct ifa_msghdr *)rtm; in handle_rtmsg()
1061 if ((ifa = mib_find_ifa(sa->sin_addr)) == NULL) { in handle_rtmsg()
1068 if ((ifa = alloc_ifa(ifp->index, sa->sin_addr)) == NULL) in handle_rtmsg()
1072 ifa->inmask = sa->sin_addr; in handle_rtmsg()
1076 ifa->inbcast = sa->sin_addr; in handle_rtmsg()
1078 ifa->flags |= MIBIFA_FOUND; in handle_rtmsg()
1082 ifamp = (struct ifa_msghdr *)rtm; in handle_rtmsg()
1089 if ((ifa = mib_find_ifa(sa->sin_addr)) != NULL) { in handle_rtmsg()
1090 ifa->flags |= MIBIFA_FOUND; in handle_rtmsg()
1091 if (!(ifa->flags & MIBIFA_DESTROYED)) in handle_rtmsg()
1097 ifmam = (struct ifma_msghdr *)rtm; in handle_rtmsg()
1098 mib_extract_addrs(ifmam->ifmam_addrs, (u_char *)(ifmam + 1), addrs); in handle_rtmsg()
1100 addrs[RTAX_IFA]->sa_family != AF_LINK) in handle_rtmsg()
1103 if ((rcv = mib_find_rcvaddr(sdl->sdl_index, in handle_rtmsg()
1104 sdl->sdl_data + sdl->sdl_nlen, sdl->sdl_alen)) == NULL) { in handle_rtmsg()
1106 if ((ifp = mib_find_if_sys(sdl->sdl_index)) == NULL) { in handle_rtmsg()
1108 "interface %u", sdl->sdl_index); in handle_rtmsg()
1112 sdl->sdl_data + sdl->sdl_nlen, sdl->sdl_alen)) == NULL) in handle_rtmsg()
1114 rcv->flags |= MIBRCVADDR_VOLATILE; in handle_rtmsg()
1116 rcv->flags |= MIBRCVADDR_FOUND; in handle_rtmsg()
1120 ifmam = (struct ifma_msghdr *)rtm; in handle_rtmsg()
1121 mib_extract_addrs(ifmam->ifmam_addrs, (u_char *)(ifmam + 1), addrs); in handle_rtmsg()
1123 addrs[RTAX_IFA]->sa_family != AF_LINK) in handle_rtmsg()
1126 if ((rcv = mib_find_rcvaddr(sdl->sdl_index, in handle_rtmsg()
1127 sdl->sdl_data + sdl->sdl_nlen, sdl->sdl_alen)) != NULL) in handle_rtmsg()
1132 ifm = (struct if_msghdr *)(void *)rtm; in handle_rtmsg()
1133 mib_extract_addrs(ifm->ifm_addrs, (u_char *)(ifm + 1), addrs); in handle_rtmsg()
1134 if ((ifp = mib_find_if_sys(ifm->ifm_index)) == NULL) in handle_rtmsg()
1137 addrs[RTAX_IFP]->sa_family == AF_LINK) { in handle_rtmsg()
1139 ptr = sdl->sdl_data + sdl->sdl_nlen; in handle_rtmsg()
1147 ifan = (struct if_announcemsghdr *)rtm; in handle_rtmsg()
1148 ifp = mib_find_if_sys(ifan->ifan_index); in handle_rtmsg()
1150 switch (ifan->ifan_what) { in handle_rtmsg()
1153 if (ifp == NULL && (ifp = mibif_create(ifan->ifan_index, in handle_rtmsg()
1154 ifan->ifan_name)) != NULL) { in handle_rtmsg()
1170 mib_extract_addrs(rtm->rtm_addrs, (u_char *)(rtm + 1), addrs); in handle_rtmsg()
1171 if (rtm->rtm_flags & RTF_LLINFO) { in handle_rtmsg()
1174 addrs[RTAX_DST]->sa_family != AF_INET || in handle_rtmsg()
1175 addrs[RTAX_GATEWAY]->sa_family != AF_LINK) in handle_rtmsg()
1177 process_arp(rtm, in handle_rtmsg()
1181 if (rtm->rtm_errno == 0 && (rtm->rtm_flags & RTF_UP)) in handle_rtmsg()
1182 mib_sroute_process(rtm, addrs[RTAX_GATEWAY], in handle_rtmsg()
1188 mib_extract_addrs(rtm->rtm_addrs, (u_char *)(rtm + 1), addrs); in handle_rtmsg()
1190 if (rtm->rtm_errno == 0 && (rtm->rtm_flags & RTF_UP)) in handle_rtmsg()
1191 mib_sroute_process(rtm, addrs[RTAX_GATEWAY], in handle_rtmsg()
1201 mib_send_rtmsg(struct rt_msghdr *rtm, struct sockaddr *gw, in mib_send_rtmsg() argument
1209 len = sizeof(*rtm) + SA_SIZE(gw) + SA_SIZE(dst) + SA_SIZE(mask); in mib_send_rtmsg()
1217 msg->rtm_flags = 0; in mib_send_rtmsg()
1218 msg->rtm_version = RTM_VERSION; in mib_send_rtmsg()
1219 msg->rtm_addrs = RTA_DST | RTA_GATEWAY; in mib_send_rtmsg()
1228 msg->rtm_addrs |= RTA_NETMASK; in mib_send_rtmsg()
1230 msg->rtm_msglen = cp - (char *)msg; in mib_send_rtmsg()
1231 msg->rtm_type = RTM_GET; in mib_send_rtmsg()
1232 if ((sent = write(route, msg, msg->rtm_msglen)) == -1) { in mib_send_rtmsg()
1237 if (sent != msg->rtm_msglen) { in mib_send_rtmsg()
1264 if (sysctl(name, nitems(name), NULL, lenp, NULL, 0) == -1) { in mib_fetch_rtab()
1297 * receive addresses, arp-table.
1304 struct rt_msghdr *rtm; in update_ifa_info() local
1317 ifa->flags &= ~MIBIFA_FOUND; in update_ifa_info()
1319 rcv->flags &= ~MIBRCVADDR_FOUND; in update_ifa_info()
1328 rtm = (struct rt_msghdr *)(void *)next; in update_ifa_info()
1329 next += rtm->rtm_msglen; in update_ifa_info()
1330 handle_rtmsg(rtm); in update_ifa_info()
1343 if (!(ifa->flags & MIBIFA_FOUND)) in update_ifa_info()
1351 if (!(rcv->flags & (MIBRCVADDR_FOUND | MIBRCVADDR_BCAST | in update_ifa_info()
1367 struct rt_msghdr *rtm; in mib_arp_update() local
1374 at->flags &= ~MIBARP_FOUND; in mib_arp_update()
1383 rtm = (struct rt_msghdr *)(void *)next; in mib_arp_update()
1384 next += rtm->rtm_msglen; in mib_arp_update()
1385 handle_rtmsg(rtm); in mib_arp_update()
1392 if (!(at->flags & MIBARP_FOUND)) in mib_arp_update()
1409 struct rt_msghdr *rtm; in route_input() local
1411 if ((n = read(fd, buf, sizeof(buf))) == -1) in route_input()
1417 rtm = (struct rt_msghdr *)(void *)buf; in route_input()
1418 if ((size_t)n != rtm->rtm_msglen) in route_input()
1419 errx(1, "n=%zu, rtm_msglen=%u", (size_t)n, rtm->rtm_msglen); in route_input()
1421 handle_rtmsg(rtm); in route_input()
1438 sa->sin_family = AF_INET; in siocaifaddr()
1439 sa->sin_len = sizeof(*sa); in siocaifaddr()
1440 sa->sin_addr = addr; in siocaifaddr()
1443 sa->sin_family = AF_INET; in siocaifaddr()
1444 sa->sin_len = sizeof(*sa); in siocaifaddr()
1445 sa->sin_addr = mask; in siocaifaddr()
1448 sa->sin_family = AF_INET; in siocaifaddr()
1449 sa->sin_len = sizeof(*sa); in siocaifaddr()
1450 sa->sin_addr = bcast; in siocaifaddr()
1467 sa->sin_family = AF_INET; in siocdifaddr()
1468 sa->sin_len = sizeof(*sa); in siocdifaddr()
1469 sa->sin_addr = addr; in siocdifaddr()
1486 sa->sin_family = AF_INET; in verify_ifa()
1487 sa->sin_len = sizeof(*sa); in verify_ifa()
1488 sa->sin_addr = ifa->inaddr; in verify_ifa()
1490 if (ioctl(mib_netsock, SIOCGIFADDR, &req) == -1) in verify_ifa()
1491 return (-1); in verify_ifa()
1492 if (ifa->inaddr.s_addr != sa->sin_addr.s_addr) { in verify_ifa()
1494 return (-1); in verify_ifa()
1497 if (ioctl(mib_netsock, SIOCGIFNETMASK, &req) == -1) in verify_ifa()
1498 return (-1); in verify_ifa()
1499 if (ifa->inmask.s_addr != sa->sin_addr.s_addr) { in verify_ifa()
1501 return (-1); in verify_ifa()
1515 if ((ifp = mib_find_if(ifa->ifindex)) == NULL) in mib_undestroy_ifa()
1519 if (siocaifaddr(ifp->name, ifa->inaddr, ifa->inmask, ifa->inbcast)) in mib_undestroy_ifa()
1523 ifa->flags &= ~MIBIFA_DESTROYED; in mib_undestroy_ifa()
1534 if ((ifp = mib_find_if(ifa->ifindex)) == NULL) { in mib_destroy_ifa()
1537 return (-1); in mib_destroy_ifa()
1539 if (siocdifaddr(ifp->name, ifa->inaddr)) { in mib_destroy_ifa()
1543 return (-1); in mib_destroy_ifa()
1545 ifa->flags |= MIBIFA_DESTROYED; in mib_destroy_ifa()
1558 if ((ifp = mib_find_if(ifa->ifindex)) == NULL) { in mib_unmodify_ifa()
1564 if (siocaifaddr(ifp->name, ifa->inaddr, ifa->inmask, ifa->inbcast)) { in mib_unmodify_ifa()
1579 if ((ifp = mib_find_if(ifa->ifindex)) == NULL) { in mib_modify_ifa()
1582 return (-1); in mib_modify_ifa()
1585 if (siocaifaddr(ifp->name, ifa->inaddr, ifa->inmask, ifa->inbcast)) { in mib_modify_ifa()
1588 return (-1); in mib_modify_ifa()
1591 if (verify_ifa(ifp->name, ifa)) { in mib_modify_ifa()
1594 return (-1); in mib_modify_ifa()
1609 if ((ifp = mib_find_if(ifa->ifindex)) == NULL) { in mib_uncreate_ifa()
1614 if (siocdifaddr(ifp->name, ifa->inaddr)) { in mib_uncreate_ifa()
1637 ifa->inmask = mask; in mib_create_ifa()
1638 ifa->inbcast = bcast; in mib_create_ifa()
1640 if (siocaifaddr(ifp->name, ifa->inaddr, ifa->inmask, ifa->inbcast)) { in mib_create_ifa()
1645 if (verify_ifa(ifp->name, ifa)) { in mib_create_ifa()
1664 if (ioctl(mib_netsock, SIOCIFGCLONERS, &req) == -1) { in get_cloners()
1674 if (ioctl(mib_netsock, SIOCIFGCLONERS, &req) == -1) { in get_cloners()
1694 ifa->flags &= ~MIBIFA_DESTROYED; in mibII_idle()
1728 " sub-layers.", module); in mibII_start()
1757 if ((route = socket(PF_ROUTE, SOCK_RAW, AF_UNSPEC)) == -1) { in mibII_init()
1759 return (-1); in mibII_init()
1762 if ((mib_netsock = socket(PF_INET, SOCK_DGRAM, 0)) == -1) { in mibII_init()
1765 return (-1); in mibII_init()
1785 if (route != -1) in mibII_fini()
1787 if (mib_netsock != -1) in mibII_fini()
1809 if (ifp->xnotify_mod == mod) { in mibII_loading()
1810 ifp->xnotify_mod = NULL; in mibII_loading()
1811 ifp->xnotify_data = NULL; in mibII_loading()
1812 ifp->xnotify = NULL; in mibII_loading()
1840 ifp->xnotify = func; in mibif_notify()
1841 ifp->xnotify_data = data; in mibif_notify()
1842 ifp->xnotify_mod = mod; in mibif_notify()
1852 ifp->xnotify = NULL; in mibif_unnotify()
1853 ifp->xnotify_data = NULL; in mibif_unnotify()
1854 ifp->xnotify_mod = NULL; in mibif_unnotify()