KNF a bit
This commit is contained in:
parent
14df31ceb3
commit
05f0c3e705
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: ip6_output.c,v 1.48 2002/06/07 04:18:12 itojun Exp $ */
|
||||
/* $NetBSD: ip6_output.c,v 1.49 2002/06/07 14:29:10 itojun Exp $ */
|
||||
/* $KAME: ip6_output.c,v 1.172 2001/03/25 09:55:56 itojun Exp $ */
|
||||
|
||||
/*
|
||||
@ -66,7 +66,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: ip6_output.c,v 1.48 2002/06/07 04:18:12 itojun Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: ip6_output.c,v 1.49 2002/06/07 14:29:10 itojun Exp $");
|
||||
|
||||
#include "opt_inet.h"
|
||||
#include "opt_ipsec.h"
|
||||
@ -118,12 +118,12 @@ struct ip6_exthdrs {
|
||||
};
|
||||
|
||||
static int ip6_pcbopts __P((struct ip6_pktopts **, struct mbuf *,
|
||||
struct socket *));
|
||||
struct socket *));
|
||||
static int ip6_setmoptions __P((int, struct ip6_moptions **, struct mbuf *));
|
||||
static int ip6_getmoptions __P((int, struct ip6_moptions *, struct mbuf **));
|
||||
static int ip6_copyexthdr __P((struct mbuf **, caddr_t, int));
|
||||
static int ip6_insertfraghdr __P((struct mbuf *, struct mbuf *, int,
|
||||
struct ip6_frag **));
|
||||
struct ip6_frag **));
|
||||
static int ip6_insert_jumboopt __P((struct ip6_exthdrs *, u_int32_t));
|
||||
static int ip6_splithdr __P((struct mbuf *, struct ip6_exthdrs *));
|
||||
static int ip6_getpmtu __P((struct route_in6 *, struct route_in6 *,
|
||||
@ -178,7 +178,7 @@ ip6_output(m0, opt, ro, flags, im6o, ifpp)
|
||||
if (hp) { \
|
||||
struct ip6_ext *eh = (struct ip6_ext *)(hp); \
|
||||
error = ip6_copyexthdr((mp), (caddr_t)(hp), \
|
||||
((eh)->ip6e_len + 1) << 3); \
|
||||
((eh)->ip6e_len + 1) << 3); \
|
||||
if (error) \
|
||||
goto freehdrs; \
|
||||
} \
|
||||
@ -339,12 +339,11 @@ ip6_output(m0, opt, ro, flags, im6o, ifpp)
|
||||
* m will point to IPv6 header. mprev will point to the
|
||||
* extension header prior to dest2 (rthdr in the above case).
|
||||
*/
|
||||
MAKE_CHAIN(exthdrs.ip6e_hbh, mprev,
|
||||
nexthdrp, IPPROTO_HOPOPTS);
|
||||
MAKE_CHAIN(exthdrs.ip6e_dest1, mprev,
|
||||
nexthdrp, IPPROTO_DSTOPTS);
|
||||
MAKE_CHAIN(exthdrs.ip6e_rthdr, mprev,
|
||||
nexthdrp, IPPROTO_ROUTING);
|
||||
MAKE_CHAIN(exthdrs.ip6e_hbh, mprev, nexthdrp, IPPROTO_HOPOPTS);
|
||||
MAKE_CHAIN(exthdrs.ip6e_dest1, mprev, nexthdrp,
|
||||
IPPROTO_DSTOPTS);
|
||||
MAKE_CHAIN(exthdrs.ip6e_rthdr, mprev, nexthdrp,
|
||||
IPPROTO_ROUTING);
|
||||
|
||||
#ifdef IPSEC
|
||||
if (!needipsec)
|
||||
@ -407,20 +406,19 @@ skip_ipsec2:;
|
||||
* with the first hop of the routing header.
|
||||
*/
|
||||
if (exthdrs.ip6e_rthdr) {
|
||||
struct ip6_rthdr *rh =
|
||||
(struct ip6_rthdr *)(mtod(exthdrs.ip6e_rthdr,
|
||||
struct ip6_rthdr *));
|
||||
struct ip6_rthdr *rh;
|
||||
struct ip6_rthdr0 *rh0;
|
||||
|
||||
rh = (struct ip6_rthdr *)(mtod(exthdrs.ip6e_rthdr,
|
||||
struct ip6_rthdr *));
|
||||
finaldst = ip6->ip6_dst;
|
||||
switch (rh->ip6r_type) {
|
||||
case IPV6_RTHDR_TYPE_0:
|
||||
rh0 = (struct ip6_rthdr0 *)rh;
|
||||
ip6->ip6_dst = rh0->ip6r0_addr[0];
|
||||
bcopy((caddr_t)&rh0->ip6r0_addr[1],
|
||||
(caddr_t)&rh0->ip6r0_addr[0],
|
||||
sizeof(struct in6_addr) * (rh0->ip6r0_segleft - 1)
|
||||
);
|
||||
(caddr_t)&rh0->ip6r0_addr[0],
|
||||
sizeof(struct in6_addr) * (rh0->ip6r0_segleft - 1));
|
||||
rh0->ip6r0_addr[rh0->ip6r0_segleft - 1] = finaldst;
|
||||
break;
|
||||
default: /* is it possible? */
|
||||
@ -461,8 +459,8 @@ skip_ipsec2:;
|
||||
* and is still up. If not, free it and try again.
|
||||
*/
|
||||
if (ro->ro_rt && ((ro->ro_rt->rt_flags & RTF_UP) == 0 ||
|
||||
dst->sin6_family != AF_INET6 ||
|
||||
!IN6_ARE_ADDR_EQUAL(&dst->sin6_addr, &ip6->ip6_dst))) {
|
||||
dst->sin6_family != AF_INET6 ||
|
||||
!IN6_ARE_ADDR_EQUAL(&dst->sin6_addr, &ip6->ip6_dst))) {
|
||||
RTFREE(ro->ro_rt);
|
||||
ro->ro_rt = (struct rtentry *)0;
|
||||
}
|
||||
@ -633,8 +631,7 @@ skip_ipsec2:;
|
||||
if (ifp == NULL) {
|
||||
if (ro->ro_rt == 0) {
|
||||
ro->ro_rt = rtalloc1((struct sockaddr *)
|
||||
&ro->ro_dst, 0
|
||||
);
|
||||
&ro->ro_dst, 0);
|
||||
}
|
||||
if (ro->ro_rt == 0) {
|
||||
ip6stat.ip6s_noroute++;
|
||||
@ -759,8 +756,7 @@ skip_ipsec2:;
|
||||
*/
|
||||
if (origifp == NULL)
|
||||
origifp = ifp;
|
||||
}
|
||||
else
|
||||
} else
|
||||
origifp = ifp;
|
||||
if (IN6_IS_SCOPE_LINKLOCAL(&ip6->ip6_src))
|
||||
ip6->ip6_src.s6_addr16[1] = 0;
|
||||
@ -785,11 +781,9 @@ skip_ipsec2:;
|
||||
*/
|
||||
m->m_flags |= M_LOOP;
|
||||
m->m_pkthdr.rcvif = ifp;
|
||||
if (ip6_process_hopopts(m,
|
||||
(u_int8_t *)(hbh + 1),
|
||||
((hbh->ip6h_len + 1) << 3) -
|
||||
sizeof(struct ip6_hbh),
|
||||
&dummy1, &dummy2) < 0) {
|
||||
if (ip6_process_hopopts(m, (u_int8_t *)(hbh + 1),
|
||||
((hbh->ip6h_len + 1) << 3) - sizeof(struct ip6_hbh),
|
||||
&dummy1, &dummy2) < 0) {
|
||||
/* m was already freed at this point */
|
||||
error = EINVAL;/* better error? */
|
||||
goto done;
|
||||
@ -802,8 +796,7 @@ skip_ipsec2:;
|
||||
/*
|
||||
* Run through list of hooks for output packets.
|
||||
*/
|
||||
if ((error = pfil_run_hooks(&inet6_pfil_hook, &m, ifp,
|
||||
PFIL_OUT)) != 0)
|
||||
if ((error = pfil_run_hooks(&inet6_pfil_hook, &m, ifp, PFIL_OUT)) != 0)
|
||||
goto done;
|
||||
if (m == NULL)
|
||||
goto done;
|
||||
@ -814,22 +807,7 @@ skip_ipsec2:;
|
||||
* If necessary, do IPv6 fragmentation before sending.
|
||||
*/
|
||||
tlen = m->m_pkthdr.len;
|
||||
if (tlen <= mtu
|
||||
#ifdef notyet
|
||||
/*
|
||||
* On any link that cannot convey a 1280-octet packet in one piece,
|
||||
* link-specific fragmentation and reassembly must be provided at
|
||||
* a layer below IPv6. [RFC 2460, sec.5]
|
||||
* Thus if the interface has ability of link-level fragmentation,
|
||||
* we can just send the packet even if the packet size is
|
||||
* larger than the link's MTU.
|
||||
* XXX: IFF_FRAGMENTABLE (or such) flag has not been defined yet...
|
||||
*/
|
||||
|
||||
|| ifp->if_flags & IFF_FRAGMENTABLE
|
||||
#endif
|
||||
)
|
||||
{
|
||||
if (tlen <= mtu) {
|
||||
#ifdef IFA_STATS
|
||||
struct in6_ifaddr *ia6;
|
||||
ip6 = mtod(m, struct ip6_hdr *);
|
||||
@ -930,8 +908,7 @@ skip_ipsec2:;
|
||||
else
|
||||
ip6f->ip6f_offlg |= IP6F_MORE_FRAG;
|
||||
mhip6->ip6_plen = htons((u_short)(len + hlen +
|
||||
sizeof(*ip6f) -
|
||||
sizeof(struct ip6_hdr)));
|
||||
sizeof(*ip6f) - sizeof(struct ip6_hdr)));
|
||||
if ((m_frgpart = m_copy(m0, off, len)) == 0) {
|
||||
error = ENOBUFS;
|
||||
ip6stat.ip6s_odropped++;
|
||||
@ -1151,7 +1128,7 @@ ip6_insertfraghdr(m0, m, hlen, frghdrp)
|
||||
|
||||
if (hlen > sizeof(struct ip6_hdr)) {
|
||||
n = m_copym(m0, sizeof(struct ip6_hdr),
|
||||
hlen - sizeof(struct ip6_hdr), M_DONTWAIT);
|
||||
hlen - sizeof(struct ip6_hdr), M_DONTWAIT);
|
||||
if (n == 0)
|
||||
return(ENOBUFS);
|
||||
m->m_next = n;
|
||||
@ -1165,8 +1142,8 @@ ip6_insertfraghdr(m0, m, hlen, frghdrp)
|
||||
if ((mlast->m_flags & M_EXT) == 0 &&
|
||||
M_TRAILINGSPACE(mlast) >= sizeof(struct ip6_frag)) {
|
||||
/* use the trailing space of the last mbuf for the fragment hdr */
|
||||
*frghdrp =
|
||||
(struct ip6_frag *)(mtod(mlast, caddr_t) + mlast->m_len);
|
||||
*frghdrp = (struct ip6_frag *)(mtod(mlast, caddr_t) +
|
||||
mlast->m_len);
|
||||
mlast->m_len += sizeof(struct ip6_frag);
|
||||
m->m_pkthdr.len += sizeof(struct ip6_frag);
|
||||
} else {
|
||||
@ -1271,7 +1248,7 @@ ip6_ctloutput(op, so, level, optname, mp)
|
||||
case IPV6_PKTOPTIONS:
|
||||
/* m is freed in ip6_pcbopts */
|
||||
return(ip6_pcbopts(&in6p->in6p_outputopts,
|
||||
m, so));
|
||||
m, so));
|
||||
case IPV6_HOPOPTS:
|
||||
case IPV6_DSTOPTS:
|
||||
if (p == 0 || suser(p->p_ucred, &p->p_acflag)) {
|
||||
@ -1304,10 +1281,12 @@ ip6_ctloutput(op, so, level, optname, mp)
|
||||
}
|
||||
break;
|
||||
#define OPTSET(bit) \
|
||||
if (optval) \
|
||||
in6p->in6p_flags |= bit; \
|
||||
else \
|
||||
in6p->in6p_flags &= ~bit;
|
||||
do { \
|
||||
if (optval) \
|
||||
in6p->in6p_flags |= (bit); \
|
||||
else \
|
||||
in6p->in6p_flags &= ~(bit); \
|
||||
} while (0)
|
||||
|
||||
case IPV6_RECVOPTS:
|
||||
OPTSET(IN6P_RECVOPTS);
|
||||
@ -1352,8 +1331,7 @@ else \
|
||||
* see ipng mailing list, Jun 22 2001.
|
||||
*/
|
||||
if (in6p->in6p_lport ||
|
||||
!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_laddr))
|
||||
{
|
||||
!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_laddr)) {
|
||||
error = EINVAL;
|
||||
break;
|
||||
}
|
||||
@ -1373,7 +1351,8 @@ else \
|
||||
case IPV6_MULTICAST_LOOP:
|
||||
case IPV6_JOIN_GROUP:
|
||||
case IPV6_LEAVE_GROUP:
|
||||
error = ip6_setmoptions(optname, &in6p->in6p_moptions, m);
|
||||
error = ip6_setmoptions(optname,
|
||||
&in6p->in6p_moptions, m);
|
||||
break;
|
||||
|
||||
case IPV6_PORTRANGE:
|
||||
@ -1440,8 +1419,8 @@ else \
|
||||
if (in6p->in6p_options) {
|
||||
m->m_len = in6p->in6p_options->m_len;
|
||||
bcopy(mtod(in6p->in6p_options, caddr_t),
|
||||
mtod(m, caddr_t),
|
||||
(unsigned)m->m_len);
|
||||
mtod(m, caddr_t),
|
||||
(unsigned)m->m_len);
|
||||
} else
|
||||
m->m_len = 0;
|
||||
break;
|
||||
@ -1453,7 +1432,7 @@ else \
|
||||
case IPV6_PKTOPTIONS:
|
||||
if (in6p->in6p_options) {
|
||||
*mp = m_copym(in6p->in6p_options, 0,
|
||||
M_COPYALL, M_WAIT);
|
||||
M_COPYALL, M_WAIT);
|
||||
} else {
|
||||
*mp = m_get(M_WAIT, MT_SOOPTS);
|
||||
(*mp)->m_len = 0;
|
||||
@ -1801,8 +1780,8 @@ ip6_setmoptions(optname, im6op, m)
|
||||
* if the address has link-local scope.
|
||||
*/
|
||||
if (IN6_IS_ADDR_MC_LINKLOCAL(&mreq->ipv6mr_multiaddr)) {
|
||||
mreq->ipv6mr_multiaddr.s6_addr16[1]
|
||||
= htons(mreq->ipv6mr_interface);
|
||||
mreq->ipv6mr_multiaddr.s6_addr16[1] =
|
||||
htons(mreq->ipv6mr_interface);
|
||||
}
|
||||
/*
|
||||
* See if the membership already exists.
|
||||
@ -1811,7 +1790,7 @@ ip6_setmoptions(optname, im6op, m)
|
||||
imm != NULL; imm = imm->i6mm_chain.le_next)
|
||||
if (imm->i6mm_maddr->in6m_ifp == ifp &&
|
||||
IN6_ARE_ADDR_EQUAL(&imm->i6mm_maddr->in6m_addr,
|
||||
&mreq->ipv6mr_multiaddr))
|
||||
&mreq->ipv6mr_multiaddr))
|
||||
break;
|
||||
if (imm != NULL) {
|
||||
error = EADDRINUSE;
|
||||
@ -1862,18 +1841,17 @@ ip6_setmoptions(optname, im6op, m)
|
||||
* if the address has link-local scope.
|
||||
*/
|
||||
if (IN6_IS_ADDR_MC_LINKLOCAL(&mreq->ipv6mr_multiaddr)) {
|
||||
mreq->ipv6mr_multiaddr.s6_addr16[1]
|
||||
= htons(mreq->ipv6mr_interface);
|
||||
mreq->ipv6mr_multiaddr.s6_addr16[1] =
|
||||
htons(mreq->ipv6mr_interface);
|
||||
}
|
||||
/*
|
||||
* Find the membership in the membership list.
|
||||
*/
|
||||
for (imm = im6o->im6o_memberships.lh_first;
|
||||
imm != NULL; imm = imm->i6mm_chain.le_next) {
|
||||
if ((ifp == NULL ||
|
||||
imm->i6mm_maddr->in6m_ifp == ifp) &&
|
||||
if ((ifp == NULL || imm->i6mm_maddr->in6m_ifp == ifp) &&
|
||||
IN6_ARE_ADDR_EQUAL(&imm->i6mm_maddr->in6m_addr,
|
||||
&mreq->ipv6mr_multiaddr))
|
||||
&mreq->ipv6mr_multiaddr))
|
||||
break;
|
||||
}
|
||||
if (imm == NULL) {
|
||||
@ -2001,7 +1979,7 @@ ip6_setpktoptions(control, opt, priv)
|
||||
opt->ip6po_m = control;
|
||||
|
||||
for (; control->m_len; control->m_data += CMSG_ALIGN(cm->cmsg_len),
|
||||
control->m_len -= CMSG_ALIGN(cm->cmsg_len)) {
|
||||
control->m_len -= CMSG_ALIGN(cm->cmsg_len)) {
|
||||
cm = mtod(control, struct cmsghdr *);
|
||||
if (cm->cmsg_len == 0 || cm->cmsg_len > control->m_len)
|
||||
return(EINVAL);
|
||||
@ -2018,8 +1996,8 @@ ip6_setpktoptions(control, opt, priv)
|
||||
opt->ip6po_pktinfo->ipi6_addr.s6_addr16[1] =
|
||||
htons(opt->ip6po_pktinfo->ipi6_ifindex);
|
||||
|
||||
if (opt->ip6po_pktinfo->ipi6_ifindex > if_index
|
||||
|| opt->ip6po_pktinfo->ipi6_ifindex < 0) {
|
||||
if (opt->ip6po_pktinfo->ipi6_ifindex > if_index ||
|
||||
opt->ip6po_pktinfo->ipi6_ifindex < 0) {
|
||||
return(ENXIO);
|
||||
}
|
||||
|
||||
@ -2074,8 +2052,8 @@ ip6_setpktoptions(control, opt, priv)
|
||||
if (!priv)
|
||||
return(EPERM);
|
||||
|
||||
/* check if cmsg_len is large enough for sa_len */
|
||||
if (cm->cmsg_len < sizeof(u_char) ||
|
||||
/* check if cmsg_len is large enough for sa_len */
|
||||
cm->cmsg_len < CMSG_LEN(*CMSG_DATA(cm)))
|
||||
return(EINVAL);
|
||||
|
||||
@ -2104,18 +2082,16 @@ ip6_setpktoptions(control, opt, priv)
|
||||
*/
|
||||
if (opt->ip6po_rthdr == NULL) {
|
||||
opt->ip6po_dest1 =
|
||||
(struct ip6_dest *)CMSG_DATA(cm);
|
||||
(struct ip6_dest *)CMSG_DATA(cm);
|
||||
if (cm->cmsg_len !=
|
||||
CMSG_LEN((opt->ip6po_dest1->ip6d_len + 1)
|
||||
<< 3))
|
||||
CMSG_LEN((opt->ip6po_dest1->ip6d_len + 1) << 3));
|
||||
return(EINVAL);
|
||||
}
|
||||
else {
|
||||
opt->ip6po_dest2 =
|
||||
(struct ip6_dest *)CMSG_DATA(cm);
|
||||
(struct ip6_dest *)CMSG_DATA(cm);
|
||||
if (cm->cmsg_len !=
|
||||
CMSG_LEN((opt->ip6po_dest2->ip6d_len + 1)
|
||||
<< 3))
|
||||
CMSG_LEN((opt->ip6po_dest2->ip6d_len + 1) << 3))
|
||||
return(EINVAL);
|
||||
}
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user