Added sample rpld.conf file to load gPXE
[rpld.git] / rpl.h
1 /*************************************************
2 *     rpld - an IBM style RIPL server            *
3 *************************************************/
4
5 /* Copyright (c) 1999,2000, James McKenzie.
6  *                      All rights reserved
7  * Copyright (c) 1998,2000, Christopher Lightfoot.
8  *                      All rights reserved
9  *
10  * By using this file, you agree to the terms and conditions set
11  * forth in the LICENCE file which can be found at the top level of
12  * the rpld distribution.
13  *
14  * IBM is a trademark of IBM corp.
15  *
16  */
17
18
19
20 /*
21  * $Id: rpl.h,v 1.12 2000/07/29 23:25:25 root Exp $
22  *
23  * $Log: rpl.h,v $
24  * Revision 1.12  2000/07/29 23:25:25  root
25  * #
26  *
27  * Revision 1.11  2000/07/17 10:43:34  root
28  * #
29  *
30  * Revision 1.10  2000/07/16 14:05:28  root
31  * #
32  *
33  * Revision 1.9  2000/07/16 13:18:10  root
34  * #
35  *
36  * Revision 1.1  2000/07/16 13:16:33  root
37  * #
38  *
39  * Revision 1.8  1999/09/13 11:17:35  root
40  * \#
41  *
42  * Revision 1.7  1999/09/13 11:05:27  root
43  * \#
44  *
45  * Revision 1.6  1999/09/13 11:04:13  root
46  * \#
47  *
48  * Revision 1.5  1999/09/13 11:04:13  root
49  * \#
50  *  
51  */
52
53
54 typedef unsigned int u32;
55 typedef unsigned short int u16;
56 typedef unsigned char u8;
57
58
59 #define LLC_RPL_OVERHEAD 0x30
60
61 #define RPL_SAP         0xfc
62
63 #define RPL_PK_FIND     0x0001
64 #define RPL_PK_FOUND    0x0002
65 #define RPL_PK_SENDFILE 0x0010
66 #define RPL_PK_FILEDATA 0x0020
67
68 #define RPL_IS_TOKEN(a) (a & 0xc000)
69
70 #define RPL_TK_TMZ      0x4003
71 #define RPL_TK_MYMAC    0x4006
72 #define RPL_TK_SAP      0x4007
73 #define RPL_TK_FRAMELEN 0x4009
74 #define RPL_TK_WHOAMI   0x400a
75 #define RPL_TK_TSZ      0x400b
76 #define RPL_TK_YOUMAC   0x400c
77 #define RPL_TK_BLOCK    0x4011
78 #define RPL_TK_DATA     0x4018
79 #define RPL_TK_IDENT    0xc005
80 #define RPL_TK_ADDR     0xc014
81
82 #define RPL_FL_TMZ      (1L << 0)
83 #define RPL_FL_MYMAC    (1L << 1)
84 #define RPL_FL_SAP      (1L << 2)
85 #define RPL_FL_FRAMELEN (1L << 3)
86 #define RPL_FL_WHOAMI   (1L << 4)
87 #define RPL_FL_TSZ      (1L << 5)
88 #define RPL_FL_YOUMAC   (1L << 6)
89 #define RPL_FL_BLOCK    (1L << 7)
90 #define RPL_FL_DATA     (1L << 8)
91 #define RPL_FL_IDENT    (1L << 9)
92 #define RPL_FL_ADDR     (1L << 10)
93
94 #define RPL_AD_FLAGS_ASK_MORE   0x10
95 #define RPL_AD_FLAGS_MORE       0x20
96 #define RPL_AD_FLAGS_DONE       0xc0
97
98 #define RPL_FIND_FLAGS (RPL_FL_FRAMELEN|RPL_FL_MYMAC|RPL_FL_IDENT|RPL_FL_TMZ)
99
100 #define RPL_FOUND_FLAGS (RPL_FL_TMZ | RPL_FL_TSZ | RPL_FL_YOUMAC | RPL_FL_MYMAC | RPL_FL_FRAMELEN | RPL_FL_WHOAMI | RPL_FL_SAP)
101
102 #define RPL_SEND_FILE_FLAGS (RPL_FL_BLOCK | RPL_FL_FRAMELEN | RPL_FL_MYMAC)
103
104 #define RPL_FILE_DATA_FLAGS (RPL_FL_BLOCK | RPL_FL_ADDR | RPL_FL_DATA)
105
106 struct addr_block
107 {
108   u32 load;
109   u32 run;
110   u32 flags;
111 };
112
113 #define MAX_DATA_LEN MAX_FRAME_LEN
114 #define MAX_IDENT_LEN MAX_FRAME_LEN
115
116 struct rpl_packet
117 {
118   int flags;
119
120   int type;
121
122   u32 themightyzero;
123   u8 mymac[ETH_ALEN];
124   u8 sap;
125   u16 framelen;
126   u16 whoami;
127   u16 thesmallzero;
128   u8 youmac[ETH_ALEN];
129   u32 block;
130   u8 data[MAX_DATA_LEN];
131   int datalen;
132
133   u8 ident[MAX_IDENT_LEN];
134   int identlen;
135
136   struct addr_block addr;
137 };