Lines Matching +full:rcu +full:- +full:endian +full:- +full:offset
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
32 #define NEXTHDR_HOP 0 /* Hop-by-hop option header. */
52 /* Limits on Hop-by-Hop and Destination options.
55 * Hop-by-Hop or Destination options other then the packet must fit in an MTU.
60 * - Limit the number of options in a Hop-by-Hop or Destination options
62 * - Limit the byte length of a Hop-by-Hop or Destination options extension
64 * - Disallow unknown options
74 * options or Hop-by-Hop options. If the number is less than zero then unknown
79 * Hop-by-Hop options extension header. Setting the value to INT_MAX
86 /* Default limits for Hop-by-Hop and Destination options */
95 * type - unicast | multicast
96 * scope - local | site | global
97 * v4 - compat
122 ((a)->s6_addr[1] & 0x0f) /* nonstandard */
123 #define __IPV6_ADDR_SCOPE_INVALID -1
134 ((a)->s6_addr[1] & 0x10)
136 ((a)->s6_addr[1] & 0x20)
138 ((a)->s6_addr[1] & 0x40)
157 int offset; member
170 struct sk_buff *skb = iter->frag; in ip6_fraglist_next()
172 iter->frag = skb->next; in ip6_fraglist_next()
183 int offset; member
198 ((net)->ipv6.sysctl.fwmark_reflect ? (mark) : 0)
210 mod##SNMP_INC_STATS64((_idev)->stats.statname, (field));\
211 mod##SNMP_INC_STATS64((net)->mib.statname##_statistics, (field));\
219 SNMP_INC_STATS_ATOMIC_LONG((_idev)->stats.statname##dev, (field)); \
220 mod##SNMP_INC_STATS((net)->mib.statname##_statistics, (field));\
228 SNMP_INC_STATS_ATOMIC_LONG((_idev)->stats.statname##dev, (field)); \
229 SNMP_INC_STATS_ATOMIC_LONG((net)->mib.statname##_statistics, (field));\
236 mod##SNMP_ADD_STATS((_idev)->stats.statname, (field), (val)); \
237 mod##SNMP_ADD_STATS((net)->mib.statname##_statistics, (field), (val));\
244 mod##SNMP_UPD_PO_STATS((_idev)->stats.statname, field, (val)); \
245 mod##SNMP_UPD_PO_STATS((net)->mib.statname##_statistics, field, (val));\
301 struct rcu_head rcu; member
319 struct rcu_head rcu; member
340 struct rcu_head rcu; member
355 .hlimit = -1, in ipcm6_init()
356 .tclass = -1, in ipcm6_init()
357 .dontfrag = -1, in ipcm6_init()
365 .hlimit = -1, in ipcm6_init_sk()
366 .tclass = np->tclass, in ipcm6_init_sk()
367 .dontfrag = np->dontfrag, in ipcm6_init_sk()
376 opt = rcu_dereference(np->opt); in txopt_get()
378 if (!refcount_inc_not_zero(&opt->refcnt)) in txopt_get()
389 if (opt && refcount_dec_and_test(&opt->refcnt)) in txopt_put()
390 kfree_rcu(opt, rcu); in txopt_put()
401 READ_ONCE(sock_net(sk)->ipv6.flowlabel_has_excl)) in fl6_sock_lookup()
402 return __fl6_sock_lookup(sk, label) ? : ERR_PTR(-ENOENT); in fl6_sock_lookup()
422 atomic_dec(&fl->users); in fl6_sock_release()
453 return idev->cnf.forwarding ? idev->cnf.accept_ra == 2 : in ipv6_accept_ra()
454 idev->cnf.accept_ra; in ipv6_accept_ra()
511 return !!(((a1->s6_addr32[0] ^ a2->s6_addr32[0]) & m->s6_addr32[0]) | in ipv6_masked_addr_cmp()
512 ((a1->s6_addr32[1] ^ a2->s6_addr32[1]) & m->s6_addr32[1]) | in ipv6_masked_addr_cmp()
513 ((a1->s6_addr32[2] ^ a2->s6_addr32[2]) & m->s6_addr32[2]) | in ipv6_masked_addr_cmp()
514 ((a1->s6_addr32[3] ^ a2->s6_addr32[3]) & m->s6_addr32[3])); in ipv6_masked_addr_cmp()
526 memset(pfx->s6_addr, 0, sizeof(pfx->s6_addr)); in ipv6_addr_prefix()
527 memcpy(pfx->s6_addr, addr, o); in ipv6_addr_prefix()
529 pfx->s6_addr[o] = addr->s6_addr[o] & (0xff00 >> b); in ipv6_addr_prefix()
540 memcpy(addr->s6_addr, pfx, o); in ipv6_addr_prefix_copy()
542 addr->s6_addr[o] &= ~(0xff00 >> b); in ipv6_addr_prefix_copy()
543 addr->s6_addr[o] |= (pfx->s6_addr[o] & (0xff00 >> b)); in ipv6_addr_prefix_copy()
571 __ipv6_addr_set_half(&addr->s6_addr32[0], w1, w2); in ipv6_addr_set()
572 __ipv6_addr_set_half(&addr->s6_addr32[2], w3, w4); in ipv6_addr_set()
584 return ((a1->s6_addr32[0] ^ a2->s6_addr32[0]) | in ipv6_addr_equal()
585 (a1->s6_addr32[1] ^ a2->s6_addr32[1]) | in ipv6_addr_equal()
586 (a1->s6_addr32[2] ^ a2->s6_addr32[2]) | in ipv6_addr_equal()
587 (a1->s6_addr32[3] ^ a2->s6_addr32[3])) == 0; in ipv6_addr_equal()
596 if (len && ((*a1 ^ *a2) & cpu_to_be64((~0UL) << (64 - len)))) in __ipv6_prefix_equal64_half()
611 return __ipv6_prefix_equal64_half(a1 + 1, a2 + 1, prefixlen - 64); in ipv6_prefix_equal()
620 const __be32 *a1 = addr1->s6_addr32; in ipv6_prefix_equal()
621 const __be32 *a2 = addr2->s6_addr32; in ipv6_prefix_equal()
631 if (pbi && ((a1[pdw] ^ a2[pdw]) & htonl((0xffffffff) << (32 - pbi)))) in ipv6_prefix_equal()
645 return (a->s6_addr32[0] | a->s6_addr32[1] | in ipv6_addr_any()
646 a->s6_addr32[2] | a->s6_addr32[3]) == 0; in ipv6_addr_any()
658 return (__force u32)(a->s6_addr32[0] ^ a->s6_addr32[1] ^ in ipv6_addr_hash()
659 a->s6_addr32[2] ^ a->s6_addr32[3]); in ipv6_addr_hash()
666 return jhash2((__force const u32 *)a->s6_addr32, in __ipv6_addr_jhash()
667 ARRAY_SIZE(a->s6_addr32), initval); in __ipv6_addr_jhash()
677 return (a->s6_addr32[0] | a->s6_addr32[1] | in ipv6_addr_loopback()
678 a->s6_addr32[2] | (a->s6_addr32[3] ^ cpu_to_be32(1))) == 0; in ipv6_addr_loopback()
684 * since all of the endian-annotated types are fixed size regardless of arch.
692 (__force unsigned long)(a->s6_addr32[0] | a->s6_addr32[1]) | in ipv6_addr_v4mapped()
694 (__force unsigned long)(a->s6_addr32[2] ^ in ipv6_addr_v4mapped()
700 return ipv6_addr_v4mapped(a) && ipv4_is_loopback(a->s6_addr32[3]); in ipv6_addr_v4mapped_loopback()
712 hash = jhash_1word((__force u32)addr6->s6_addr32[3], mix); in ipv6_portaddr_hash()
714 hash = jhash2((__force u32 *)addr6->s6_addr32, 4, mix); in ipv6_portaddr_hash()
725 return (a->s6_addr32[0] & htonl(0xfffffff0)) == htonl(0x20010010); in ipv6_addr_orchid()
730 return (addr->s6_addr32[0] & htonl(0xFF000000)) == htonl(0xFF000000); in ipv6_addr_is_multicast()
756 return i * 32 + 31 - __fls(ntohl(xb)); in __ipv6_addr_diff32()
773 * --ANK (980803) in __ipv6_addr_diff32()
789 return i * 64 + 63 - __fls(be64_to_cpu(xb)); in __ipv6_addr_diff64()
822 if (ipv6_addr_is_multicast(&fl6->daddr)) in ip6_sk_dst_hoplimit()
823 hlimit = np->mcast_hops; in ip6_sk_dst_hoplimit()
825 hlimit = np->hop_limit; in ip6_sk_dst_hoplimit()
832 * Equivalent to : flow->v6addrs.src = iph->saddr;
833 * flow->v6addrs.dst = iph->daddr;
838 BUILD_BUG_ON(offsetof(typeof(flow->addrs), v6addrs.dst) != in iph_to_flow_copy_v6addrs()
839 offsetof(typeof(flow->addrs), v6addrs.src) + in iph_to_flow_copy_v6addrs()
840 sizeof(flow->addrs.v6addrs.src)); in iph_to_flow_copy_v6addrs()
841 memcpy(&flow->addrs.v6addrs, &iph->addrs, sizeof(flow->addrs.v6addrs)); in iph_to_flow_copy_v6addrs()
842 flow->control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS; in iph_to_flow_copy_v6addrs()
850 return net->ipv6.sysctl.ip_nonlocal_bind || in ipv6_can_nonlocal_bind()
851 inet->freebind || inet->transparent; in ipv6_can_nonlocal_bind()
876 net->ipv6.sysctl.auto_flowlabels == IP6_AUTO_FLOW_LABEL_OFF || in ip6_make_flowlabel()
878 net->ipv6.sysctl.auto_flowlabels != IP6_AUTO_FLOW_LABEL_FORCED)) in ip6_make_flowlabel()
891 if (net->ipv6.sysctl.flowlabel_state_ranges) in ip6_make_flowlabel()
899 switch (net->ipv6.sysctl.auto_flowlabels) { in ip6_default_np_autolabel()
925 return net->ipv6.sysctl.multipath_hash_policy; in ip6_multipath_hash_policy()
965 return fl6->flowlabel & IPV6_FLOWLABEL_MASK; in flowi6_get_flowlabel()
984 * upper-layer output functions
992 int getfrag(void *from, char *to, int offset, int len,
1008 int getfrag(void *from, char *to, int offset,
1017 return __ip6_make_skb(sk, &sk->sk_write_queue, &inet_sk(sk)->cork, in ip6_finish_skb()
1018 &inet6_sk(sk)->cork); in ip6_finish_skb()
1072 /* find specified header and get offset to it */
1073 int ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset, int target,
1076 int ipv6_find_tlv(const struct sk_buff *skb, int offset, int type);
1180 if (inet_sk(sk)->inet_num) in ip6_sock_set_v6only()
1181 return -EINVAL; in ip6_sock_set_v6only()
1183 sk->sk_ipv6only = true; in ip6_sock_set_v6only()
1191 inet6_sk(sk)->recverr = true; in ip6_sock_set_recverr()
1221 return -EINVAL; in __ip6_sock_set_addr_preferences()
1235 return -EINVAL; in __ip6_sock_set_addr_preferences()
1245 return -EINVAL; in __ip6_sock_set_addr_preferences()
1248 inet6_sk(sk)->srcprefs = (inet6_sk(sk)->srcprefs & prefmask) | pref; in __ip6_sock_set_addr_preferences()
1265 inet6_sk(sk)->rxopt.bits.rxinfo = true; in ip6_sock_set_recvpktinfo()