]> git.lizzy.rs Git - plan9front.git/blob - sys/src/9/ip/pktmedium.c
ip/pktmedium: fix wrong hsize, theres no ethernet header on packet media
[plan9front.git] / sys / src / 9 / ip / pktmedium.c
1 #include "u.h"
2 #include "../port/lib.h"
3 #include "mem.h"
4 #include "dat.h"
5 #include "fns.h"
6 #include "../port/error.h"
7
8 #include "ip.h"
9
10
11 static void     pktbind(Ipifc*, int, char**);
12 static void     pktunbind(Ipifc*);
13 static void     pktbwrite(Ipifc*, Block*, int, uchar*);
14 static void     pktin(Fs*, Ipifc*, Block*);
15
16 Medium pktmedium =
17 {
18 .name=          "pkt",
19 .hsize=         0,
20 .mintu=         40,
21 .maxtu=         4*1024,
22 .maclen=        6,
23 .bind=          pktbind,
24 .unbind=        pktunbind,
25 .bwrite=        pktbwrite,
26 .pktin=         pktin,
27 };
28
29 /*
30  *  called to bind an IP ifc to an packet device
31  *  called with ifc wlock'd
32  */
33 static void
34 pktbind(Ipifc*, int argc, char **argv)
35 {
36         USED(argc, argv);
37 }
38
39 /*
40  *  called with ifc wlock'd
41  */
42 static void
43 pktunbind(Ipifc*)
44 {
45 }
46
47 /*
48  *  called by ipoput with a single packet to write
49  */
50 static void
51 pktbwrite(Ipifc *ifc, Block *bp, int, uchar*)
52 {
53         /* enqueue onto the conversation's rq */
54         if(ifc->conv->snoopers.ref > 0)
55                 qpass(ifc->conv->sq, copyblock(bp, BLEN(bp)));
56         qpass(ifc->conv->rq, bp);
57 }
58
59 /*
60  *  called with ifc rlocked when someone write's to 'data'
61  */
62 static void
63 pktin(Fs *f, Ipifc *ifc, Block *bp)
64 {
65         if(ifc->lifc == nil)
66                 freeb(bp);
67         else {
68                 if(ifc->conv->snoopers.ref > 0)
69                         qpass(ifc->conv->sq, copyblock(bp, BLEN(bp)));
70                 ipiput4(f, ifc, bp);
71         }
72 }
73
74 void
75 pktmediumlink(void)
76 {
77         addipmedium(&pktmedium);
78 }