1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * INET An implementation of the TCP/IP protocol suite for the LINUX 4*4882a593Smuzhiyun * operating system. INET is implemented using the BSD Socket 5*4882a593Smuzhiyun * interface as the means of communication with the user level. 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Global definitions for the ARCnet interface. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * Authors: David Woodhouse and Avery Pennarun 10*4882a593Smuzhiyun * 11*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or 12*4882a593Smuzhiyun * modify it under the terms of the GNU General Public License 13*4882a593Smuzhiyun * as published by the Free Software Foundation; either version 14*4882a593Smuzhiyun * 2 of the License, or (at your option) any later version. 15*4882a593Smuzhiyun */ 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #ifndef _LINUX_IF_ARCNET_H 18*4882a593Smuzhiyun #define _LINUX_IF_ARCNET_H 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun #include <linux/types.h> 21*4882a593Smuzhiyun #include <linux/if_ether.h> 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun /* 24*4882a593Smuzhiyun * These are the defined ARCnet Protocol ID's. 25*4882a593Smuzhiyun */ 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun /* CAP mode */ 28*4882a593Smuzhiyun /* No macro but uses 1-8 */ 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun /* RFC1201 Protocol ID's */ 31*4882a593Smuzhiyun #define ARC_P_IP 212 /* 0xD4 */ 32*4882a593Smuzhiyun #define ARC_P_IPV6 196 /* 0xC4: RFC2497 */ 33*4882a593Smuzhiyun #define ARC_P_ARP 213 /* 0xD5 */ 34*4882a593Smuzhiyun #define ARC_P_RARP 214 /* 0xD6 */ 35*4882a593Smuzhiyun #define ARC_P_IPX 250 /* 0xFA */ 36*4882a593Smuzhiyun #define ARC_P_NOVELL_EC 236 /* 0xEC */ 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun /* Old RFC1051 Protocol ID's */ 39*4882a593Smuzhiyun #define ARC_P_IP_RFC1051 240 /* 0xF0 */ 40*4882a593Smuzhiyun #define ARC_P_ARP_RFC1051 241 /* 0xF1 */ 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun /* MS LanMan/WfWg "NDIS" encapsulation */ 43*4882a593Smuzhiyun #define ARC_P_ETHER 232 /* 0xE8 */ 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun /* Unsupported/indirectly supported protocols */ 46*4882a593Smuzhiyun #define ARC_P_DATAPOINT_BOOT 0 /* very old Datapoint equipment */ 47*4882a593Smuzhiyun #define ARC_P_DATAPOINT_MOUNT 1 48*4882a593Smuzhiyun #define ARC_P_POWERLAN_BEACON 8 /* Probably ATA-Netbios related */ 49*4882a593Smuzhiyun #define ARC_P_POWERLAN_BEACON2 243 /* 0xF3 */ 50*4882a593Smuzhiyun #define ARC_P_LANSOFT 251 /* 0xFB - what is this? */ 51*4882a593Smuzhiyun #define ARC_P_ATALK 0xDD 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun /* Hardware address length */ 54*4882a593Smuzhiyun #define ARCNET_ALEN 1 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun /* 57*4882a593Smuzhiyun * The RFC1201-specific components of an arcnet packet header. 58*4882a593Smuzhiyun */ 59*4882a593Smuzhiyun struct arc_rfc1201 { 60*4882a593Smuzhiyun __u8 proto; /* protocol ID field - varies */ 61*4882a593Smuzhiyun __u8 split_flag; /* for use with split packets */ 62*4882a593Smuzhiyun __be16 sequence; /* sequence number */ 63*4882a593Smuzhiyun __u8 payload[0]; /* space remaining in packet (504 bytes)*/ 64*4882a593Smuzhiyun }; 65*4882a593Smuzhiyun #define RFC1201_HDR_SIZE 4 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /* 68*4882a593Smuzhiyun * The RFC1051-specific components. 69*4882a593Smuzhiyun */ 70*4882a593Smuzhiyun struct arc_rfc1051 { 71*4882a593Smuzhiyun __u8 proto; /* ARC_P_RFC1051_ARP/RFC1051_IP */ 72*4882a593Smuzhiyun __u8 payload[0]; /* 507 bytes */ 73*4882a593Smuzhiyun }; 74*4882a593Smuzhiyun #define RFC1051_HDR_SIZE 1 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun /* 77*4882a593Smuzhiyun * The ethernet-encap-specific components. We have a real ethernet header 78*4882a593Smuzhiyun * and some data. 79*4882a593Smuzhiyun */ 80*4882a593Smuzhiyun struct arc_eth_encap { 81*4882a593Smuzhiyun __u8 proto; /* Always ARC_P_ETHER */ 82*4882a593Smuzhiyun struct ethhdr eth; /* standard ethernet header (yuck!) */ 83*4882a593Smuzhiyun __u8 payload[0]; /* 493 bytes */ 84*4882a593Smuzhiyun }; 85*4882a593Smuzhiyun #define ETH_ENCAP_HDR_SIZE 14 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun struct arc_cap { 88*4882a593Smuzhiyun __u8 proto; 89*4882a593Smuzhiyun __u8 cookie[sizeof(int)]; 90*4882a593Smuzhiyun /* Actually NOT sent over the network */ 91*4882a593Smuzhiyun union { 92*4882a593Smuzhiyun __u8 ack; 93*4882a593Smuzhiyun __u8 raw[0]; /* 507 bytes */ 94*4882a593Smuzhiyun } mes; 95*4882a593Smuzhiyun }; 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun /* 98*4882a593Smuzhiyun * The data needed by the actual arcnet hardware. 99*4882a593Smuzhiyun * 100*4882a593Smuzhiyun * Now, in the real arcnet hardware, the third and fourth bytes are the 101*4882a593Smuzhiyun * 'offset' specification instead of the length, and the soft data is at 102*4882a593Smuzhiyun * the _end_ of the 512-byte buffer. We hide this complexity inside the 103*4882a593Smuzhiyun * driver. 104*4882a593Smuzhiyun */ 105*4882a593Smuzhiyun struct arc_hardware { 106*4882a593Smuzhiyun __u8 source; /* source ARCnet - filled in automagically */ 107*4882a593Smuzhiyun __u8 dest; /* destination ARCnet - 0 for broadcast */ 108*4882a593Smuzhiyun __u8 offset[2]; /* offset bytes (some weird semantics) */ 109*4882a593Smuzhiyun }; 110*4882a593Smuzhiyun #define ARC_HDR_SIZE 4 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun /* 113*4882a593Smuzhiyun * This is an ARCnet frame header, as seen by the kernel (and userspace, 114*4882a593Smuzhiyun * when you do a raw packet capture). 115*4882a593Smuzhiyun */ 116*4882a593Smuzhiyun struct archdr { 117*4882a593Smuzhiyun /* hardware requirements */ 118*4882a593Smuzhiyun struct arc_hardware hard; 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun /* arcnet encapsulation-specific bits */ 121*4882a593Smuzhiyun union { 122*4882a593Smuzhiyun struct arc_rfc1201 rfc1201; 123*4882a593Smuzhiyun struct arc_rfc1051 rfc1051; 124*4882a593Smuzhiyun struct arc_eth_encap eth_encap; 125*4882a593Smuzhiyun struct arc_cap cap; 126*4882a593Smuzhiyun __u8 raw[0]; /* 508 bytes */ 127*4882a593Smuzhiyun } soft; 128*4882a593Smuzhiyun }; 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun #endif /* _LINUX_IF_ARCNET_H */ 131