summaryrefslogtreecommitdiff
path: root/sys/net/if_token.h
blob: 1db70d427791fc69e95b697fc6ccb52316809033 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*	$OpenBSD: if_token.h,v 1.3 2002/03/14 01:27:09 millert Exp $	*/
/*	$NetBSD: if_token.h,v 1.6 1999/11/19 20:41:19 thorpej Exp $	*/

/*
 * Copyright (c) 1982, 1986, 1993
 *	The Regents of the University of California.  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. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *	This product includes software developed by the University of
 *	California, Berkeley and its contributors.
 * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
 *
 *	from: NetBSD: if_fddi.h,v 1.2 1995/08/19 04:35:28 cgd Exp
 */

#ifndef _NET_IF_TOKEN_H_
#define _NET_IF_TOKEN_H_

#define ISO88025_ADDR_LEN 6

/* Token Ring physical header */
struct token_header {
	u_int8_t  token_ac;			/* access control field */
	u_int8_t  token_fc;			/* frame control field */
	u_int8_t  token_dhost[ISO88025_ADDR_LEN];	/* dest. address */
	u_int8_t  token_shost[ISO88025_ADDR_LEN];	/* source address */
} __attribute__((__packed__));

#define TOKEN_MAX_BRIDGE 8

/* Token Ring routing information field */
struct token_rif {
	u_int16_t tr_rcf;			/* route control field */
	u_int16_t tr_rdf[TOKEN_MAX_BRIDGE];	/* route-designator fields */
} __attribute__((__packed__));

/* standard values for adress control and frame control field */
#define TOKEN_AC		0x10
#define TOKEN_FC		0x40

#define TOKEN_RI_PRESENT		0x80	/* routing info present bit */
#define TOKEN_RCF_LEN_MASK		0x1f00
#define TOKEN_RCF_BROADCAST_MASK	0xe000
#define	TOKEN_RCF_BROADCAST_ALL		0x8000  /* all routes broadcast */
#define	TOKEN_RCF_BROADCAST_SINGLE	0xc000  /* single route broadcast */
				
/*
 * A Token-ring frame consists of
 * header +      rif      + llcinfo + fcs
 *  14    + 2 * (0 ... 9) +    x    +  4  octets
 * where llcinfo contains the llcsnap header (8 octets) and the IP frame
 */
					/*  LLC INFO (802.5PD-2) */
#define TOKEN_RCF_FRAME0	0x0000  /*    516    */
#define TOKEN_RCF_FRAME1	0x0010  /*   1500    */
#define TOKEN_RCF_FRAME2	0x0020  /*   2052    */
#define TOKEN_RCF_FRAME3	0x0030  /*   4472    */
#define TOKEN_RCF_FRAME4	0x0040  /*   8144    */
#define TOKEN_RCF_FRAME5	0x0050  /*  11407    */
#define TOKEN_RCF_FRAME6	0x0060  /*  17800    */
#define TOKEN_RCF_FRAME7	0x0070	/*  65535    */
#define TOKEN_RCF_FRAME_MASK	0x0070

#define TOKEN_RCF_DIRECTION	0x0080

/*
 * According to RFC 1042
 */
#define IPMTU_4MBIT_MAX		4464
#define IPMTU_16MBIT_MAX	8188

/*
 * RFC 1042:
 * It is recommended that all implementations support IP packets
 * of at least 2002 octets.
 */
#define ISO88025_MTU 2002

/*
 * This assumes that route information fields are appended to
 * existing structures like llinfo_arp and token_header
 */
#define TOKEN_RIF(x) ((struct token_rif *) ((x) + 1))

/*
 * This is a kludge to get at the token ring mac header and the source route
 * information after m_adj() has been used on the mbuf.
 * Note that m is always an mbuf with a packet header.
 */
#define M_TRHSTART(m) \
	(ALIGN(((m)->m_flags & M_EXT ? (m)->m_ext.ext_buf : &(m)->m_pktdat[0]) \
	    + sizeof (struct token_header)) - sizeof(struct token_header))

#if defined(_KERNEL)
/*
 * XXX we need if_ethersubr.c with all these defines
 */
#define	tokenbroadcastaddr	etherbroadcastaddr
#define	token_ipmulticast_min	ether_ipmulticast_min
#define	token_ipmulticast_max	ether_ipmulticast_max
#define	token_addmulti		ether_addmulti
#define	token_delmulti		ether_delmulti
#define	token_sprintf		ether_sprintf

void    token_ifattach(struct ifnet *);
void	token_input(struct ifnet *, struct mbuf *);
#endif

#endif /* _NET_IF_TOKEN_H_ */