if_me.c (284073) | if_me.c (284074) |
---|---|
1/*- 2 * Copyright (c) 2014 Andrey V. Elsukov <ae@FreeBSD.org> 3 * 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 * --- 11 unchanged lines hidden (view full) --- 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2014 Andrey V. Elsukov <ae@FreeBSD.org> 3 * 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 * --- 11 unchanged lines hidden (view full) --- 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: stable/10/sys/net/if_me.c 284073 2015-06-06 13:29:41Z ae $"); | 28__FBSDID("$FreeBSD: stable/10/sys/net/if_me.c 284074 2015-06-06 13:37:11Z ae $"); |
29 30#include <sys/param.h> 31#include <sys/jail.h> 32#include <sys/kernel.h> 33#include <sys/lock.h> 34#include <sys/libkern.h> 35#include <sys/malloc.h> 36#include <sys/module.h> --- 12 unchanged lines hidden (view full) --- 49#include <net/bpf.h> 50#include <net/ethernet.h> 51#include <net/if.h> 52#include <net/if_var.h> 53#include <net/if_clone.h> 54#include <net/if_types.h> 55#include <net/netisr.h> 56#include <net/vnet.h> | 29 30#include <sys/param.h> 31#include <sys/jail.h> 32#include <sys/kernel.h> 33#include <sys/lock.h> 34#include <sys/libkern.h> 35#include <sys/malloc.h> 36#include <sys/module.h> --- 12 unchanged lines hidden (view full) --- 49#include <net/bpf.h> 50#include <net/ethernet.h> 51#include <net/if.h> 52#include <net/if_var.h> 53#include <net/if_clone.h> 54#include <net/if_types.h> 55#include <net/netisr.h> 56#include <net/vnet.h> |
57#include <net/route.h> |
|
57 58#include <netinet/in.h> 59#include <netinet/in_systm.h> 60#include <netinet/in_var.h> 61#include <netinet/ip.h> 62#include <netinet/ip_var.h> 63#include <netinet/ip_encap.h> 64 --- 228 unchanged lines hidden (view full) --- 293 src->sin_addr = sc->me_dst; 294 break; 295 } 296 ME_RUNLOCK(sc); 297 error = prison_if(curthread->td_ucred, sintosa(src)); 298 if (error != 0) 299 memset(src, 0, sizeof(*src)); 300 break; | 58 59#include <netinet/in.h> 60#include <netinet/in_systm.h> 61#include <netinet/in_var.h> 62#include <netinet/ip.h> 63#include <netinet/ip_var.h> 64#include <netinet/ip_encap.h> 65 --- 228 unchanged lines hidden (view full) --- 294 src->sin_addr = sc->me_dst; 295 break; 296 } 297 ME_RUNLOCK(sc); 298 error = prison_if(curthread->td_ucred, sintosa(src)); 299 if (error != 0) 300 memset(src, 0, sizeof(*src)); 301 break; |
302 case SIOCGTUNFIB: 303 ifr->ifr_fib = sc->me_fibnum; 304 break; 305 case SIOCSTUNFIB: 306 if ((error = priv_check(curthread, PRIV_NET_GRE)) != 0) 307 break; 308 if (ifr->ifr_fib >= rt_numfibs) 309 error = EINVAL; 310 else 311 sc->me_fibnum = ifr->ifr_fib; 312 break; |
|
301 default: 302 error = EINVAL; 303 break; 304 } 305end: 306 sx_xunlock(&me_ioctl_sx); 307 return (error); 308} --- 149 unchanged lines hidden (view full) --- 458 ip->ip_len = htons(m->m_pkthdr.len - hlen); 459 if (mh->mob_flags) 460 ip->ip_src = mh->mob_src; 461 memmove(mtodo(m, hlen), ip, sizeof(struct ip)); 462 m_adj(m, hlen); 463 m_clrprotoflags(m); 464 m->m_pkthdr.rcvif = ifp; 465 m->m_pkthdr.csum_flags |= (CSUM_IP_CHECKED | CSUM_IP_VALID); | 313 default: 314 error = EINVAL; 315 break; 316 } 317end: 318 sx_xunlock(&me_ioctl_sx); 319 return (error); 320} --- 149 unchanged lines hidden (view full) --- 470 ip->ip_len = htons(m->m_pkthdr.len - hlen); 471 if (mh->mob_flags) 472 ip->ip_src = mh->mob_src; 473 memmove(mtodo(m, hlen), ip, sizeof(struct ip)); 474 m_adj(m, hlen); 475 m_clrprotoflags(m); 476 m->m_pkthdr.rcvif = ifp; 477 m->m_pkthdr.csum_flags |= (CSUM_IP_CHECKED | CSUM_IP_VALID); |
466 M_SETFIB(m, sc->me_fibnum); | 478 M_SETFIB(m, ifp->if_fib); |
467 hlen = AF_INET; 468 BPF_MTAP2(ifp, &hlen, sizeof(hlen), m); 469 if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1); 470 if_inc_counter(ifp, IFCOUNTER_IBYTES, m->m_pkthdr.len); 471 if ((ifp->if_flags & IFF_MONITOR) != 0) 472 m_freem(m); 473 else 474 netisr_dispatch(NETISR_IP, m); --- 183 unchanged lines hidden --- | 479 hlen = AF_INET; 480 BPF_MTAP2(ifp, &hlen, sizeof(hlen), m); 481 if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1); 482 if_inc_counter(ifp, IFCOUNTER_IBYTES, m->m_pkthdr.len); 483 if ((ifp->if_flags & IFF_MONITOR) != 0) 484 m_freem(m); 485 else 486 netisr_dispatch(NETISR_IP, m); --- 183 unchanged lines hidden --- |