Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/netinet6 Style, localify, constify, and reorder a bit. N...



details:   https://anonhg.NetBSD.org/src/rev/7915439799a7
branches:  trunk
changeset: 829431:7915439799a7
user:      maxv <maxv%NetBSD.org@localhost>
date:      Wed Jan 31 13:57:08 2018 +0000

description:
Style, localify, constify, and reorder a bit. No real functional change.

diffstat:

 sys/netinet6/ip6_output.c |  179 ++++++++++++++++++++++-----------------------
 1 files changed, 89 insertions(+), 90 deletions(-)

diffs (truncated from 470 to 300 lines):

diff -r 09232d7c842a -r 7915439799a7 sys/netinet6/ip6_output.c
--- a/sys/netinet6/ip6_output.c Wed Jan 31 07:33:18 2018 +0000
+++ b/sys/netinet6/ip6_output.c Wed Jan 31 13:57:08 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ip6_output.c,v 1.196 2017/12/15 04:03:46 ozaki-r Exp $ */
+/*     $NetBSD: ip6_output.c,v 1.197 2018/01/31 13:57:08 maxv Exp $    */
 /*     $KAME: ip6_output.c,v 1.172 2001/03/25 09:55:56 itojun Exp $    */
 
 /*
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip6_output.c,v 1.196 2017/12/15 04:03:46 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip6_output.c,v 1.197 2018/01/31 13:57:08 maxv Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -151,29 +151,29 @@
 
        switch (rh->ip6r_type) {
        case IPV6_RTHDR_TYPE_0:
-                rh0 = (struct ip6_rthdr0 *)rh;
-                addr = (struct in6_addr *)(rh0 + 1);
-
-                /*
-                 * construct a sockaddr_in6 form of the first hop.
-                 *
-                 * XXX we may not have enough information about its scope zone;
-                 * there is no standard API to pass the information from the
-                 * application.
-                 */
-                sockaddr_in6_init(&sa, addr, 0, 0, 0);
-                error = sa6_embedscope(&sa, ip6_use_defzone);
-                if (error != 0)
-                        break;
-                (void)memmove(&addr[0], &addr[1],
-                    sizeof(struct in6_addr) * (rh0->ip6r0_segleft - 1));
-                addr[rh0->ip6r0_segleft - 1] = ip6->ip6_dst;
-                ip6->ip6_dst = sa.sin6_addr;
-                /* XXX */
-                in6_clearscope(addr + rh0->ip6r0_segleft - 1);
-                break;
+               rh0 = (struct ip6_rthdr0 *)rh;
+               addr = (struct in6_addr *)(rh0 + 1);
+
+               /*
+                * construct a sockaddr_in6 form of the first hop.
+                *
+                * XXX we may not have enough information about its scope zone;
+                * there is no standard API to pass the information from the
+                * application.
+                */
+               sockaddr_in6_init(&sa, addr, 0, 0, 0);
+               error = sa6_embedscope(&sa, ip6_use_defzone);
+               if (error != 0)
+                       break;
+               memmove(&addr[0], &addr[1],
+                   sizeof(struct in6_addr) * (rh0->ip6r0_segleft - 1));
+               addr[rh0->ip6r0_segleft - 1] = ip6->ip6_dst;
+               ip6->ip6_dst = sa.sin6_addr;
+               /* XXX */
+               in6_clearscope(addr + rh0->ip6r0_segleft - 1);
+               break;
        default:        /* is it possible? */
-                error = EINVAL;
+               error = EINVAL;
        }
 
        return error;
@@ -184,8 +184,8 @@
  */
 int
 ip6_if_output(struct ifnet * const ifp, struct ifnet * const origifp,
-    struct mbuf * const m,
-    const struct sockaddr_in6 * const dst, const struct rtentry *rt)
+    struct mbuf * const m, const struct sockaddr_in6 * const dst,
+    const struct rtentry *rt)
 {
        int error = 0;
 
@@ -207,12 +207,12 @@
 /*
  * IP6 output. The packet in mbuf chain m contains a skeletal IP6
  * header (with pri, len, nxt, hlim, src, dst).
- * This function may modify ver and hlim only.
- * The mbuf chain containing the packet will be freed.
- * The mbuf opt, if present, will not be freed.
  *
- * type of "mtu": rt_rmx.rmx_mtu is u_long, ifnet.ifr_mtu is int, and
- * nd_ifinfo.linkmtu is u_int32_t.  so we use u_long to hold largest one,
+ * This function may modify ver and hlim only. The mbuf chain containing the
+ * packet will be freed. The mbuf opt, if present, will not be freed.
+ *
+ * Type of "mtu": rt_rmx.rmx_mtu is u_long, ifnet.ifr_mtu is int, and
+ * nd_ifinfo.linkmtu is u_int32_t. So we use u_long to hold largest one,
  * which is rt_rmx.rmx_mtu.
  */
 int
@@ -229,7 +229,7 @@
        struct ip6_hdr *ip6, *mhip6;
        struct ifnet *ifp = NULL, *origifp = NULL;
        struct mbuf *m = m0;
-       int hlen, tlen, len, off;
+       int tlen, len, off;
        bool tso;
        struct route ip6route;
        struct rtentry *rt = NULL, *rt_pmtu;
@@ -253,16 +253,14 @@
        int bound = curlwp_bind();
        bool release_psref_ia = false;
 
-#ifdef  DIAGNOSTIC
+#ifdef DIAGNOSTIC
        if ((m->m_flags & M_PKTHDR) == 0)
                panic("ip6_output: no HDR");
-
        if ((m->m_pkthdr.csum_flags &
            (M_CSUM_TCPv4|M_CSUM_UDPv4|M_CSUM_TSOv4)) != 0) {
                panic("ip6_output: IPv4 checksum offload flags: %d",
                    m->m_pkthdr.csum_flags);
        }
-
        if ((m->m_pkthdr.csum_flags & (M_CSUM_TCPv6|M_CSUM_UDPv6)) ==
            (M_CSUM_TCPv6|M_CSUM_UDPv6)) {
                panic("ip6_output: conflicting checksum offload flags: %d",
@@ -287,11 +285,11 @@
        if (opt) {
                /* Hop-by-Hop options header */
                MAKE_EXTHDR(opt->ip6po_hbh, &exthdrs.ip6e_hbh);
-               /* Destination options header(1st part) */
+               /* Destination options header (1st part) */
                MAKE_EXTHDR(opt->ip6po_dest1, &exthdrs.ip6e_dest1);
                /* Routing header */
                MAKE_EXTHDR(opt->ip6po_rthdr, &exthdrs.ip6e_rthdr);
-               /* Destination options header(2nd part) */
+               /* Destination options header (2nd part) */
                MAKE_EXTHDR(opt->ip6po_dest2, &exthdrs.ip6e_dest2);
        }
 
@@ -300,17 +298,20 @@
         * Keep the length of the unfragmentable part for fragmentation.
         */
        optlen = 0;
-       if (exthdrs.ip6e_hbh) optlen += exthdrs.ip6e_hbh->m_len;
-       if (exthdrs.ip6e_dest1) optlen += exthdrs.ip6e_dest1->m_len;
-       if (exthdrs.ip6e_rthdr) optlen += exthdrs.ip6e_rthdr->m_len;
+       if (exthdrs.ip6e_hbh)
+               optlen += exthdrs.ip6e_hbh->m_len;
+       if (exthdrs.ip6e_dest1)
+               optlen += exthdrs.ip6e_dest1->m_len;
+       if (exthdrs.ip6e_rthdr)
+               optlen += exthdrs.ip6e_rthdr->m_len;
        unfragpartlen = optlen + sizeof(struct ip6_hdr);
        /* NOTE: we don't add AH/ESP length here. do that later. */
-       if (exthdrs.ip6e_dest2) optlen += exthdrs.ip6e_dest2->m_len;
+       if (exthdrs.ip6e_dest2)
+               optlen += exthdrs.ip6e_dest2->m_len;
 
 #ifdef IPSEC
        if (ipsec_used) {
                /* Check the security policy (SP) for the packet */
-           
                sp = ipsec6_check_policy(m, in6p, flags, &needipsec, &error);
                if (error != 0) {
                        /*
@@ -319,13 +320,12 @@
                         * because we asked key management for an SA and
                         * it was delayed (e.g. kicked up to IKE).
                         */
-                       if (error == -EINVAL) 
+                       if (error == -EINVAL)
                                error = 0;
                        goto freehdrs;
                }
        }
-#endif /* IPSEC */
-
+#endif
 
        if (needipsec &&
            (m->m_pkthdr.csum_flags & (M_CSUM_UDPv6|M_CSUM_TCPv6)) != 0) {
@@ -333,7 +333,6 @@
                m->m_pkthdr.csum_flags &= ~(M_CSUM_UDPv6|M_CSUM_TCPv6);
        }
 
-
        /*
         * If we need IPsec, or there is at least one extension header,
         * separate IP6 header from the payload.
@@ -442,8 +441,7 @@
        if (exthdrs.ip6e_rthdr) {
                struct ip6_rthdr *rh;
 
-               rh = (struct ip6_rthdr *)(mtod(exthdrs.ip6e_rthdr,
-                   struct ip6_rthdr *));
+               rh = mtod(exthdrs.ip6e_rthdr, struct ip6_rthdr *);
 
                error = ip6_handle_rthdr(rh, ip6);
                if (error != 0)
@@ -477,7 +475,7 @@
        if (opt && opt->ip6po_rthdr)
                ro = &opt->ip6po_route;
 
-       /*
+       /*
         * if specified, try to fill in the traffic class field.
         * do not override if a non-zero value is already set.
         * we check the diffserv field and the ecn field separately.
@@ -507,6 +505,7 @@
        if (needipsec) {
                int s = splsoftnet();
                error = ipsec6_process_packet(m, sp->req);
+               splx(s);
 
                /*
                 * Preserve KAME behaviour: ENOENT can be returned
@@ -516,10 +515,10 @@
                 */
                if (error == ENOENT)
                        error = 0;
-               splx(s);
+
                goto done;
        }
-#endif /* IPSEC */    
+#endif
 
        /* adjust pointer */
        ip6 = mtod(m, struct ip6_hdr *);
@@ -771,7 +770,7 @@
 
                if (ip6_hopopts_input(&dummy1, &dummy2, &m, &hoff)) {
                        /* m was already freed at this point */
-                       error = EINVAL;/* better error? */
+                       error = EINVAL;
                        goto done;
                }
 
@@ -896,21 +895,16 @@
                in6_ifstat_inc(ifp, ifs6_out_fragfail);
                goto bad;
        } else {
+               const u_int32_t id = htonl(ip6_randomid());
                struct mbuf **mnext, *m_frgpart;
+               const int hlen = unfragpartlen;
                struct ip6_frag *ip6f;
-               u_int32_t id = htonl(ip6_randomid());
                u_char nextproto;
-#if 0                          /* see below */
+#if 0          /* see below */
                struct ip6ctlparam ip6cp;
                u_int32_t mtu32;
 #endif
 
-               /*
-                * Too large for the destination or interface;
-                * fragment if possible.
-                * Must be able to put at least 8 bytes per fragment.
-                */
-               hlen = unfragpartlen;
                if (mtu > IPV6_MAXPACKET)
                        mtu = IPV6_MAXPACKET;
 
@@ -933,6 +927,9 @@
                    rtcache_getdst(ro_pmtu), &ip6cp);
 #endif
 
+               /*
+                * Must be able to put at least 8 bytes per fragment.
+                */
                len = (mtu - hlen - sizeof(struct ip6_frag)) & ~7;
                if (len < 8) {
                        error = EMSGSIZE;
@@ -993,24 +990,27 @@
                        mhip6 = mtod(m, struct ip6_hdr *);
                        *mhip6 = *ip6;
                        m->m_len = sizeof(*mhip6);
-                       /*
-                        * ip6f must be valid if error is 0.  But how
-                        * can a compiler be expected to infer this?
-                        */
+
                        ip6f = NULL;
                        error = ip6_insertfraghdr(m0, m, hlen, &ip6f);
                        if (error) {
                                IP6_STATINC(IP6_STAT_ODROPPED);
                                goto sendorfree;
                        }
+
+                       /* Fill in the Frag6 Header */
                        ip6f->ip6f_offlg = htons((u_int16_t)((off - hlen) & ~7));
                        if (off + len >= tlen)
                                len = tlen - off;
                        else
                                ip6f->ip6f_offlg |= IP6F_MORE_FRAG;
+                       ip6f->ip6f_reserved = 0;
+                       ip6f->ip6f_ident = id;
+                       ip6f->ip6f_nxt = nextproto;
+



Home | Main Index | Thread Index | Old Index