http://gimel.esc.cam.ac.uk/james/rpld/src/rpld-1.6.tar.gz
[rpld.git] / llc.c
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 static char rcsid[] = "$Id: llc.c,v 1.10 2000/07/17 11:59:45 root Exp $";
20
21 /*
22  * $Log: llc.c,v $
23  * Revision 1.10  2000/07/17 11:59:45  root
24  * #
25  *
26  * Revision 1.9  2000/07/17 10:43:34  root
27  * #
28  *
29  * Revision 1.8  2000/07/16 14:05:28  root
30  * #
31  *
32  * Revision 1.7  2000/07/16 13:18:10  root
33  * #
34  *
35  * Revision 1.1  2000/07/16 13:16:33  root
36  * #
37  *
38  * Revision 1.6  1999/09/13 11:17:35  root
39  * \#
40  *
41  * Revision 1.5  1999/09/13 11:05:27  root
42  * \#
43  *
44  * Revision 1.4  1999/09/13 11:04:13  root
45  * \#
46  *
47  */
48
49
50
51 #include "project.h"
52
53 void
54 send_llc_frame (struct nit *n, unsigned char dsap, unsigned char ssap,
55                 unsigned char *dmac, unsigned char *ibuf, int len)
56 {
57   unsigned char buf[MAX_FRAME_LEN];
58   struct llchdr *h = (struct llchdr *) buf;
59
60   bcopy (dmac, h->h_dest, ETH_ALEN);
61   bcopy (nit_mac (n), h->h_source, ETH_ALEN);
62
63   h->h_len = htons (len + LLC_SAP_LEN);
64
65   h->h_dsap = dsap;
66   h->h_ssap = ssap;
67   h->h_flags = LLC_UIC;
68
69   bcopy (ibuf, buf + LLC_HDR_LEN, len);
70
71   len += LLC_HDR_LEN;
72   nit_send_frame (n, buf, len);
73 }
74
75 void
76 llc_recv_packet (struct nit *n, unsigned char *buf, int len)
77 {
78   struct llchdr *h = (struct llchdr *) buf;
79   int llclen;
80
81   if ((h->h_dsap == RPL_SAP) && (h->h_ssap == RPL_SAP))
82     {
83
84       llclen = ntohs (h->h_len);
85
86 #ifdef DEBUG
87       printf ("dest: %s ", ethtoa (&h->h_dest));
88       printf ("source: %s ", ethtoa (&h->h_source));
89       printf ("len: 0x%04x ", llclen);
90       printf ("dsap:%02x ssap:%02x flags:%02x \n", h->h_dsap, h->h_ssap,
91               h->h_flags);
92 #endif
93
94       rpl_packet_recvd (n, buf + LLC_HDR_LEN, llclen - LLC_SAP_LEN);
95
96     }
97
98 }