rtsock.c (72786) | rtsock.c (78064) |
---|---|
1/* 2 * Copyright (c) 1988, 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 17 unchanged lines hidden (view full) --- 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * @(#)rtsock.c 8.5 (Berkeley) 11/2/94 | 1/* 2 * Copyright (c) 1988, 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 17 unchanged lines hidden (view full) --- 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * @(#)rtsock.c 8.5 (Berkeley) 11/2/94 |
34 * $FreeBSD: head/sys/net/rtsock.c 72786 2001-02-21 06:39:57Z rwatson $ | 34 * $FreeBSD: head/sys/net/rtsock.c 78064 2001-06-11 12:39:29Z ume $ |
35 */ 36 37 38#include <sys/param.h> 39#include <sys/systm.h> 40#include <sys/kernel.h> 41#include <sys/sysctl.h> 42#include <sys/proc.h> --- 525 unchanged lines hidden (view full) --- 568 register struct rt_addrinfo *rtinfo; 569{ 570 register struct rt_msghdr *rtm; 571 register struct mbuf *m; 572 register int i; 573 register struct sockaddr *sa; 574 int len, dlen; 575 | 35 */ 36 37 38#include <sys/param.h> 39#include <sys/systm.h> 40#include <sys/kernel.h> 41#include <sys/sysctl.h> 42#include <sys/proc.h> --- 525 unchanged lines hidden (view full) --- 568 register struct rt_addrinfo *rtinfo; 569{ 570 register struct rt_msghdr *rtm; 571 register struct mbuf *m; 572 register int i; 573 register struct sockaddr *sa; 574 int len, dlen; 575 |
576 m = m_gethdr(M_DONTWAIT, MT_DATA); 577 if (m == 0) 578 return (m); | |
579 switch (type) { 580 581 case RTM_DELADDR: 582 case RTM_NEWADDR: 583 len = sizeof(struct ifa_msghdr); 584 break; 585 586 case RTM_DELMADDR: 587 case RTM_NEWMADDR: 588 len = sizeof(struct ifma_msghdr); 589 break; 590 591 case RTM_IFINFO: 592 len = sizeof(struct if_msghdr); 593 break; 594 595 default: 596 len = sizeof(struct rt_msghdr); 597 } | 576 switch (type) { 577 578 case RTM_DELADDR: 579 case RTM_NEWADDR: 580 len = sizeof(struct ifa_msghdr); 581 break; 582 583 case RTM_DELMADDR: 584 case RTM_NEWMADDR: 585 len = sizeof(struct ifma_msghdr); 586 break; 587 588 case RTM_IFINFO: 589 len = sizeof(struct if_msghdr); 590 break; 591 592 default: 593 len = sizeof(struct rt_msghdr); 594 } |
598 if (len > MHLEN) | 595 if (len > MCLBYTES) |
599 panic("rt_msg1"); | 596 panic("rt_msg1"); |
597 m = m_gethdr(M_DONTWAIT, MT_DATA); 598 if (m && len > MHLEN) { 599 MCLGET(m, M_DONTWAIT); 600 if ((m->m_flags & M_EXT) == 0) { 601 m_free(m); 602 m = NULL; 603 } 604 } 605 if (m == 0) 606 return (m); |
|
600 m->m_pkthdr.len = m->m_len = len; 601 m->m_pkthdr.rcvif = 0; 602 rtm = mtod(m, struct rt_msghdr *); 603 bzero((caddr_t)rtm, len); 604 for (i = 0; i < RTAX_MAX; i++) { 605 if ((sa = rtinfo->rti_info[i]) == NULL) 606 continue; 607 rtinfo->rti_addrs |= (1 << i); --- 401 unchanged lines hidden --- | 607 m->m_pkthdr.len = m->m_len = len; 608 m->m_pkthdr.rcvif = 0; 609 rtm = mtod(m, struct rt_msghdr *); 610 bzero((caddr_t)rtm, len); 611 for (i = 0; i < RTAX_MAX; i++) { 612 if ((sa = rtinfo->rti_info[i]) == NULL) 613 continue; 614 rtinfo->rti_addrs |= (1 << i); --- 401 unchanged lines hidden --- |