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()
400 return __fl6_sock_lookup(sk, label) ? : ERR_PTR(-ENOENT); in fl6_sock_lookup()
419 atomic_dec(&fl->users); in fl6_sock_release()
450 return idev->cnf.forwarding ? idev->cnf.accept_ra == 2 : in ipv6_accept_ra()
451 idev->cnf.accept_ra; in ipv6_accept_ra()
508 return !!(((a1->s6_addr32[0] ^ a2->s6_addr32[0]) & m->s6_addr32[0]) | in ipv6_masked_addr_cmp()
509 ((a1->s6_addr32[1] ^ a2->s6_addr32[1]) & m->s6_addr32[1]) | in ipv6_masked_addr_cmp()
510 ((a1->s6_addr32[2] ^ a2->s6_addr32[2]) & m->s6_addr32[2]) | in ipv6_masked_addr_cmp()
511 ((a1->s6_addr32[3] ^ a2->s6_addr32[3]) & m->s6_addr32[3])); in ipv6_masked_addr_cmp()
523 memset(pfx->s6_addr, 0, sizeof(pfx->s6_addr)); in ipv6_addr_prefix()
524 memcpy(pfx->s6_addr, addr, o); in ipv6_addr_prefix()
526 pfx->s6_addr[o] = addr->s6_addr[o] & (0xff00 >> b); in ipv6_addr_prefix()
537 memcpy(addr->s6_addr, pfx, o); in ipv6_addr_prefix_copy()
539 addr->s6_addr[o] &= ~(0xff00 >> b); in ipv6_addr_prefix_copy()
540 addr->s6_addr[o] |= (pfx->s6_addr[o] & (0xff00 >> b)); in ipv6_addr_prefix_copy()
568 __ipv6_addr_set_half(&addr->s6_addr32[0], w1, w2); in ipv6_addr_set()
569 __ipv6_addr_set_half(&addr->s6_addr32[2], w3, w4); in ipv6_addr_set()
581 return ((a1->s6_addr32[0] ^ a2->s6_addr32[0]) | in ipv6_addr_equal()
582 (a1->s6_addr32[1] ^ a2->s6_addr32[1]) | in ipv6_addr_equal()
583 (a1->s6_addr32[2] ^ a2->s6_addr32[2]) | in ipv6_addr_equal()
584 (a1->s6_addr32[3] ^ a2->s6_addr32[3])) == 0; in ipv6_addr_equal()
593 if (len && ((*a1 ^ *a2) & cpu_to_be64((~0UL) << (64 - len)))) in __ipv6_prefix_equal64_half()
608 return __ipv6_prefix_equal64_half(a1 + 1, a2 + 1, prefixlen - 64); in ipv6_prefix_equal()
617 const __be32 *a1 = addr1->s6_addr32; in ipv6_prefix_equal()
618 const __be32 *a2 = addr2->s6_addr32; in ipv6_prefix_equal()
628 if (pbi && ((a1[pdw] ^ a2[pdw]) & htonl((0xffffffff) << (32 - pbi)))) in ipv6_prefix_equal()
642 return (a->s6_addr32[0] | a->s6_addr32[1] | in ipv6_addr_any()
643 a->s6_addr32[2] | a->s6_addr32[3]) == 0; in ipv6_addr_any()
655 return (__force u32)(a->s6_addr32[0] ^ a->s6_addr32[1] ^ in ipv6_addr_hash()
656 a->s6_addr32[2] ^ a->s6_addr32[3]); in ipv6_addr_hash()
663 u32 v = (__force u32)a->s6_addr32[0] ^ (__force u32)a->s6_addr32[1]; in __ipv6_addr_jhash()
666 (__force u32)a->s6_addr32[2], in __ipv6_addr_jhash()
667 (__force u32)a->s6_addr32[3], in __ipv6_addr_jhash()
678 return (a->s6_addr32[0] | a->s6_addr32[1] | in ipv6_addr_loopback()
679 a->s6_addr32[2] | (a->s6_addr32[3] ^ cpu_to_be32(1))) == 0; in ipv6_addr_loopback()
685 * since all of the endian-annotated types are fixed size regardless of arch.
693 (__force unsigned long)(a->s6_addr32[0] | a->s6_addr32[1]) | in ipv6_addr_v4mapped()
695 (__force unsigned long)(a->s6_addr32[2] ^ in ipv6_addr_v4mapped()
701 return ipv6_addr_v4mapped(a) && ipv4_is_loopback(a->s6_addr32[3]); in ipv6_addr_v4mapped_loopback()
713 hash = jhash_1word((__force u32)addr6->s6_addr32[3], mix); in ipv6_portaddr_hash()
715 hash = jhash2((__force u32 *)addr6->s6_addr32, 4, mix); in ipv6_portaddr_hash()
726 return (a->s6_addr32[0] & htonl(0xfffffff0)) == htonl(0x20010010); in ipv6_addr_orchid()
731 return (addr->s6_addr32[0] & htonl(0xFF000000)) == htonl(0xFF000000); in ipv6_addr_is_multicast()
757 return i * 32 + 31 - __fls(ntohl(xb)); in __ipv6_addr_diff32()
774 * --ANK (980803) in __ipv6_addr_diff32()
790 return i * 64 + 63 - __fls(be64_to_cpu(xb)); in __ipv6_addr_diff64()
823 if (ipv6_addr_is_multicast(&fl6->daddr)) in ip6_sk_dst_hoplimit()
824 hlimit = np->mcast_hops; in ip6_sk_dst_hoplimit()
826 hlimit = np->hop_limit; in ip6_sk_dst_hoplimit()
833 * Equivalent to : flow->v6addrs.src = iph->saddr;
834 * flow->v6addrs.dst = iph->daddr;
839 BUILD_BUG_ON(offsetof(typeof(flow->addrs), v6addrs.dst) != in iph_to_flow_copy_v6addrs()
840 offsetof(typeof(flow->addrs), v6addrs.src) + in iph_to_flow_copy_v6addrs()
841 sizeof(flow->addrs.v6addrs.src)); in iph_to_flow_copy_v6addrs()
842 memcpy(&flow->addrs.v6addrs, &iph->addrs, sizeof(flow->addrs.v6addrs)); in iph_to_flow_copy_v6addrs()
843 flow->control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS; in iph_to_flow_copy_v6addrs()
851 return net->ipv6.sysctl.ip_nonlocal_bind || in ipv6_can_nonlocal_bind()
852 inet->freebind || inet->transparent; in ipv6_can_nonlocal_bind()
877 net->ipv6.sysctl.auto_flowlabels == IP6_AUTO_FLOW_LABEL_OFF || in ip6_make_flowlabel()
879 net->ipv6.sysctl.auto_flowlabels != IP6_AUTO_FLOW_LABEL_FORCED)) in ip6_make_flowlabel()
892 if (net->ipv6.sysctl.flowlabel_state_ranges) in ip6_make_flowlabel()
900 switch (net->ipv6.sysctl.auto_flowlabels) { in ip6_default_np_autolabel()
926 return net->ipv6.sysctl.multipath_hash_policy; in ip6_multipath_hash_policy()
966 return fl6->flowlabel & IPV6_FLOWLABEL_MASK; in flowi6_get_flowlabel()
985 * upper-layer output functions
993 int getfrag(void *from, char *to, int offset, int len,
1009 int getfrag(void *from, char *to, int offset,
1018 return __ip6_make_skb(sk, &sk->sk_write_queue, &inet_sk(sk)->cork, in ip6_finish_skb()
1019 &inet6_sk(sk)->cork); in ip6_finish_skb()
1073 /* find specified header and get offset to it */
1074 int ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset, int target,
1077 int ipv6_find_tlv(const struct sk_buff *skb, int offset, int type);
1179 if (inet_sk(sk)->inet_num) in ip6_sock_set_v6only()
1180 return -EINVAL; in ip6_sock_set_v6only()
1182 sk->sk_ipv6only = true; in ip6_sock_set_v6only()
1190 inet6_sk(sk)->recverr = true; in ip6_sock_set_recverr()
1220 return -EINVAL; in __ip6_sock_set_addr_preferences()
1234 return -EINVAL; in __ip6_sock_set_addr_preferences()
1244 return -EINVAL; in __ip6_sock_set_addr_preferences()
1247 inet6_sk(sk)->srcprefs = (inet6_sk(sk)->srcprefs & prefmask) | pref; in __ip6_sock_set_addr_preferences()
1264 inet6_sk(sk)->rxopt.bits.rxinfo = true; in ip6_sock_set_recvpktinfo()