Changeset View
Changeset View
Standalone View
Standalone View
sys/net/if_me.c
Show First 20 Lines • Show All 48 Lines • ▼ Show 20 Lines | |||||
#include <net/bpf.h> | #include <net/bpf.h> | ||||
#include <net/ethernet.h> | #include <net/ethernet.h> | ||||
#include <net/if.h> | #include <net/if.h> | ||||
#include <net/if_var.h> | #include <net/if_var.h> | ||||
#include <net/if_clone.h> | #include <net/if_clone.h> | ||||
#include <net/if_types.h> | #include <net/if_types.h> | ||||
#include <net/netisr.h> | #include <net/netisr.h> | ||||
#include <net/vnet.h> | #include <net/vnet.h> | ||||
#include <net/route.h> | |||||
#include <netinet/in.h> | #include <netinet/in.h> | ||||
#include <netinet/in_systm.h> | #include <netinet/in_systm.h> | ||||
#include <netinet/in_var.h> | #include <netinet/in_var.h> | ||||
#include <netinet/ip.h> | #include <netinet/ip.h> | ||||
#include <netinet/ip_var.h> | #include <netinet/ip_var.h> | ||||
#include <netinet/ip_encap.h> | #include <netinet/ip_encap.h> | ||||
▲ Show 20 Lines • Show All 227 Lines • ▼ Show 20 Lines | case SIOCGIFPDSTADDR: | ||||
src->sin_addr = sc->me_dst; | src->sin_addr = sc->me_dst; | ||||
break; | break; | ||||
} | } | ||||
ME_RUNLOCK(sc); | ME_RUNLOCK(sc); | ||||
error = prison_if(curthread->td_ucred, sintosa(src)); | error = prison_if(curthread->td_ucred, sintosa(src)); | ||||
if (error != 0) | if (error != 0) | ||||
memset(src, 0, sizeof(*src)); | memset(src, 0, sizeof(*src)); | ||||
break; | break; | ||||
case SIOCGTUNFIB: | |||||
ifr->ifr_fib = sc->me_fibnum; | |||||
break; | |||||
case SIOCSTUNFIB: | |||||
if ((error = priv_check(curthread, PRIV_NET_GRE)) != 0) | |||||
break; | |||||
if (ifr->ifr_fib >= rt_numfibs) | |||||
error = EINVAL; | |||||
else | |||||
sc->me_fibnum = ifr->ifr_fib; | |||||
break; | |||||
default: | default: | ||||
error = EINVAL; | error = EINVAL; | ||||
break; | break; | ||||
} | } | ||||
end: | end: | ||||
sx_xunlock(&me_ioctl_sx); | sx_xunlock(&me_ioctl_sx); | ||||
return (error); | return (error); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 140 Lines • ▼ Show 20 Lines | #endif | ||||
ip->ip_len = htons(m->m_pkthdr.len - hlen); | ip->ip_len = htons(m->m_pkthdr.len - hlen); | ||||
if (mh->mob_flags) | if (mh->mob_flags) | ||||
ip->ip_src = mh->mob_src; | ip->ip_src = mh->mob_src; | ||||
memmove(mtodo(m, hlen), ip, sizeof(struct ip)); | memmove(mtodo(m, hlen), ip, sizeof(struct ip)); | ||||
m_adj(m, hlen); | m_adj(m, hlen); | ||||
m_clrprotoflags(m); | m_clrprotoflags(m); | ||||
m->m_pkthdr.rcvif = ifp; | m->m_pkthdr.rcvif = ifp; | ||||
m->m_pkthdr.csum_flags |= (CSUM_IP_CHECKED | CSUM_IP_VALID); | m->m_pkthdr.csum_flags |= (CSUM_IP_CHECKED | CSUM_IP_VALID); | ||||
M_SETFIB(m, sc->me_fibnum); | M_SETFIB(m, ifp->if_fib); | ||||
hlen = AF_INET; | hlen = AF_INET; | ||||
BPF_MTAP2(ifp, &hlen, sizeof(hlen), m); | BPF_MTAP2(ifp, &hlen, sizeof(hlen), m); | ||||
if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1); | if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1); | ||||
if_inc_counter(ifp, IFCOUNTER_IBYTES, m->m_pkthdr.len); | if_inc_counter(ifp, IFCOUNTER_IBYTES, m->m_pkthdr.len); | ||||
if ((ifp->if_flags & IFF_MONITOR) != 0) | if ((ifp->if_flags & IFF_MONITOR) != 0) | ||||
m_freem(m); | m_freem(m); | ||||
else | else | ||||
netisr_dispatch(NETISR_IP, m); | netisr_dispatch(NETISR_IP, m); | ||||
▲ Show 20 Lines • Show All 183 Lines • Show Last 20 Lines |