Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet6/ip6_gre.c
Show First 20 Lines • Show All 206 Lines • ▼ Show 20 Lines | in6_gre_srcaddr(void *arg __unused, const struct sockaddr *sa, | ||||
CK_LIST_FOREACH(sc, &GRE_SRCHASH(&sin->sin6_addr), srchash) { | CK_LIST_FOREACH(sc, &GRE_SRCHASH(&sin->sin6_addr), srchash) { | ||||
if (IN6_ARE_ADDR_EQUAL(&sc->gre_oip6.ip6_src, | if (IN6_ARE_ADDR_EQUAL(&sc->gre_oip6.ip6_src, | ||||
&sin->sin6_addr) == 0) | &sin->sin6_addr) == 0) | ||||
continue; | continue; | ||||
in6_gre_set_running(sc); | in6_gre_set_running(sc); | ||||
} | } | ||||
} | } | ||||
static void | static bool | ||||
in6_gre_udp_input(struct mbuf *m, int off, struct inpcb *inp, | in6_gre_udp_input(struct mbuf *m, int off, struct inpcb *inp, | ||||
const struct sockaddr *sa, void *ctx) | const struct sockaddr *sa, void *ctx) | ||||
{ | { | ||||
struct gre_socket *gs; | struct gre_socket *gs; | ||||
struct gre_softc *sc; | struct gre_softc *sc; | ||||
struct sockaddr_in6 dst; | struct sockaddr_in6 dst; | ||||
NET_EPOCH_ASSERT(); | NET_EPOCH_ASSERT(); | ||||
gs = (struct gre_socket *)ctx; | gs = (struct gre_socket *)ctx; | ||||
dst = *(const struct sockaddr_in6 *)sa; | dst = *(const struct sockaddr_in6 *)sa; | ||||
if (sa6_embedscope(&dst, 0)) { | if (sa6_embedscope(&dst, 0)) { | ||||
m_freem(m); | m_freem(m); | ||||
return; | return (true); | ||||
} | } | ||||
CK_LIST_FOREACH(sc, &gs->list, chain) { | CK_LIST_FOREACH(sc, &gs->list, chain) { | ||||
if (IN6_ARE_ADDR_EQUAL(&sc->gre_oip6.ip6_dst, &dst.sin6_addr)) | if (IN6_ARE_ADDR_EQUAL(&sc->gre_oip6.ip6_dst, &dst.sin6_addr)) | ||||
break; | break; | ||||
} | } | ||||
if (sc != NULL && (GRE2IFP(sc)->if_flags & IFF_UP) != 0){ | if (sc != NULL && (GRE2IFP(sc)->if_flags & IFF_UP) != 0){ | ||||
gre_input(m, off + sizeof(struct udphdr), IPPROTO_UDP, sc); | gre_input(m, off + sizeof(struct udphdr), IPPROTO_UDP, sc); | ||||
return; | return (true); | ||||
} | } | ||||
m_freem(m); | m_freem(m); | ||||
return (true); | |||||
} | } | ||||
static int | static int | ||||
in6_gre_setup_socket(struct gre_softc *sc) | in6_gre_setup_socket(struct gre_softc *sc) | ||||
{ | { | ||||
struct sockopt sopt; | struct sockopt sopt; | ||||
struct sockaddr_in6 sin6; | struct sockaddr_in6 sin6; | ||||
struct in6_gre_socket *s; | struct in6_gre_socket *s; | ||||
▲ Show 20 Lines • Show All 330 Lines • Show Last 20 Lines |