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