Remove extra nesting from X_ip6_mforward() function.
Also remove disabled definitions from ip6_mroute.h. PR: 185148 Sponsored by: Yandex LLC
This commit is contained in:
parent
ffc5432ffc
commit
78415d1082
@ -1044,11 +1044,19 @@ socket_send(struct socket *s, struct mbuf *mm, struct sockaddr_in6 *src)
|
|||||||
int
|
int
|
||||||
X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m)
|
X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m)
|
||||||
{
|
{
|
||||||
|
struct rtdetq *rte;
|
||||||
|
struct mbuf *mb0;
|
||||||
struct mf6c *rt;
|
struct mf6c *rt;
|
||||||
struct mif6 *mifp;
|
struct mif6 *mifp;
|
||||||
struct mbuf *mm;
|
struct mbuf *mm;
|
||||||
|
u_long hash;
|
||||||
mifi_t mifi;
|
mifi_t mifi;
|
||||||
char ip6bufs[INET6_ADDRSTRLEN], ip6bufd[INET6_ADDRSTRLEN];
|
char ip6bufs[INET6_ADDRSTRLEN], ip6bufd[INET6_ADDRSTRLEN];
|
||||||
|
#ifdef UPCALL_TIMING
|
||||||
|
struct timeval tp;
|
||||||
|
|
||||||
|
GET_TIME(tp);
|
||||||
|
#endif /* UPCALL_TIMING */
|
||||||
|
|
||||||
MRT6_DLOG(DEBUG_FORWARD, "src %s, dst %s, ifindex %d",
|
MRT6_DLOG(DEBUG_FORWARD, "src %s, dst %s, ifindex %d",
|
||||||
ip6_sprintf(ip6bufs, &ip6->ip6_src),
|
ip6_sprintf(ip6bufs, &ip6->ip6_src),
|
||||||
@ -1096,23 +1104,12 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m)
|
|||||||
if (rt) {
|
if (rt) {
|
||||||
MFC6_UNLOCK();
|
MFC6_UNLOCK();
|
||||||
return (ip6_mdq(m, ifp, rt));
|
return (ip6_mdq(m, ifp, rt));
|
||||||
} else {
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we don't have a route for packet's origin,
|
* If we don't have a route for packet's origin,
|
||||||
* Make a copy of the packet &
|
* Make a copy of the packet & send message to routing daemon.
|
||||||
* send message to routing daemon
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct mbuf *mb0;
|
|
||||||
struct rtdetq *rte;
|
|
||||||
u_long hash;
|
|
||||||
/* int i, npkts;*/
|
|
||||||
#ifdef UPCALL_TIMING
|
|
||||||
struct timeval tp;
|
|
||||||
|
|
||||||
GET_TIME(tp);
|
|
||||||
#endif /* UPCALL_TIMING */
|
|
||||||
|
|
||||||
MRT6STAT_INC(mrt6s_no_route);
|
MRT6STAT_INC(mrt6s_no_route);
|
||||||
MRT6_DLOG(DEBUG_FORWARD | DEBUG_MFC, "no rte s %s g %s",
|
MRT6_DLOG(DEBUG_FORWARD | DEBUG_MFC, "no rte s %s g %s",
|
||||||
ip6_sprintf(ip6bufs, &ip6->ip6_src),
|
ip6_sprintf(ip6bufs, &ip6->ip6_src),
|
||||||
@ -1122,8 +1119,7 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m)
|
|||||||
* Allocate mbufs early so that we don't do extra work if we
|
* Allocate mbufs early so that we don't do extra work if we
|
||||||
* are just going to fail anyway.
|
* are just going to fail anyway.
|
||||||
*/
|
*/
|
||||||
rte = (struct rtdetq *)malloc(sizeof(*rte), M_MRTABLE6,
|
rte = (struct rtdetq *)malloc(sizeof(*rte), M_MRTABLE6, M_NOWAIT);
|
||||||
M_NOWAIT);
|
|
||||||
if (rte == NULL) {
|
if (rte == NULL) {
|
||||||
MFC6_UNLOCK();
|
MFC6_UNLOCK();
|
||||||
return (ENOBUFS);
|
return (ENOBUFS);
|
||||||
@ -1133,8 +1129,7 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m)
|
|||||||
* Pullup packet header if needed before storing it,
|
* Pullup packet header if needed before storing it,
|
||||||
* as other references may modify it in the meantime.
|
* as other references may modify it in the meantime.
|
||||||
*/
|
*/
|
||||||
if (mb0 &&
|
if (mb0 && (M_HASCL(mb0) || mb0->m_len < sizeof(struct ip6_hdr)))
|
||||||
(M_HASCL(mb0) || mb0->m_len < sizeof(struct ip6_hdr)))
|
|
||||||
mb0 = m_pullup(mb0, sizeof(struct ip6_hdr));
|
mb0 = m_pullup(mb0, sizeof(struct ip6_hdr));
|
||||||
if (mb0 == NULL) {
|
if (mb0 == NULL) {
|
||||||
free(rte, M_MRTABLE6);
|
free(rte, M_MRTABLE6);
|
||||||
@ -1148,8 +1143,7 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m)
|
|||||||
if (IN6_ARE_ADDR_EQUAL(&ip6->ip6_src,
|
if (IN6_ARE_ADDR_EQUAL(&ip6->ip6_src,
|
||||||
&rt->mf6c_origin.sin6_addr) &&
|
&rt->mf6c_origin.sin6_addr) &&
|
||||||
IN6_ARE_ADDR_EQUAL(&ip6->ip6_dst,
|
IN6_ARE_ADDR_EQUAL(&ip6->ip6_dst,
|
||||||
&rt->mf6c_mcastgrp.sin6_addr) &&
|
&rt->mf6c_mcastgrp.sin6_addr) && (rt->mf6c_stall != NULL))
|
||||||
(rt->mf6c_stall != NULL))
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1158,10 +1152,8 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m)
|
|||||||
#ifdef MRT6_OINIT
|
#ifdef MRT6_OINIT
|
||||||
struct omrt6msg *oim;
|
struct omrt6msg *oim;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* no upcall, so make a new entry */
|
/* no upcall, so make a new entry */
|
||||||
rt = (struct mf6c *)malloc(sizeof(*rt), M_MRTABLE6,
|
rt = (struct mf6c *)malloc(sizeof(*rt), M_MRTABLE6, M_NOWAIT);
|
||||||
M_NOWAIT);
|
|
||||||
if (rt == NULL) {
|
if (rt == NULL) {
|
||||||
free(rte, M_MRTABLE6);
|
free(rte, M_MRTABLE6);
|
||||||
m_freem(mb0);
|
m_freem(mb0);
|
||||||
@ -1173,7 +1165,6 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m)
|
|||||||
* level process
|
* level process
|
||||||
*/
|
*/
|
||||||
mm = m_copy(mb0, 0, sizeof(struct ip6_hdr));
|
mm = m_copy(mb0, 0, sizeof(struct ip6_hdr));
|
||||||
|
|
||||||
if (mm == NULL) {
|
if (mm == NULL) {
|
||||||
free(rte, M_MRTABLE6);
|
free(rte, M_MRTABLE6);
|
||||||
m_freem(mb0);
|
m_freem(mb0);
|
||||||
@ -1186,7 +1177,6 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m)
|
|||||||
* Send message to routing daemon
|
* Send message to routing daemon
|
||||||
*/
|
*/
|
||||||
sin6.sin6_addr = ip6->ip6_src;
|
sin6.sin6_addr = ip6->ip6_src;
|
||||||
|
|
||||||
im = NULL;
|
im = NULL;
|
||||||
#ifdef MRT6_OINIT
|
#ifdef MRT6_OINIT
|
||||||
oim = NULL;
|
oim = NULL;
|
||||||
@ -1212,12 +1202,9 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m)
|
|||||||
return (EINVAL);
|
return (EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
MRT6_DLOG(DEBUG_FORWARD,
|
MRT6_DLOG(DEBUG_FORWARD, "getting the iif info in the kernel");
|
||||||
"getting the iif info in the kernel");
|
|
||||||
|
|
||||||
for (mifp = mif6table, mifi = 0;
|
for (mifp = mif6table, mifi = 0;
|
||||||
mifi < nummifs && mifp->m6_ifp != ifp;
|
mifi < nummifs && mifp->m6_ifp != ifp; mifp++, mifi++)
|
||||||
mifp++, mifi++)
|
|
||||||
;
|
;
|
||||||
|
|
||||||
switch (V_ip6_mrouter_ver) {
|
switch (V_ip6_mrouter_ver) {
|
||||||
@ -1290,7 +1277,6 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m)
|
|||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clean up cache entries if upcalls are not serviced
|
* Clean up cache entries if upcalls are not serviced
|
||||||
|
@ -145,11 +145,6 @@ struct mrt6stat {
|
|||||||
struct omrt6msg {
|
struct omrt6msg {
|
||||||
u_long unused1;
|
u_long unused1;
|
||||||
u_char im6_msgtype; /* what type of message */
|
u_char im6_msgtype; /* what type of message */
|
||||||
#if 0
|
|
||||||
#define MRT6MSG_NOCACHE 1
|
|
||||||
#define MRT6MSG_WRONGMIF 2
|
|
||||||
#define MRT6MSG_WHOLEPKT 3 /* used for user level encap*/
|
|
||||||
#endif
|
|
||||||
u_char im6_mbz; /* must be zero */
|
u_char im6_mbz; /* must be zero */
|
||||||
u_char im6_mif; /* mif rec'd on */
|
u_char im6_mif; /* mif rec'd on */
|
||||||
u_char unused2;
|
u_char unused2;
|
||||||
@ -199,7 +194,7 @@ struct sioc_mif_req6 {
|
|||||||
u_quad_t obytes; /* Output byte count on mif */
|
u_quad_t obytes; /* Output byte count on mif */
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(_KERNEL) || defined(KERNEL)
|
#ifdef _KERNEL
|
||||||
/*
|
/*
|
||||||
* The kernel's multicast-interface structure.
|
* The kernel's multicast-interface structure.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user