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