if_arcnet.h 3.6 KB
Newer Older
1
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
L
Linus Torvalds 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/*
 * INET         An implementation of the TCP/IP protocol suite for the LINUX
 *              operating system.  INET is implemented using the  BSD Socket
 *              interface as the means of communication with the user level.
 *
 *              Global definitions for the ARCnet interface.
 *
 * Authors:     David Woodhouse and Avery Pennarun
 *
 *              This program is free software; you can redistribute it and/or
 *              modify it under the terms of the GNU General Public License
 *              as published by the Free Software Foundation; either version
 *              2 of the License, or (at your option) any later version.
 */

#ifndef _LINUX_IF_ARCNET_H
#define _LINUX_IF_ARCNET_H

20
#include <linux/types.h>
L
Linus Torvalds 已提交
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
#include <linux/if_ether.h>

/*
 *    These are the defined ARCnet Protocol ID's.
 */

/* CAP mode */
/* No macro but uses 1-8 */

/* RFC1201 Protocol ID's */
#define ARC_P_IP		212	/* 0xD4 */
#define ARC_P_IPV6		196	/* 0xC4: RFC2497 */
#define ARC_P_ARP		213	/* 0xD5 */
#define ARC_P_RARP		214	/* 0xD6 */
#define ARC_P_IPX		250	/* 0xFA */
#define ARC_P_NOVELL_EC		236	/* 0xEC */

/* Old RFC1051 Protocol ID's */
#define ARC_P_IP_RFC1051	240	/* 0xF0 */
#define ARC_P_ARP_RFC1051	241	/* 0xF1 */

/* MS LanMan/WfWg "NDIS" encapsulation */
#define ARC_P_ETHER		232	/* 0xE8 */

/* Unsupported/indirectly supported protocols */
#define ARC_P_DATAPOINT_BOOT	0	/* very old Datapoint equipment */
#define ARC_P_DATAPOINT_MOUNT	1
#define ARC_P_POWERLAN_BEACON	8	/* Probably ATA-Netbios related */
#define ARC_P_POWERLAN_BEACON2	243	/* 0xF3 */
#define ARC_P_LANSOFT		251	/* 0xFB - what is this? */
#define ARC_P_ATALK		0xDD

/* Hardware address length */
#define ARCNET_ALEN	1

/*
 * The RFC1201-specific components of an arcnet packet header.
 */
E
Eric Dumazet 已提交
59
struct arc_rfc1201 {
60 61 62
	__u8  proto;		/* protocol ID field - varies		*/
	__u8  split_flag;	/* for use with split packets		*/
	__be16   sequence;	/* sequence number			*/
63
	__u8  payload[];	/* space remaining in packet (504 bytes)*/
L
Linus Torvalds 已提交
64 65 66 67 68 69
};
#define RFC1201_HDR_SIZE 4

/*
 * The RFC1051-specific components.
 */
E
Eric Dumazet 已提交
70
struct arc_rfc1051 {
71
	__u8 proto;		/* ARC_P_RFC1051_ARP/RFC1051_IP	*/
72
	__u8 payload[];	/* 507 bytes			*/
L
Linus Torvalds 已提交
73 74 75 76 77 78 79
};
#define RFC1051_HDR_SIZE 1

/*
 * The ethernet-encap-specific components.  We have a real ethernet header
 * and some data.
 */
E
Eric Dumazet 已提交
80
struct arc_eth_encap {
81 82
	__u8 proto;		/* Always ARC_P_ETHER			*/
	struct ethhdr eth;	/* standard ethernet header (yuck!)	*/
83
	__u8 payload[];	/* 493 bytes				*/
L
Linus Torvalds 已提交
84 85 86
};
#define ETH_ENCAP_HDR_SIZE 14

E
Eric Dumazet 已提交
87
struct arc_cap {
88
	__u8 proto;
89 90
	__u8 cookie[sizeof(int)];
				/* Actually NOT sent over the network */
L
Linus Torvalds 已提交
91
	union {
92
		__u8 ack;
93
		__u8 raw[0];	/* 507 bytes */
L
Linus Torvalds 已提交
94 95 96 97 98 99 100 101 102 103 104
	} mes;
};

/*
 * The data needed by the actual arcnet hardware.
 *
 * Now, in the real arcnet hardware, the third and fourth bytes are the
 * 'offset' specification instead of the length, and the soft data is at
 * the _end_ of the 512-byte buffer.  We hide this complexity inside the
 * driver.
 */
E
Eric Dumazet 已提交
105
struct arc_hardware {
106 107 108
	__u8 source;		/* source ARCnet - filled in automagically */
	__u8 dest;		/* destination ARCnet - 0 for broadcast    */
	__u8 offset[2];		/* offset bytes (some weird semantics)     */
L
Linus Torvalds 已提交
109 110 111 112 113 114 115
};
#define ARC_HDR_SIZE 4

/*
 * This is an ARCnet frame header, as seen by the kernel (and userspace,
 * when you do a raw packet capture).
 */
E
Eric Dumazet 已提交
116
struct archdr {
117 118 119 120 121 122 123 124 125 126 127
	/* hardware requirements */
	struct arc_hardware hard;

	/* arcnet encapsulation-specific bits */
	union {
		struct arc_rfc1201   rfc1201;
		struct arc_rfc1051   rfc1051;
		struct arc_eth_encap eth_encap;
		struct arc_cap       cap;
		__u8 raw[0];	/* 508 bytes				*/
	} soft;
L
Linus Torvalds 已提交
128 129 130
};

#endif				/* _LINUX_IF_ARCNET_H */