if_arcnet.h 3.6 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/*
 * 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

19
#include <linux/types.h>
L
Linus Torvalds 已提交
20 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
    __u8  proto;		/* protocol ID field - varies		*/
    __u8  split_flag;	/* for use with split packets		*/
A
Al Viro 已提交
62
    __be16   sequence;		/* sequence number			*/
63
    __u8  payload[0];	/* space remaining in packet (504 bytes)*/
L
Linus Torvalds 已提交
64 65 66 67 68 69 70
};
#define RFC1201_HDR_SIZE 4


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


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


E
Eric Dumazet 已提交
90
struct arc_cap {
91 92
	__u8 proto;
	__u8 cookie[sizeof(int)];   /* Actually NOT sent over the network */
L
Linus Torvalds 已提交
93
	union {
94 95
		__u8 ack;
		__u8 raw[0];		/* 507 bytes */
L
Linus Torvalds 已提交
96 97 98 99 100 101 102 103 104 105 106
	} 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 已提交
107
struct arc_hardware {
108
    __u8  source,		/* source ARCnet - filled in automagically */
L
Linus Torvalds 已提交
109 110 111 112 113 114 115 116 117
             dest,		/* destination ARCnet - 0 for broadcast    */
    	     offset[2];		/* offset bytes (some weird semantics)     */
};
#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 已提交
118
struct archdr {
L
Linus Torvalds 已提交
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;
128
	__u8 raw[0];		/* 508 bytes				*/
L
Linus Torvalds 已提交
129 130 131 132
    } soft;
};

#endif				/* _LINUX_IF_ARCNET_H */