OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [LINUX_2_4_26_OR32/] [linux/] [linux-2.4/] [include/] [linux/] [if_pppox.h] - Blame information for rev 1275

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/***************************************************************************
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
#if defined(__LITTLE_ENDIAN_BITFIELD)
101
        __u8 ver : 4;
102
        __u8 type : 4;
103
#elif defined(__BIG_ENDIAN_BITFIELD)
104
        __u8 type : 4;
105
        __u8 ver : 4;
106
#else
107
#error  "Please fix <asm/byteorder.h>"
108
#endif
109
        __u8 code;
110
        __u16 sid;
111
        __u16 length;
112
        struct pppoe_tag tag[0];
113
} __attribute__ ((packed));
114
 
115
#ifdef __KERNEL__
116
 
117
struct pppox_proto {
118
        int (*create)(struct socket *sock);
119
        int (*ioctl)(struct socket *sock, unsigned int cmd,
120
                     unsigned long arg);
121
};
122
 
123
extern int register_pppox_proto(int proto_num, struct pppox_proto *pp);
124
extern void unregister_pppox_proto(int proto_num);
125
extern void pppox_unbind_sock(struct sock *sk);/* delete ppp-channel binding */
126
extern int pppox_channel_ioctl(struct ppp_channel *pc, unsigned int cmd,
127
                               unsigned long arg);
128
 
129
/* PPPoX socket states */
130
enum {
131
    PPPOX_NONE          = 0,  /* initial state */
132
    PPPOX_CONNECTED     = 1,  /* connection established ==TCP_ESTABLISHED */
133
    PPPOX_BOUND         = 2,  /* bound to ppp device */
134
    PPPOX_RELAY         = 4,  /* forwarding is enabled */
135
    PPPOX_ZOMBIE        = 8,  /* dead, but still bound to ppp device */
136
    PPPOX_DEAD          = 16  /* dead, useless, please clean me up!*/
137
};
138
 
139
extern struct ppp_channel_ops pppoe_chan_ops;
140
 
141
extern int pppox_proto_init(struct net_proto *np);
142
 
143
#endif /* __KERNEL__ */
144
 
145
#endif /* !(__LINUX_IF_PPPOX_H) */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.