Changeset 1af76095 in rtems
- Timestamp:
- 04/17/05 09:07:43 (19 years ago)
- Branches:
- 4.10, 4.11, 4.8, 4.9, 5, master
- Children:
- 55439c70
- Parents:
- 7c2f0e9f
- Location:
- cpukit
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
cpukit/ChangeLog
r7c2f0e9f r1af76095 1 2005-04-17 Ralf Corsepius <ralf.corsepius@rtems.org> 2 3 * libnetworking/net/rtsock.c: More updates from FreeBSD. 4 1 5 2005-04-17 Ralf Corsepius <ralf.corsepius@rtems.org> 2 6 -
cpukit/libnetworking/net/rtsock.c
r7c2f0e9f r1af76095 27 27 * SUCH DAMAGE. 28 28 * 29 * @(#)rtsock.c 8. 5 (Berkeley) 11/2/9430 * $Id$29 * @(#)rtsock.c 8.7 (Berkeley) 10/12/95 30 * $FreeBSD: src/sys/net/rtsock.c,v 1.122 2005/03/26 21:49:43 sam Exp $ 31 31 */ 32 32 33 /* 34 * $Id$ 35 */ 36 33 37 #include <sys/param.h> 34 38 #include <sys/queue.h> … … 59 63 }; 60 64 61 static struct mbuf * 62 rt_msg1 __P((int, struct rt_addrinfo *)); 63 static int rt_msg2 __P((int, 64 struct rt_addrinfo *, caddr_t, struct walkarg *)); 65 static int rt_xaddrs __P((caddr_t, caddr_t, struct rt_addrinfo *)); 66 static int sysctl_dumpentry __P((struct radix_node *rn, void *vw)); 67 static int sysctl_iflist __P((int af, struct walkarg *w)); 68 static int route_output __P((struct mbuf *, struct socket *)); 69 static int route_usrreq __P((struct socket *, 70 int, struct mbuf *, struct mbuf *, struct mbuf *)); 71 static void rt_setmetrics __P((u_long, struct rt_metrics *, struct rt_metrics *)); 72 73 /* Sleazy use of local variables throughout file, warning!!!! */ 74 #define dst info.rti_info[RTAX_DST] 75 #define gate info.rti_info[RTAX_GATEWAY] 76 #define netmask info.rti_info[RTAX_NETMASK] 77 #define genmask info.rti_info[RTAX_GENMASK] 78 #define ifpaddr info.rti_info[RTAX_IFP] 79 #define ifaaddr info.rti_info[RTAX_IFA] 80 #define brdaddr info.rti_info[RTAX_BRD] 65 static struct mbuf *rt_msg1(int type, struct rt_addrinfo *rtinfo); 66 static int rt_msg2(int type, struct rt_addrinfo *rtinfo, 67 caddr_t cp, struct walkarg *w); 68 static int rt_xaddrs(caddr_t cp, caddr_t cplim, 69 struct rt_addrinfo *rtinfo); 70 static int sysctl_dumpentry(struct radix_node *rn, void *vw); 71 static int sysctl_iflist(int af, struct walkarg *w); 72 static int route_output(struct mbuf *m, struct socket *so); 73 static int route_usrreq(struct socket *, 74 int, struct mbuf *, struct mbuf *, struct mbuf *); 75 static void rt_setmetrics(u_long which, const struct rt_metrics *in, 76 struct rt_metrics *out); 81 77 82 78 /*ARGSUSED*/ 83 79 static int 84 80 route_usrreq(so, req, m, nam, control) 85 registerstruct socket *so;81 struct socket *so; 86 82 int req; 87 83 struct mbuf *m, *nam, *control; 88 84 { 89 registerint error = 0;90 registerstruct rawcb *rp = sotorawcb(so);85 int error = 0; 86 struct rawcb *rp = sotorawcb(so); 91 87 int s; 92 88 … … 138 134 /*ARGSUSED*/ 139 135 static int 140 route_output(m, so) 141 register struct mbuf *m; 142 struct socket *so; 143 { 144 register struct rt_msghdr *rtm = 0; 145 register struct rtentry *rt = 0; 136 route_output(struct mbuf *m, struct socket *so) 137 { 138 #define sa_equal(a1, a2) (bcmp((a1), (a2), (a1)->sa_len) == 0) 139 struct rt_msghdr *rtm = NULL; 140 struct rtentry *rt = NULL; 146 141 struct rtentry *saved_nrt = 0; 147 142 struct radix_node_head *rnh; 148 143 struct rt_addrinfo info; 149 144 int len, error = 0; 150 struct ifnet *ifp = 0;151 struct ifaddr *ifa = 0;145 struct ifnet *ifp = NULL; 146 struct ifaddr *ifa = NULL; 152 147 153 148 #define senderr(e) { error = e; goto flush;} 154 if (m == 0|| ((m->m_len < sizeof(long)) &&155 (m = m_pullup(m, sizeof(long))) == 0))149 if (m == NULL || ((m->m_len < sizeof(long)) && 150 (m = m_pullup(m, sizeof(long))) == NULL)) 156 151 return (ENOBUFS); 157 152 if ((m->m_flags & M_PKTHDR) == 0) … … 160 155 if (len < sizeof(*rtm) || 161 156 len != mtod(m, struct rt_msghdr *)->rtm_msglen) { 162 dst = 0;157 info.rti_info[RTAX_DST] = NULL; 163 158 senderr(EINVAL); 164 159 } 165 160 R_Malloc(rtm, struct rt_msghdr *, len); 166 if (rtm == 0) {167 dst = 0;161 if (rtm == NULL) { 162 info.rti_info[RTAX_DST] = NULL; 168 163 senderr(ENOBUFS); 169 164 } 170 165 m_copydata(m, 0, len, (caddr_t)rtm); 171 166 if (rtm->rtm_version != RTM_VERSION) { 172 dst = 0;167 info.rti_info[RTAX_DST] = NULL; 173 168 senderr(EPROTONOSUPPORT); 174 169 } 175 170 info.rti_addrs = rtm->rtm_addrs; 176 171 if (rt_xaddrs((caddr_t)(rtm + 1), len + (caddr_t)rtm, &info)) { 177 dst = 0;172 info.rti_info[RTAX_DST] = NULL; 178 173 senderr(EINVAL); 179 174 } 180 if (dst == 0 || (dst->sa_family >= AF_MAX) 181 || (gate != 0 && (gate->sa_family >= AF_MAX))) 175 if (info.rti_info[RTAX_DST] == NULL || 176 info.rti_info[RTAX_DST]->sa_family >= AF_MAX || 177 (info.rti_info[RTAX_GATEWAY] != NULL && 178 info.rti_info[RTAX_GATEWAY]->sa_family >= AF_MAX)) 182 179 senderr(EINVAL); 183 if ( genmask) {180 if (info.rti_info[RTAX_GENMASK]) { 184 181 struct radix_node *t; 185 t = rn_addmask((caddr_t)genmask, 0, 1); 186 if (t && Bcmp(genmask, t->rn_key, *(u_char *)genmask) == 0) 187 genmask = (struct sockaddr *)(t->rn_key); 182 t = rn_addmask((caddr_t) info.rti_info[RTAX_GENMASK], 0, 1); 183 if (t != NULL && 184 Bcmp(info.rti_info[RTAX_GENMASK], t->rn_key, *(u_char *)info.rti_info[RTAX_GENMASK]) == 0) 185 info.rti_info[RTAX_GENMASK] = 186 (struct sockaddr *)t->rn_key; 188 187 else 189 188 senderr(ENOBUFS); … … 192 191 193 192 case RTM_ADD: 194 if ( gate == 0)193 if (info.rti_info[RTAX_GATEWAY] == NULL) 195 194 senderr(EINVAL); 196 error = rtrequest(RTM_ADD, dst, gate, netmask,195 error = rtrequest(RTM_ADD, info.rti_info[RTAX_DST], info.rti_info[RTAX_GATEWAY], info.rti_info[RTAX_NETMASK], 197 196 rtm->rtm_flags, &saved_nrt); 198 197 if (error == 0 && saved_nrt) { … … 203 202 (rtm->rtm_inits & rtm->rtm_rmx.rmx_locks); 204 203 saved_nrt->rt_refcnt--; 205 saved_nrt->rt_genmask = genmask;204 saved_nrt->rt_genmask = info.rti_info[RTAX_GENMASK]; 206 205 } 207 206 break; 208 207 209 208 case RTM_DELETE: 210 error = rtrequest(RTM_DELETE, dst, gate, netmask,209 error = rtrequest(RTM_DELETE, info.rti_info[RTAX_DST], info.rti_info[RTAX_GATEWAY], info.rti_info[RTAX_NETMASK], 211 210 rtm->rtm_flags, &saved_nrt); 212 211 if (error == 0) { … … 220 219 case RTM_CHANGE: 221 220 case RTM_LOCK: 222 if ((rnh = rt_tables[dst->sa_family]) == 0) { 221 rnh = rt_tables[info.rti_info[RTAX_DST]->sa_family]; 222 if (rnh == NULL) { 223 223 senderr(EAFNOSUPPORT); 224 224 } else if ((rt = (struct rtentry *) 225 rnh->rnh_lookup( dst, netmask, rnh)))225 rnh->rnh_lookup(info.rti_info[RTAX_DST], info.rti_info[RTAX_NETMASK], rnh))) 226 226 rt->rt_refcnt++; 227 227 else … … 231 231 case RTM_GET: 232 232 report: 233 dst= rt_key(rt);234 gate= rt->rt_gateway;235 netmask= rt_mask(rt);236 genmask= rt->rt_genmask;233 info.rti_info[RTAX_DST] = rt_key(rt); 234 info.rti_info[RTAX_GATEWAY] = rt->rt_gateway; 235 info.rti_info[RTAX_NETMASK] = rt_mask(rt); 236 info.rti_info[RTAX_GENMASK] = rt->rt_genmask; 237 237 if (rtm->rtm_addrs & (RTA_IFP | RTA_IFA)) { 238 238 ifp = rt->rt_ifp; 239 239 if (ifp) { 240 i fpaddr= ifp->if_addrlist->ifa_addr;241 i faaddr= rt->rt_ifa->ifa_addr;240 info.rti_info[RTAX_IFP] = ifp->if_addrlist->ifa_addr; 241 info.rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr; 242 242 rtm->rtm_index = ifp->if_index; 243 243 } else { 244 i fpaddr = 0;245 i faaddr = 0;244 info.rti_info[RTAX_IFP] = NULL; 245 info.rti_info[RTAX_IFA] = NULL; 246 246 } 247 247 } 248 len = rt_msg2(rtm->rtm_type, &info, (caddr_t)0, 249 (struct walkarg *)0); 248 len = rt_msg2(rtm->rtm_type, &info, NULL, NULL); 250 249 if (len > rtm->rtm_msglen) { 251 250 struct rt_msghdr *new_rtm; 252 251 R_Malloc(new_rtm, struct rt_msghdr *, len); 253 if (new_rtm == 0)252 if (new_rtm == NULL) { 254 253 senderr(ENOBUFS); 254 } 255 255 Bcopy(rtm, new_rtm, rtm->rtm_msglen); 256 256 Free(rtm); rtm = new_rtm; 257 257 } 258 (void)rt_msg2(rtm->rtm_type, &info, (caddr_t)rtm, 259 (struct walkarg *)0); 258 (void)rt_msg2(rtm->rtm_type, &info, (caddr_t)rtm, NULL); 260 259 rtm->rtm_flags = rt->rt_flags; 261 260 rtm->rtm_rmx = rt->rt_rmx; … … 264 263 265 264 case RTM_CHANGE: 266 if ( gate && (error = rt_setgate(rt, rt_key(rt), gate)))265 if (info.rti_info[RTAX_GATEWAY] && (error = rt_setgate(rt, rt_key(rt), info.rti_info[RTAX_GATEWAY]))) 267 266 senderr(error); 268 267 … … 274 273 * default gateway. Changing flags still doesn't work. 275 274 */ 276 if ((rt->rt_flags & RTF_GATEWAY) && ! gate)277 gate= rt->rt_gateway;275 if ((rt->rt_flags & RTF_GATEWAY) && !info.rti_info[RTAX_GATEWAY]) 276 info.rti_info[RTAX_GATEWAY] = rt->rt_gateway; 278 277 279 278 /* new gateway could require new ifaddr, ifp; 280 279 flags may also be different; ifp may be specified 281 280 by ll sockaddr when protocol address is ambiguous */ 282 if (i fpaddr && (ifa = ifa_ifwithnet(ifpaddr)) &&283 (ifp = ifa->ifa_ifp) && (i faaddr || gate))284 ifa = ifaof_ifpforaddr(i faaddr ? ifaaddr : gate,281 if (info.rti_info[RTAX_IFP] && (ifa = ifa_ifwithnet(info.rti_info[RTAX_IFP])) && 282 (ifp = ifa->ifa_ifp) && (info.rti_info[RTAX_IFA] || info.rti_info[RTAX_GATEWAY])) 283 ifa = ifaof_ifpforaddr(info.rti_info[RTAX_IFA] ? info.rti_info[RTAX_IFA] : info.rti_info[RTAX_GATEWAY], 285 284 ifp); 286 else if ((i faaddr && (ifa = ifa_ifwithaddr(ifaaddr))) ||287 ( gate&& (ifa = ifa_ifwithroute(rt->rt_flags,288 rt_key(rt), gate))))285 else if ((info.rti_info[RTAX_IFA] && (ifa = ifa_ifwithaddr(info.rti_info[RTAX_IFA]))) || 286 (info.rti_info[RTAX_GATEWAY] && (ifa = ifa_ifwithroute(rt->rt_flags, 287 rt_key(rt), info.rti_info[RTAX_GATEWAY])))) 289 288 ifp = ifa->ifa_ifp; 290 289 if (ifa) { 291 registerstruct ifaddr *oifa = rt->rt_ifa;290 struct ifaddr *oifa = rt->rt_ifa; 292 291 if (oifa != ifa) { 293 292 if (oifa && oifa->ifa_rtrequest) 294 293 oifa->ifa_rtrequest(RTM_DELETE, 295 rt, gate);294 rt, info.rti_info[RTAX_GATEWAY]); 296 295 IFAFREE(rt->rt_ifa); 297 296 rt->rt_ifa = ifa; … … 303 302 &rt->rt_rmx); 304 303 if (rt->rt_ifa && rt->rt_ifa->ifa_rtrequest) 305 rt->rt_ifa->ifa_rtrequest(RTM_ADD, rt, gate); 306 if (genmask) 307 rt->rt_genmask = genmask; 308 /* 309 * Fall into 310 */ 304 rt->rt_ifa->ifa_rtrequest(RTM_ADD, rt, info.rti_info[RTAX_GATEWAY]); 305 if (info.rti_info[RTAX_GENMASK]) 306 rt->rt_genmask = info.rti_info[RTAX_GENMASK]; 307 /* FALLTHROUGH */ 311 308 case RTM_LOCK: 312 309 rt->rt_rmx.rmx_locks &= ~(rtm->rtm_inits); … … 328 325 rtm->rtm_flags |= RTF_DONE; 329 326 } 330 if (rt) 327 if (rt) /* XXX can this be true? */ 331 328 rtfree(rt); 332 329 { 333 register struct rawcb *rp = 0;330 struct rawcb *rp = NULL; 334 331 /* 335 332 * Check to see if we don't want our own messages. … … 351 348 if (rp) 352 349 rp->rcb_proto.sp_family = 0; /* Avoid us */ 353 if ( dst)354 route_proto.sp_protocol = dst->sa_family;350 if (info.rti_info[RTAX_DST]) 351 route_proto.sp_protocol = info.rti_info[RTAX_DST]->sa_family; 355 352 raw_input(m, &route_proto, &route_src, &route_dst); 356 353 if (rp) … … 358 355 } 359 356 return (error); 357 #undef sa_equal 360 358 } 361 359 362 360 static void 363 rt_setmetrics(which, in, out) 364 u_long which; 365 register struct rt_metrics *in, *out; 361 rt_setmetrics(u_long which, const struct rt_metrics *in, 362 struct rt_metrics *out) 366 363 { 367 364 #define metric(f, e) if (which & (f)) out->e = in->e; … … 388 385 */ 389 386 static int 390 rt_xaddrs(cp, cplim, rtinfo) 391 register caddr_t cp, cplim; 392 register struct rt_addrinfo *rtinfo; 393 { 394 register struct sockaddr *sa; 395 register int i; 387 rt_xaddrs(caddr_t cp, caddr_t cplim, struct rt_addrinfo *rtinfo) 388 { 389 struct sockaddr *sa; 390 int i; 396 391 397 392 bzero(rtinfo->rti_info, sizeof(rtinfo->rti_info)); 398 for (i = 0; (i < RTAX_MAX) && (cp < cplim); i++) {393 for (i = 0; i < RTAX_MAX && cp < cplim; i++) { 399 394 if ((rtinfo->rti_addrs & (1 << i)) == 0) 400 395 continue; … … 403 398 * It won't fit. 404 399 */ 405 if ( (cp + sa->sa_len) > cplim ) {400 if (cp + sa->sa_len > cplim) 406 401 return (EINVAL); 407 }408 409 402 /* 410 403 * there are no more.. quit now … … 418 411 return (0); /* should be EINVAL but for compat */ 419 412 } 420 421 413 /* accept it */ 422 414 rtinfo->rti_info[i] = sa; … … 427 419 428 420 static struct mbuf * 429 rt_msg1(type, rtinfo) 430 int type; 431 register struct rt_addrinfo *rtinfo; 432 { 433 register struct rt_msghdr *rtm; 434 register struct mbuf *m; 435 register int i; 436 register struct sockaddr *sa; 421 rt_msg1(int type, struct rt_addrinfo *rtinfo) 422 { 423 struct rt_msghdr *rtm; 424 struct mbuf *m; 425 int i; 426 struct sockaddr *sa; 437 427 int len, dlen; 438 428 … … 457 447 panic("rt_msg1"); 458 448 m->m_pkthdr.len = m->m_len = len; 459 m->m_pkthdr.rcvif = 0;449 m->m_pkthdr.rcvif = NULL; 460 450 rtm = mtod(m, struct rt_msghdr *); 461 451 bzero((caddr_t)rtm, len); … … 479 469 480 470 static int 481 rt_msg2(type, rtinfo, cp, w) 482 int type; 483 register struct rt_addrinfo *rtinfo; 484 caddr_t cp; 485 struct walkarg *w; 486 { 487 register int i; 471 rt_msg2(int type, struct rt_addrinfo *rtinfo, caddr_t cp, struct walkarg *w) 472 { 473 int i; 488 474 int len, dlen, second_time = 0; 489 475 caddr_t cp0; … … 509 495 cp += len; 510 496 for (i = 0; i < RTAX_MAX; i++) { 511 registerstruct sockaddr *sa;512 513 if ((sa = rtinfo->rti_info[i]) == 0)497 struct sockaddr *sa; 498 499 if ((sa = rtinfo->rti_info[i]) == NULL) 514 500 continue; 515 501 rtinfo->rti_addrs |= (1 << i); … … 521 507 len += dlen; 522 508 } 523 if (cp == 0&& w != NULL && !second_time) {524 registerstruct walkarg *rw = w;509 if (cp == NULL && w != NULL && !second_time) { 510 struct walkarg *rw = w; 525 511 526 512 if (rw->w_req) { … … 541 527 } 542 528 if (cp) { 543 registerstruct rt_msghdr *rtm = (struct rt_msghdr *)cp0;529 struct rt_msghdr *rtm = (struct rt_msghdr *)cp0; 544 530 545 531 rtm->rtm_version = RTM_VERSION; … … 557 543 */ 558 544 void 559 rt_missmsg(type, rtinfo, flags, error) 560 int type, flags, error; 561 register struct rt_addrinfo *rtinfo; 562 { 563 register struct rt_msghdr *rtm; 564 register struct mbuf *m; 545 rt_missmsg(int type, struct rt_addrinfo *rtinfo, int flags, int error) 546 { 547 struct rt_msghdr *rtm; 548 struct mbuf *m; 565 549 struct sockaddr *sa = rtinfo->rti_info[RTAX_DST]; 566 550 … … 568 552 return; 569 553 m = rt_msg1(type, rtinfo); 570 if (m == 0)554 if (m == NULL) 571 555 return; 572 556 rtm = mtod(m, struct rt_msghdr *); … … 583 567 */ 584 568 void 585 rt_ifmsg(ifp) 586 register struct ifnet *ifp; 587 { 588 register struct if_msghdr *ifm; 569 rt_ifmsg(struct ifnet *ifp) 570 { 571 struct if_msghdr *ifm; 589 572 struct mbuf *m; 590 573 struct rt_addrinfo info; … … 594 577 bzero((caddr_t)&info, sizeof(info)); 595 578 m = rt_msg1(RTM_IFINFO, &info); 596 if (m == 0)579 if (m == NULL) 597 580 return; 598 581 ifm = mtod(m, struct if_msghdr *); 599 582 ifm->ifm_index = ifp->if_index; 600 ifm->ifm_flags = (u_short)ifp->if_flags;583 ifm->ifm_flags = ifp->if_flags; 601 584 ifm->ifm_data = ifp->if_data; 602 585 ifm->ifm_addrs = 0; … … 614 597 */ 615 598 void 616 rt_newaddrmsg(cmd, ifa, error, rt) 617 int cmd, error; 618 register struct ifaddr *ifa; 619 register struct rtentry *rt; 599 rt_newaddrmsg(int cmd, struct ifaddr *ifa, int error, struct rtentry *rt) 620 600 { 621 601 struct rt_addrinfo info; 622 struct sockaddr *sa = 0;602 struct sockaddr *sa = NULL; 623 603 int pass; 624 struct mbuf *m = 0;604 struct mbuf *m = NULL; 625 605 struct ifnet *ifp = ifa->ifa_ifp; 626 606 … … 631 611 if ((cmd == RTM_ADD && pass == 1) || 632 612 (cmd == RTM_DELETE && pass == 2)) { 633 registerstruct ifa_msghdr *ifam;613 struct ifa_msghdr *ifam; 634 614 int ncmd = cmd == RTM_ADD ? RTM_NEWADDR : RTM_DELADDR; 635 615 636 i faaddr= sa = ifa->ifa_addr;637 i fpaddr= ifp->if_addrlist->ifa_addr;638 netmask= ifa->ifa_netmask;639 brdaddr= ifa->ifa_dstaddr;616 info.rti_info[RTAX_IFA] = sa = ifa->ifa_addr; 617 info.rti_info[RTAX_IFP] = ifp->if_addrlist->ifa_addr; 618 info.rti_info[RTAX_NETMASK] = ifa->ifa_netmask; 619 info.rti_info[RTAX_BRD] = ifa->ifa_dstaddr; 640 620 if ((m = rt_msg1(ncmd, &info)) == NULL) 641 621 continue; … … 648 628 if ((cmd == RTM_ADD && pass == 2) || 649 629 (cmd == RTM_DELETE && pass == 1)) { 650 registerstruct rt_msghdr *rtm;651 652 if (rt == 0)630 struct rt_msghdr *rtm; 631 632 if (rt == NULL) 653 633 continue; 654 netmask= rt_mask(rt);655 dst= sa = rt_key(rt);656 gate= rt->rt_gateway;634 info.rti_info[RTAX_NETMASK] = rt_mask(rt); 635 info.rti_info[RTAX_DST] = sa = rt_key(rt); 636 info.rti_info[RTAX_GATEWAY] = rt->rt_gateway; 657 637 if ((m = rt_msg1(cmd, &info)) == NULL) 658 638 continue; … … 673 653 */ 674 654 int 675 sysctl_dumpentry(rn, vw) 676 struct radix_node *rn; 677 void *vw; 678 { 679 register struct walkarg *w = vw; 680 register struct rtentry *rt = (struct rtentry *)rn; 655 sysctl_dumpentry(struct radix_node *rn, void *vw) 656 { 657 struct walkarg *w = vw; 658 struct rtentry *rt = (struct rtentry *)rn; 681 659 int error = 0, size; 682 660 struct rt_addrinfo info; … … 685 663 return 0; 686 664 bzero((caddr_t)&info, sizeof(info)); 687 dst= rt_key(rt);688 gate= rt->rt_gateway;689 netmask= rt_mask(rt);690 genmask= rt->rt_genmask;691 size = rt_msg2(RTM_GET, &info, 0, w);665 info.rti_info[RTAX_DST] = rt_key(rt); 666 info.rti_info[RTAX_GATEWAY] = rt->rt_gateway; 667 info.rti_info[RTAX_NETMASK] = rt_mask(rt); 668 info.rti_info[RTAX_GENMASK] = rt->rt_genmask; 669 size = rt_msg2(RTM_GET, &info, NULL, w); 692 670 if (w->w_req && w->w_tmem) { 693 registerstruct rt_msghdr *rtm = (struct rt_msghdr *)w->w_tmem;671 struct rt_msghdr *rtm = (struct rt_msghdr *)w->w_tmem; 694 672 695 673 rtm->rtm_flags = rt->rt_flags; … … 706 684 707 685 int 708 sysctl_iflist(af, w) 709 int af; 710 register struct walkarg *w; 711 { 712 register struct ifnet *ifp; 713 register struct ifaddr *ifa; 686 sysctl_iflist(int af, struct walkarg *w) 687 { 688 struct ifnet *ifp; 689 struct ifaddr *ifa; 714 690 struct rt_addrinfo info; 715 691 int len, error = 0; … … 720 696 continue; 721 697 ifa = ifp->if_addrlist; 722 i fpaddr= ifa->ifa_addr;698 info.rti_info[RTAX_IFP] = ifa->ifa_addr; 723 699 len = rt_msg2(RTM_IFINFO, &info, (caddr_t)0, w); 724 i fpaddr= 0;700 info.rti_info[RTAX_IFP] = 0; 725 701 if (w->w_req && w->w_tmem) { 726 registerstruct if_msghdr *ifm;702 struct if_msghdr *ifm; 727 703 728 704 ifm = (struct if_msghdr *)w->w_tmem; 729 705 ifm->ifm_index = ifp->if_index; 730 ifm->ifm_flags = (u_short)ifp->if_flags;706 ifm->ifm_flags = ifp->if_flags; 731 707 ifm->ifm_data = ifp->if_data; 732 708 ifm->ifm_addrs = info.rti_addrs; … … 738 714 if (af && af != ifa->ifa_addr->sa_family) 739 715 continue; 740 i faaddr= ifa->ifa_addr;741 netmask= ifa->ifa_netmask;742 brdaddr= ifa->ifa_dstaddr;743 len = rt_msg2(RTM_NEWADDR, &info, 0, w);716 info.rti_info[RTAX_IFA] = ifa->ifa_addr; 717 info.rti_info[RTAX_NETMASK] = ifa->ifa_netmask; 718 info.rti_info[RTAX_BRD] = ifa->ifa_dstaddr; 719 len = rt_msg2(RTM_NEWADDR, &info, NULL, w); 744 720 if (w->w_req && w->w_tmem) { 745 registerstruct ifa_msghdr *ifam;721 struct ifa_msghdr *ifam; 746 722 747 723 ifam = (struct ifa_msghdr *)w->w_tmem; … … 755 731 } 756 732 } 757 i faaddr = netmask = brdaddr= 0;733 info.rti_info[RTAX_IFA] = info.rti_info[RTAX_NETMASK] = info.rti_info[RTAX_BRD] = 0; 758 734 } 759 735 return (0); … … 765 741 int *name = (int *)arg1; 766 742 u_int namelen = arg2; 767 registerstruct radix_node_head *rnh;743 struct radix_node_head *rnh; 768 744 int i, s, error = EINVAL; 769 745 u_char af;
Note: See TracChangeset
for help on using the changeset viewer.