Deleted Added
full compact
if.c (78064) if.c (118660)
1/* $FreeBSD: head/usr.sbin/rtadvd/if.c 78064 2001-06-11 12:39:29Z ume $ */
1/* $FreeBSD: head/usr.sbin/rtadvd/if.c 118660 2003-08-08 16:38:23Z ume $ */
2/* $KAME: if.c,v 1.17 2001/01/21 15:27:30 itojun Exp $ */
3
4/*
5 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions

--- 180 unchanged lines hidden (view full) ---

190/* give interface index and its old flags, then new flags returned */
191int
192if_getflags(int ifindex, int oifflags)
193{
194 struct ifreq ifr;
195 int s;
196
197 if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
2/* $KAME: if.c,v 1.17 2001/01/21 15:27:30 itojun Exp $ */
3
4/*
5 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions

--- 180 unchanged lines hidden (view full) ---

190/* give interface index and its old flags, then new flags returned */
191int
192if_getflags(int ifindex, int oifflags)
193{
194 struct ifreq ifr;
195 int s;
196
197 if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
198 syslog(LOG_ERR, "<%s> socket: %s", __FUNCTION__,
198 syslog(LOG_ERR, "<%s> socket: %s", __func__,
199 strerror(errno));
200 return (oifflags & ~IFF_UP);
201 }
202
203 if_indextoname(ifindex, ifr.ifr_name);
204 if (ioctl(s, SIOCGIFFLAGS, (caddr_t)&ifr) < 0) {
205 syslog(LOG_ERR, "<%s> ioctl:SIOCGIFFLAGS: failed for %s",
199 strerror(errno));
200 return (oifflags & ~IFF_UP);
201 }
202
203 if_indextoname(ifindex, ifr.ifr_name);
204 if (ioctl(s, SIOCGIFFLAGS, (caddr_t)&ifr) < 0) {
205 syslog(LOG_ERR, "<%s> ioctl:SIOCGIFFLAGS: failed for %s",
206 __FUNCTION__, ifr.ifr_name);
206 __func__, ifr.ifr_name);
207 close(s);
208 return (oifflags & ~IFF_UP);
209 }
210 close(s);
211 return (ifr.ifr_flags);
212}
213
214#define ROUNDUP8(a) (1 + (((a) - 1) | 7))

--- 19 unchanged lines hidden (view full) ---

234 case IFT_ETHER:
235 ndopt->nd_opt_len = (ROUNDUP8(ETHER_ADDR_LEN + 2)) >> 3;
236 addr = (char *)(ndopt + 1);
237 memcpy(addr, LLADDR(sdl), ETHER_ADDR_LEN);
238 break;
239 default:
240 syslog(LOG_ERR,
241 "<%s> unsupported link type(%d)",
207 close(s);
208 return (oifflags & ~IFF_UP);
209 }
210 close(s);
211 return (ifr.ifr_flags);
212}
213
214#define ROUNDUP8(a) (1 + (((a) - 1) | 7))

--- 19 unchanged lines hidden (view full) ---

234 case IFT_ETHER:
235 ndopt->nd_opt_len = (ROUNDUP8(ETHER_ADDR_LEN + 2)) >> 3;
236 addr = (char *)(ndopt + 1);
237 memcpy(addr, LLADDR(sdl), ETHER_ADDR_LEN);
238 break;
239 default:
240 syslog(LOG_ERR,
241 "<%s> unsupported link type(%d)",
242 __FUNCTION__, sdl->sdl_type);
242 __func__, sdl->sdl_type);
243 exit(1);
244 }
245
246 return;
247}
248
249int
250rtbuf_len()

--- 20 unchanged lines hidden (view full) ---

271
272 *lenp = 0;
273 for (rtm = (struct rt_msghdr *)buf;
274 rtm < (struct rt_msghdr *)lim;
275 rtm = (struct rt_msghdr *)(((char *)rtm) + rtm->rtm_msglen)) {
276 /* just for safety */
277 if (!rtm->rtm_msglen) {
278 syslog(LOG_WARNING, "<%s> rtm_msglen is 0 "
243 exit(1);
244 }
245
246 return;
247}
248
249int
250rtbuf_len()

--- 20 unchanged lines hidden (view full) ---

271
272 *lenp = 0;
273 for (rtm = (struct rt_msghdr *)buf;
274 rtm < (struct rt_msghdr *)lim;
275 rtm = (struct rt_msghdr *)(((char *)rtm) + rtm->rtm_msglen)) {
276 /* just for safety */
277 if (!rtm->rtm_msglen) {
278 syslog(LOG_WARNING, "<%s> rtm_msglen is 0 "
279 "(buf=%p lim=%p rtm=%p)", __FUNCTION__,
279 "(buf=%p lim=%p rtm=%p)", __func__,
280 buf, lim, rtm);
281 break;
282 }
283 if (FILTER_MATCH(rtm->rtm_type, filter) == 0) {
284 continue;
285 }
286
287 switch (rtm->rtm_type) {

--- 202 unchanged lines hidden (view full) ---

490 mib[1] = PF_ROUTE;
491 mib[2] = 0;
492 mib[3] = AF_INET6;
493 mib[4] = NET_RT_IFLIST;
494 mib[5] = 0;
495
496 if (sysctl(mib, 6, NULL, size, NULL, 0) < 0) {
497 syslog(LOG_ERR, "<%s> sysctl: iflist size get failed",
280 buf, lim, rtm);
281 break;
282 }
283 if (FILTER_MATCH(rtm->rtm_type, filter) == 0) {
284 continue;
285 }
286
287 switch (rtm->rtm_type) {

--- 202 unchanged lines hidden (view full) ---

490 mib[1] = PF_ROUTE;
491 mib[2] = 0;
492 mib[3] = AF_INET6;
493 mib[4] = NET_RT_IFLIST;
494 mib[5] = 0;
495
496 if (sysctl(mib, 6, NULL, size, NULL, 0) < 0) {
497 syslog(LOG_ERR, "<%s> sysctl: iflist size get failed",
498 __FUNCTION__);
498 __func__);
499 exit(1);
500 }
501 if ((*buf = malloc(*size)) == NULL) {
499 exit(1);
500 }
501 if ((*buf = malloc(*size)) == NULL) {
502 syslog(LOG_ERR, "<%s> malloc failed", __FUNCTION__);
502 syslog(LOG_ERR, "<%s> malloc failed", __func__);
503 exit(1);
504 }
505 if (sysctl(mib, 6, *buf, size, NULL, 0) < 0) {
506 syslog(LOG_ERR, "<%s> sysctl: iflist get failed",
503 exit(1);
504 }
505 if (sysctl(mib, 6, *buf, size, NULL, 0) < 0) {
506 syslog(LOG_ERR, "<%s> sysctl: iflist get failed",
507 __FUNCTION__);
507 __func__);
508 exit(1);
509 }
510 return;
511}
512
513/*
514 * alloc buffer and parse if_msghdrs block passed as arg,
515 * and init the buffer as list of pointers ot each of the if_msghdr.

--- 9 unchanged lines hidden (view full) ---

525 /*
526 * Estimate least size of an iflist entry, to be obtained from kernel.
527 * Should add sizeof(sockaddr) ??
528 */
529 iflentry_size = sizeof(struct if_msghdr);
530 /* roughly estimate max list size of pointers to each if_msghdr */
531 malloc_size = (bufsize/iflentry_size) * sizeof(size_t);
532 if ((*ifmlist_p = (struct if_msghdr **)malloc(malloc_size)) == NULL) {
508 exit(1);
509 }
510 return;
511}
512
513/*
514 * alloc buffer and parse if_msghdrs block passed as arg,
515 * and init the buffer as list of pointers ot each of the if_msghdr.

--- 9 unchanged lines hidden (view full) ---

525 /*
526 * Estimate least size of an iflist entry, to be obtained from kernel.
527 * Should add sizeof(sockaddr) ??
528 */
529 iflentry_size = sizeof(struct if_msghdr);
530 /* roughly estimate max list size of pointers to each if_msghdr */
531 malloc_size = (bufsize/iflentry_size) * sizeof(size_t);
532 if ((*ifmlist_p = (struct if_msghdr **)malloc(malloc_size)) == NULL) {
533 syslog(LOG_ERR, "<%s> malloc failed", __FUNCTION__);
533 syslog(LOG_ERR, "<%s> malloc failed", __func__);
534 exit(1);
535 }
536
537 lim = buf + bufsize;
538 for (ifm = (struct if_msghdr *)buf; ifm < (struct if_msghdr *)lim;) {
539 if (ifm->ifm_msglen == 0) {
540 syslog(LOG_WARNING, "<%s> ifm_msglen is 0 "
534 exit(1);
535 }
536
537 lim = buf + bufsize;
538 for (ifm = (struct if_msghdr *)buf; ifm < (struct if_msghdr *)lim;) {
539 if (ifm->ifm_msglen == 0) {
540 syslog(LOG_WARNING, "<%s> ifm_msglen is 0 "
541 "(buf=%p lim=%p ifm=%p)", __FUNCTION__,
541 "(buf=%p lim=%p ifm=%p)", __func__,
542 buf, lim, ifm);
543 return;
544 }
545
546 if (ifm->ifm_type == RTM_IFINFO) {
547 (*ifmlist_p)[ifm->ifm_index] = ifm;
548 } else {
549 syslog(LOG_ERR, "out of sync parsing NET_RT_IFLIST\n"

--- 6 unchanged lines hidden (view full) ---

556 for (ifam = (struct ifa_msghdr *)
557 ((char *)ifm + ifm->ifm_msglen);
558 ifam < (struct ifa_msghdr *)lim;
559 ifam = (struct ifa_msghdr *)
560 ((char *)ifam + ifam->ifam_msglen)) {
561 /* just for safety */
562 if (!ifam->ifam_msglen) {
563 syslog(LOG_WARNING, "<%s> ifa_msglen is 0 "
542 buf, lim, ifm);
543 return;
544 }
545
546 if (ifm->ifm_type == RTM_IFINFO) {
547 (*ifmlist_p)[ifm->ifm_index] = ifm;
548 } else {
549 syslog(LOG_ERR, "out of sync parsing NET_RT_IFLIST\n"

--- 6 unchanged lines hidden (view full) ---

556 for (ifam = (struct ifa_msghdr *)
557 ((char *)ifm + ifm->ifm_msglen);
558 ifam < (struct ifa_msghdr *)lim;
559 ifam = (struct ifa_msghdr *)
560 ((char *)ifam + ifam->ifam_msglen)) {
561 /* just for safety */
562 if (!ifam->ifam_msglen) {
563 syslog(LOG_WARNING, "<%s> ifa_msglen is 0 "
564 "(buf=%p lim=%p ifam=%p)", __FUNCTION__,
564 "(buf=%p lim=%p ifam=%p)", __func__,
565 buf, lim, ifam);
566 return;
567 }
568 if (ifam->ifam_type != RTM_NEWADDR)
569 break;
570 }
571 ifm = (struct if_msghdr *)ifam;
572 }

--- 17 unchanged lines hidden ---
565 buf, lim, ifam);
566 return;
567 }
568 if (ifam->ifam_type != RTM_NEWADDR)
569 break;
570 }
571 ifm = (struct if_msghdr *)ifam;
572 }

--- 17 unchanged lines hidden ---