/usr/src/linux-headers-5.15.0-190/include/net
NameSizeModeActions
9p/-0755rm
bluetooth/-0755rm
caif/-0755rm
iucv/-0755rm
netfilter/-0755rm
netns/-0755rm
nfc/-0755rm
phonet/-0755rm
sctp/-0755rm
tc_act/-0755rm
6lowpan.h102700644editdlrm
act_api.h87280644editdlrm
addrconf.h145940644editdlrm
af_ieee802154.h12200644editdlrm
af_rxrpc.h27980644editdlrm
af_unix.h33750644editdlrm
af_vsock.h75920644editdlrm
ah.h3820644editdlrm
arp.h21410644editdlrm
atmclip.h15150644editdlrm
ax25.h154430644editdlrm
ax88796.h14400644editdlrm
bareudp.h5720644editdlrm
bonding.h202630644editdlrm
bond_3ad.h97060644editdlrm
bond_alb.h62510644editdlrm
bond_options.h38760644editdlrm
bpf_sk_storage.h17800644editdlrm
busy_poll.h39590644editdlrm
calipso.h15900644editdlrm
cfg80211-wext.h18540644editdlrm
cfg80211.h3013170644editdlrm
cfg802154.h107790644editdlrm
checksum.h48690644editdlrm
cipso_ipv4.h75480644editdlrm
cls_cgroup.h20860644editdlrm
codel.h57820644editdlrm
codel_impl.h81670644editdlrm
codel_qdisc.h29730644editdlrm
compat.h25860644editdlrm
datalink.h6190644editdlrm
dcbevent.h7420644editdlrm
dcbnl.h43170644editdlrm
devlink.h635930644editdlrm
dsa.h362310644editdlrm
dsfield.h11470644editdlrm
dst.h151530644editdlrm
dst_cache.h30310644editdlrm
dst_metadata.h55210644editdlrm
dst_ops.h21250644editdlrm
erspan.h91800644editdlrm
esp.h11900644editdlrm
espintcp.h9660644editdlrm
ethoc.h3910644editdlrm
failover.h11780644editdlrm
fib_notifier.h13840644editdlrm
fib_rules.h64500644editdlrm
firewire.h6360644editdlrm
flow.h51190644editdlrm
flow_dissector.h110330644editdlrm
flow_offload.h159380644editdlrm
fou.h5490644editdlrm
fq.h25280644editdlrm
fq_impl.h80760644editdlrm
garp.h26780644editdlrm
genetlink.h138540644editdlrm
geneve.h18980644editdlrm
gen_stats.h28890644editdlrm
gre.h33690644editdlrm
gro.h7830644editdlrm
gro_cells.h4430644editdlrm
gtp.h6330644editdlrm
gue.h33130644editdlrm
hwbm.h9690644editdlrm
icmp.h19180644editdlrm
ieee80211_radiotap.h135180644editdlrm
ieee802154_netdev.h100950644editdlrm
ife.h10570644editdlrm
if_inet6.h66920644editdlrm
ila.h2910644editdlrm
inet6_connection_sock.h7650644editdlrm
inet6_hashtables.h42590644editdlrm
inetpeer.h33720644editdlrm
inet_common.h26140644editdlrm
inet_connection_sock.h116080644editdlrm
inet_ecn.h76250644editdlrm
inet_frag.h50460644editdlrm
inet_hashtables.h125320644editdlrm
inet_sock.h99940644editdlrm
inet_timewait_sock.h37350644editdlrm
ioam6.h12480644editdlrm
ip.h227590644editdlrm
ip6_checksum.h27700644editdlrm
ip6_fib.h162800644editdlrm
ip6_route.h102300644editdlrm
ip6_tunnel.h50960644editdlrm
ipcomp.h6590644editdlrm
ipconfig.h8110644editdlrm
ipv6.h359900644editdlrm
ipv6_frag.h33610644editdlrm
ipv6_stubs.h34820644editdlrm
ip_fib.h163460644editdlrm
ip_tunnels.h159490644editdlrm
ip_vs.h505880644editdlrm
iw_handler.h214130644editdlrm
kcm.h49610644editdlrm
l3mdev.h72020644editdlrm
lag.h4090644editdlrm
lapb.h49380644editdlrm
lib80211.h40170644editdlrm
llc.h45140644editdlrm
llc_conn.h41550644editdlrm
llc_c_ac.h95370644editdlrm
llc_c_ev.h109400644editdlrm
llc_c_st.h17620644editdlrm
llc_if.h22100644editdlrm
llc_pdu.h146970644editdlrm
llc_sap.h11080644editdlrm
llc_s_ac.h15910644editdlrm
llc_s_ev.h22550644editdlrm
llc_s_st.h9470644editdlrm
lwtunnel.h68060644editdlrm
mac80211.h2741200644editdlrm
mac802154.h152350644editdlrm
macsec.h70840644editdlrm
mctp.h61550644editdlrm
mctpdevice.h8410644editdlrm
mip6.h10160644editdlrm
mld.h29180644editdlrm
mpls.h9430644editdlrm
mpls_iptunnel.h4290644editdlrm
mptcp.h67760644editdlrm
mrp.h31190644editdlrm
ncsi.h19640644editdlrm
ndisc.h151500644editdlrm
neighbour.h160990644editdlrm
netevent.h10440644editdlrm
netlabel.h206760644editdlrm
netlink.h618920644editdlrm
netprio_cgroup.h10470644editdlrm
netrom.h78950644editdlrm
net_failover.h10230644editdlrm
net_namespace.h127950644editdlrm
net_ratelimit.h2200644editdlrm
nexthop.h125650644editdlrm
nl802154.h123840644editdlrm
nsh.h126020644editdlrm
p8022.h4470644editdlrm
page_pool.h86460644editdlrm
pie.h36950644editdlrm
ping.h29700644editdlrm
pkt_cls.h244310644editdlrm
pkt_sched.h60420644editdlrm
pptp.h5570644editdlrm
protocol.h39000644editdlrm
psample.h10830644editdlrm
psnap.h3510644editdlrm
raw.h21360644editdlrm
rawv6.h8540644editdlrm
red.h116000644editdlrm
regulatory.h109010644editdlrm
request_sock.h66600644editdlrm
rose.h78020644editdlrm
route.h113610644editdlrm
rpl.h8390644editdlrm
rsi_91x.h17100644editdlrm
rtnetlink.h76380644editdlrm
rtnh.h8590644editdlrm
sch_generic.h349910644editdlrm
scm.h38770644editdlrm
secure_seq.h8550644editdlrm
seg6.h22370644editdlrm
seg6_hmac.h14730644editdlrm
seg6_local.h6440644editdlrm
selftests.h5820644editdlrm
slhc_vj.h68310644editdlrm
smc.h25130644editdlrm
snmp.h52680644editdlrm
sock.h863510644editdlrm
sock_reuseport.h18730644editdlrm
Space.h7370644editdlrm
stp.h3830644editdlrm
strparser.h42500644editdlrm
switchdev.h146140644editdlrm
tcp.h753270644editdlrm
tcp_states.h12250644editdlrm
timewait_sock.h9250644editdlrm
tipc.h24050644editdlrm
tls.h214650644editdlrm
tls_toe.h30060644editdlrm
transp_v6.h19960644editdlrm
tso.h5660644editdlrm
tun_proto.h9880644editdlrm
udp.h170350644editdlrm
udplite.h37620644editdlrm
udp_tunnel.h127390644editdlrm
vsock_addr.h6620644editdlrm
vxlan.h144240644editdlrm
wext.h15100644editdlrm
x25.h97180644editdlrm
x25device.h3870644editdlrm
xdp.h88290644editdlrm
xdp_priv.h4460644editdlrm
xdp_sock.h20940644editdlrm
xdp_sock_drv.h56070644editdlrm
xfrm.h563040644editdlrm
xsk_buff_pool.h51380644editdlrm
Edit: /usr/src/linux-headers-5.15.0-190/include/net/6lowpan.h (10270B)
/* * Copyright 2011, Siemens AG * written by Alexander Smirnov */ /* * Based on patches from Jon Smirl * Copyright (c) 2011 Jon Smirl * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* Jon's code is based on 6lowpan implementation for Contiki which is: * Copyright (c) 2008, Swedish Institute of Computer Science. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the Institute nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #ifndef __6LOWPAN_H__ #define __6LOWPAN_H__ #include #include #include /* special link-layer handling */ #include #define EUI64_ADDR_LEN 8 #define LOWPAN_NHC_MAX_ID_LEN 1 /* Maximum next header compression length which we currently support inclusive * possible inline data. */ #define LOWPAN_NHC_MAX_HDR_LEN (sizeof(struct udphdr)) /* Max IPHC Header len without IPv6 hdr specific inline data. * Useful for getting the "extra" bytes we need at worst case compression. * * LOWPAN_IPHC + CID + LOWPAN_NHC_MAX_ID_LEN */ #define LOWPAN_IPHC_MAX_HEADER_LEN (2 + 1 + LOWPAN_NHC_MAX_ID_LEN) /* Maximum worst case IPHC header buffer size */ #define LOWPAN_IPHC_MAX_HC_BUF_LEN (sizeof(struct ipv6hdr) + \ LOWPAN_IPHC_MAX_HEADER_LEN + \ LOWPAN_NHC_MAX_HDR_LEN) /* SCI/DCI is 4 bit width, so we have maximum 16 entries */ #define LOWPAN_IPHC_CTX_TABLE_SIZE (1 << 4) #define LOWPAN_DISPATCH_IPV6 0x41 /* 01000001 = 65 */ #define LOWPAN_DISPATCH_IPHC 0x60 /* 011xxxxx = ... */ #define LOWPAN_DISPATCH_IPHC_MASK 0xe0 static inline bool lowpan_is_ipv6(u8 dispatch) { return dispatch == LOWPAN_DISPATCH_IPV6; } static inline bool lowpan_is_iphc(u8 dispatch) { return (dispatch & LOWPAN_DISPATCH_IPHC_MASK) == LOWPAN_DISPATCH_IPHC; } #define LOWPAN_PRIV_SIZE(llpriv_size) \ (sizeof(struct lowpan_dev) + llpriv_size) enum lowpan_lltypes { LOWPAN_LLTYPE_BTLE, LOWPAN_LLTYPE_IEEE802154, }; enum lowpan_iphc_ctx_flags { LOWPAN_IPHC_CTX_FLAG_ACTIVE, LOWPAN_IPHC_CTX_FLAG_COMPRESSION, }; struct lowpan_iphc_ctx { u8 id; struct in6_addr pfx; u8 plen; unsigned long flags; }; struct lowpan_iphc_ctx_table { spinlock_t lock; const struct lowpan_iphc_ctx_ops *ops; struct lowpan_iphc_ctx table[LOWPAN_IPHC_CTX_TABLE_SIZE]; }; static inline bool lowpan_iphc_ctx_is_active(const struct lowpan_iphc_ctx *ctx) { return test_bit(LOWPAN_IPHC_CTX_FLAG_ACTIVE, &ctx->flags); } static inline bool lowpan_iphc_ctx_is_compression(const struct lowpan_iphc_ctx *ctx) { return test_bit(LOWPAN_IPHC_CTX_FLAG_COMPRESSION, &ctx->flags); } struct lowpan_dev { enum lowpan_lltypes lltype; struct dentry *iface_debugfs; struct lowpan_iphc_ctx_table ctx; /* must be last */ u8 priv[] __aligned(sizeof(void *)); }; struct lowpan_802154_neigh { __le16 short_addr; }; static inline struct lowpan_802154_neigh *lowpan_802154_neigh(void *neigh_priv) { return neigh_priv; } static inline struct lowpan_dev *lowpan_dev(const struct net_device *dev) { return netdev_priv(dev); } /* private device info */ struct lowpan_802154_dev { struct net_device *wdev; /* wpan device ptr */ u16 fragment_tag; }; static inline struct lowpan_802154_dev *lowpan_802154_dev(const struct net_device *dev) { return (struct lowpan_802154_dev *)lowpan_dev(dev)->priv; } struct lowpan_802154_cb { u16 d_tag; unsigned int d_size; u8 d_offset; }; static inline struct lowpan_802154_cb *lowpan_802154_cb(const struct sk_buff *skb) { BUILD_BUG_ON(sizeof(struct lowpan_802154_cb) > sizeof(skb->cb)); return (struct lowpan_802154_cb *)skb->cb; } static inline void lowpan_iphc_uncompress_eui64_lladdr(struct in6_addr *ipaddr, const void *lladdr) { /* fe:80::XXXX:XXXX:XXXX:XXXX * \_________________/ * hwaddr */ ipaddr->s6_addr[0] = 0xFE; ipaddr->s6_addr[1] = 0x80; memcpy(&ipaddr->s6_addr[8], lladdr, EUI64_ADDR_LEN); /* second bit-flip (Universe/Local) * is done according RFC2464 */ ipaddr->s6_addr[8] ^= 0x02; } static inline void lowpan_iphc_uncompress_eui48_lladdr(struct in6_addr *ipaddr, const void *lladdr) { /* fe:80::XXXX:XXff:feXX:XXXX * \_________________/ * hwaddr */ ipaddr->s6_addr[0] = 0xFE; ipaddr->s6_addr[1] = 0x80; memcpy(&ipaddr->s6_addr[8], lladdr, 3); ipaddr->s6_addr[11] = 0xFF; ipaddr->s6_addr[12] = 0xFE; memcpy(&ipaddr->s6_addr[13], lladdr + 3, 3); } #ifdef DEBUG /* print data in line */ static inline void raw_dump_inline(const char *caller, char *msg, const unsigned char *buf, int len) { if (msg) pr_debug("%s():%s: ", caller, msg); print_hex_dump_debug("", DUMP_PREFIX_NONE, 16, 1, buf, len, false); } /* print data in a table format: * * addr: xx xx xx xx xx xx * addr: xx xx xx xx xx xx * ... */ static inline void raw_dump_table(const char *caller, char *msg, const unsigned char *buf, int len) { if (msg) pr_debug("%s():%s:\n", caller, msg); print_hex_dump_debug("\t", DUMP_PREFIX_OFFSET, 16, 1, buf, len, false); } #else static inline void raw_dump_table(const char *caller, char *msg, const unsigned char *buf, int len) { } static inline void raw_dump_inline(const char *caller, char *msg, const unsigned char *buf, int len) { } #endif /** * lowpan_fetch_skb - getting inline data from 6LoWPAN header * * This function will pull data from sk buffer and put it into data to * remove the 6LoWPAN inline data. This function returns true if the * sk buffer is too small to pull the amount of data which is specified * by len. * * @skb: the buffer where the inline data should be pulled from. * @data: destination buffer for the inline data. * @len: amount of data which should be pulled in bytes. */ static inline bool lowpan_fetch_skb(struct sk_buff *skb, void *data, unsigned int len) { if (unlikely(!pskb_may_pull(skb, len))) return true; skb_copy_from_linear_data(skb, data, len); skb_pull(skb, len); return false; } static inline bool lowpan_802154_is_valid_src_short_addr(__le16 addr) { /* First bit of addr is multicast, reserved or 802.15.4 specific */ return !(addr & cpu_to_le16(0x8000)); } static inline void lowpan_push_hc_data(u8 **hc_ptr, const void *data, const size_t len) { memcpy(*hc_ptr, data, len); *hc_ptr += len; } int lowpan_register_netdevice(struct net_device *dev, enum lowpan_lltypes lltype); int lowpan_register_netdev(struct net_device *dev, enum lowpan_lltypes lltype); void lowpan_unregister_netdevice(struct net_device *dev); void lowpan_unregister_netdev(struct net_device *dev); /** * lowpan_header_decompress - replace 6LoWPAN header with IPv6 header * * This function replaces the IPHC 6LoWPAN header which should be pointed at * skb->data and skb_network_header, with the IPv6 header. * It would be nice that the caller have the necessary headroom of IPv6 header * and greatest Transport layer header, this would reduce the overhead for * reallocate headroom. * * @skb: the buffer which should be manipulate. * @dev: the lowpan net device pointer. * @daddr: destination lladdr of mac header which is used for compression * methods. * @saddr: source lladdr of mac header which is used for compression * methods. */ int lowpan_header_decompress(struct sk_buff *skb, const struct net_device *dev, const void *daddr, const void *saddr); /** * lowpan_header_compress - replace IPv6 header with 6LoWPAN header * * This function replaces the IPv6 header which should be pointed at * skb->data and skb_network_header, with the IPHC 6LoWPAN header. * The caller need to be sure that the sk buffer is not shared and at have * at least a headroom which is smaller or equal LOWPAN_IPHC_MAX_HEADER_LEN, * which is the IPHC "more bytes than IPv6 header" at worst case. * * @skb: the buffer which should be manipulate. * @dev: the lowpan net device pointer. * @daddr: destination lladdr of mac header which is used for compression * methods. * @saddr: source lladdr of mac header which is used for compression * methods. */ int lowpan_header_compress(struct sk_buff *skb, const struct net_device *dev, const void *daddr, const void *saddr); #endif /* __6LOWPAN_H__ */