RTEMS CPU Kit with SuperCore  4.11.3
if_pppvar.h
Go to the documentation of this file.
1 /*
2  * if_pppvar.h - private structures and declarations for PPP.
3  *
4  * Copyright (c) 1994 The Australian National University.
5  * All rights reserved.
6  *
7  * Permission to use, copy, modify, and distribute this software and its
8  * documentation is hereby granted, provided that the above copyright
9  * notice appears in all copies. This software is provided without any
10  * warranty, express or implied. The Australian National University
11  * makes no representations about the suitability of this software for
12  * any purpose.
13  *
14  * IN NO EVENT SHALL THE AUSTRALIAN NATIONAL UNIVERSITY BE LIABLE TO ANY
15  * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
16  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
17  * THE AUSTRALIAN NATIONAL UNIVERSITY HAVE BEEN ADVISED OF THE POSSIBILITY
18  * OF SUCH DAMAGE.
19  *
20  * THE AUSTRALIAN NATIONAL UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
21  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
22  * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
23  * ON AN "AS IS" BASIS, AND THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO
24  * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
25  * OR MODIFICATIONS.
26  *
27  * Copyright (c) 1989 Carnegie Mellon University.
28  * All rights reserved.
29  *
30  * Redistribution and use in source and binary forms are permitted
31  * provided that the above copyright notice and this paragraph are
32  * duplicated in all such forms and that any documentation,
33  * advertising materials, and other materials related to such
34  * distribution and use acknowledge that the software was developed
35  * by Carnegie Mellon University. The name of the
36  * University may not be used to endorse or promote products derived
37  * from this software without specific prior written permission.
38  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
39  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
40  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
41  *
42  * $FreeBSD: src/sys/net/if_pppvar.h,v 1.26 2006/12/05 18:54:21 ume Exp $
43  */
44 
45 
46 #ifndef _NET_IF_PPPVAR_H_
47 #define _NET_IF_PPPVAR_H_
48 
49 #include <net/if_var.h> /* struct ifnet */
50 #include <net/ppp_defs.h> /* struct pppstat */
51 #include <rtems/rtems/types.h> /* rtems_id */
52 
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56 
57 struct proc;
58 
59 /*
60  * Supported network protocols. These values are used for
61  * indexing sc_npmode.
62  */
63 #define NP_IP 0 /* Internet Protocol */
64 #define NUM_NP 1 /* Number of NPs. */
65 #define NUM_MBUFQ 64
66 
67 
68 /*
69  * Structure describing each ppp unit.
70  */
71 struct ppp_softc {
72  struct ifnet sc_if; /* network-visible interface */
73  u_int sc_flags; /* control/status bits; see if_ppp.h */
74  void *sc_devp; /* pointer to device-dep structure */
75  void (*sc_start)(struct ppp_softc *); /* start output proc */
76  void (*sc_ctlp)(struct ppp_softc *); /* rcvd control pkt */
77  void (*sc_relinq)(struct ppp_softc *); /* relinquish ifunit */
78  short sc_mru; /* max receive unit */
79  pid_t sc_xfer; /* used in transferring unit */
80  struct ifqueue sc_rawq; /* received packets */
81  struct ifqueue sc_inq; /* queue of input packets for daemon */
82  struct ifqueue sc_fastq; /* interactive output packet q */
83  struct mbuf *sc_npqueue; /* output packets not to be sent yet */
84  struct mbuf **sc_npqtail; /* ptr to last next ptr in npqueue */
85  struct pppstat sc_stats; /* count of bytes/pkts sent/rcvd */
86  caddr_t sc_bpf; /* hook for BPF */
87  enum NPmode sc_npmode[NUM_NP]; /* what to do with each NP */
88  struct compressor *sc_xcomp; /* transmit compressor */
89  void *sc_xc_state; /* transmit compressor state */
90  struct compressor *sc_rcomp; /* receive decompressor */
91  void *sc_rc_state; /* receive decompressor state */
92  time_t sc_last_sent; /* time (secs) last NP pkt sent */
93  time_t sc_last_recv; /* time (secs) last NP pkt rcvd */
94 #ifdef PPP_FILTER
95  struct bpf_program sc_pass_filt; /* filter for packets to pass */
96  struct bpf_program sc_active_filt; /* filter for "non-idle" packets */
97 #endif /* PPP_FILTER */
98 #ifdef VJC
99  struct vjcompress *sc_comp; /* vjc control buffer */
100 #endif
101 
102  /* Device-dependent part for async lines. */
103  ext_accm sc_asyncmap; /* async control character map */
104  u_long sc_rasyncmap; /* receive async control char map */
105  struct mbuf *sc_outm; /* mbuf chain currently being output */
106  struct mbuf *sc_outmc; /* mbuf currently being output */
107  struct mbuf *sc_m; /* pointer to input mbuf chain */
108  struct mbuf *sc_mc; /* pointer to current input mbuf */
109  char *sc_mp; /* ptr to next char in input mbuf */
110  short sc_ilen; /* length of input packet so far */
111  u_short sc_fcs; /* FCS so far (input) */
112  u_short sc_outfcs; /* FCS so far for output packet */
113  u_char sc_rawin[16]; /* chars as received */
114  int sc_rawin_count; /* # in sc_rawin */
115 
116  struct ifqueue sc_freeq; /* free packets */
117  short sc_outoff; /* output packet byte offset */
118  short sc_outflag; /* output status flag */
119  short sc_outlen; /* length of output packet */
120  short sc_outfcslen; /* length of output fcs data */
121  u_char sc_outfcsbuf[8]; /* output packet fcs buffer */
122  u_char *sc_outbuf; /* pointer to output data */
123  u_char sc_outchar;
124 
125  rtems_id sc_rxtask;
126  rtems_id sc_txtask;
127  rtems_id sc_pppdtask;
128 };
129 
130 struct ppp_softc *pppalloc(pid_t pid);
131 void pppdealloc(struct ppp_softc *sc);
132 int pppoutput(struct ifnet *, struct mbuf *,
133  struct sockaddr *, struct rtentry *);
134 int pppioctl(struct ppp_softc *sc, ioctl_command_t cmd, caddr_t data,
135  int flag, struct proc *p);
136 struct mbuf *ppp_dequeue(struct ppp_softc *sc);
137 u_short pppfcs(u_short fcs, u_char *cp, int len);
138 void pppallocmbuf(struct ppp_softc *sc, struct mbuf **mp);
139 
140 
141 /* define event values */
142 #define RX_PACKET RTEMS_EVENT_1
143 #define RX_MBUF RTEMS_EVENT_2
144 #define RX_EMPTY RTEMS_EVENT_3
145 #define TX_PACKET RTEMS_EVENT_1
146 #define TX_TRANSMIT RTEMS_EVENT_2
147 #define PPPD_EVENT RTEMS_EVENT_31
148 
149 /* define out flag values */
150 #define SC_TX_BUSY 0x0001
151 #define SC_TX_FCS 0x0002
152 #define SC_TX_ESCAPE 0x0004
153 #define SC_TX_LASTCHAR 0x0008
154 #define SC_TX_PENDING 0x0010
155 
156 #ifdef __cplusplus
157 }
158 #endif
159 
160 #endif /* _NET_IF_PPPVAR_H_ */
161 
Objects_Id rtems_id
Used to manage and manipulate RTEMS object identifiers.
Definition: types.h:80
Definition: proc.h:5
Definition: bpf.h:68
Definition: if_var.h:86
Definition: socket.h:180
Definition: if_var.h:99
Definition: mbuf.h:103
Definition: ppp_defs.h:103
Definition: if_pppvar.h:72
Definition: route.h:104