File: /usr/include/linux/if_pppox.h

1     /***************************************************************************
2      * Linux PPP over X - Generic PPP transport layer sockets
3      * Linux PPP over Ethernet (PPPoE) Socket Implementation (RFC 2516) 
4      *
5      * This file supplies definitions required by the PPP over Ethernet driver
6      * (pppox.c).  All version information wrt this file is located in pppox.c
7      *
8      * License:
9      *		This program is free software; you can redistribute it and/or
10      *		modify it under the terms of the GNU General Public License
11      *		as published by the Free Software Foundation; either version
12      *		2 of the License, or (at your option) any later version.
13      *
14      */
15     
16     #ifndef __LINUX_IF_PPPOX_H
17     #define __LINUX_IF_PPPOX_H
18     
19     
20     #include <asm/types.h>
21     #include <asm/byteorder.h>
22     
23     #ifdef  __KERNEL__
24     #include <linux/if_ether.h>
25     #include <linux/if.h>
26     #include <linux/netdevice.h>
27     #include <linux/sched.h>
28     #include <asm/semaphore.h>
29     #include <linux/ppp_channel.h>
30     #endif /* __KERNEL__ */
31     
32     /* For user-space programs to pick up these definitions
33      * which they wouldn't get otherwise without defining __KERNEL__
34      */
35     #ifndef AF_PPPOX
36     #define AF_PPPOX	24
37     #define PF_PPPOX	AF_PPPOX
38     #endif /* !(AF_PPPOX) */
39     
40     /************************************************************************ 
41      * PPPoE addressing definition 
42      */ 
43     typedef __u16 sid_t; 
44     struct pppoe_addr{ 
45            sid_t           sid;                    /* Session identifier */ 
46            unsigned char   remote[ETH_ALEN];       /* Remote address */ 
47            char            dev[IFNAMSIZ];          /* Local device to use */ 
48     }; 
49      
50     /************************************************************************ 
51      * Protocols supported by AF_PPPOX 
52      */ 
53     #define PX_PROTO_OE    0 /* Currently just PPPoE */
54     #define PX_MAX_PROTO   1	
55      
56     struct sockaddr_pppox { 
57            sa_family_t     sa_family;            /* address family, AF_PPPOX */ 
58            unsigned int    sa_protocol;          /* protocol identifier */ 
59            union{ 
60                    struct pppoe_addr       pppoe; 
61            }sa_addr; 
62     }__attribute__ ((packed)); 
63     
64     
65     /*********************************************************************
66      *
67      * ioctl interface for defining forwarding of connections
68      *
69      ********************************************************************/
70     
71     #define PPPOEIOCSFWD	_IOW(0xB1 ,0, sizeof(struct sockaddr_pppox))
72     #define PPPOEIOCDFWD	_IO(0xB1 ,1)
73     /*#define PPPOEIOCGFWD	_IOWR(0xB1,2, sizeof(struct sockaddr_pppox))*/
74     
75     /* Codes to identify message types */
76     #define PADI_CODE	0x09
77     #define PADO_CODE	0x07
78     #define PADR_CODE	0x19
79     #define PADS_CODE	0x65
80     #define PADT_CODE	0xa7
81     struct pppoe_tag {
82     	__u16 tag_type;
83     	__u16 tag_len;
84     	char tag_data[0];
85     } __attribute ((packed));
86     
87     /* Tag identifiers */
88     #define PTT_EOL		__constant_htons(0x0000)
89     #define PTT_SRV_NAME	__constant_htons(0x0101)
90     #define PTT_AC_NAME	__constant_htons(0x0102)
91     #define PTT_HOST_UNIQ	__constant_htons(0x0103)
92     #define PTT_AC_COOKIE	__constant_htons(0x0104)
93     #define PTT_VENDOR 	__constant_htons(0x0105)
94     #define PTT_RELAY_SID	__constant_htons(0x0110)
95     #define PTT_SRV_ERR     __constant_htons(0x0201)
96     #define PTT_SYS_ERR  	__constant_htons(0x0202)
97     #define PTT_GEN_ERR  	__constant_htons(0x0203)
98     
99     struct pppoe_hdr {
100     	__u8 ver : 4;
101     	__u8 type : 4;
102     	__u8 code;
103     	__u16 sid;
104     	__u16 length;
105     	struct pppoe_tag tag[0];
106     } __attribute__ ((packed));
107     
108     #ifdef __KERNEL__
109     
110     struct pppox_proto {
111     	int (*create)(struct socket *sock);
112     	int (*ioctl)(struct socket *sock, unsigned int cmd,
113     		     unsigned long arg);
114     };
115     
116     extern int register_pppox_proto(int proto_num, struct pppox_proto *pp);
117     extern void unregister_pppox_proto(int proto_num);
118     extern void pppox_unbind_sock(struct sock *sk);/* delete ppp-channel binding */
119     extern int pppox_channel_ioctl(struct ppp_channel *pc, unsigned int cmd,
120     			       unsigned long arg);
121     
122     /* PPPoE socket states */
123     enum {
124         PPPOX_NONE		= 0,  /* initial state */
125         PPPOX_CONNECTED	= 1,  /* connection established ==TCP_ESTABLISHED */
126         PPPOX_BOUND		= 2,  /* bound to ppp device */
127         PPPOX_RELAY		= 4,  /* forwarding is enabled */
128         PPPOX_DEAD		= 8
129     };
130     
131     extern struct ppp_channel_ops pppoe_chan_ops;
132     
133     extern int pppox_proto_init(struct net_proto *np);
134     
135     #endif /* __KERNEL__ */
136     
137     #endif /* !(__LINUX_IF_PPPOX_H) */
138