zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

if_pppox.h (4876B) - Raw


      1 /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
      2 /***************************************************************************
      3  * Linux PPP over X - Generic PPP transport layer sockets
      4  * Linux PPP over Ethernet (PPPoE) Socket Implementation (RFC 2516) 
      5  *
      6  * This file supplies definitions required by the PPP over Ethernet driver
      7  * (pppox.c).  All version information wrt this file is located in pppox.c
      8  *
      9  * License:
     10  *		This program is free software; you can redistribute it and/or
     11  *		modify it under the terms of the GNU General Public License
     12  *		as published by the Free Software Foundation; either version
     13  *		2 of the License, or (at your option) any later version.
     14  *
     15  */
     16 
     17 #ifndef __LINUX_IF_PPPOX_H
     18 #define __LINUX_IF_PPPOX_H
     19 
     20 
     21 #include <linux/types.h>
     22 #include <asm/byteorder.h>
     23 
     24 #include <linux/socket.h>
     25 #include <linux/if.h>
     26 #include <linux/if_ether.h>
     27 #include <linux/if_pppol2tp.h>
     28 #include <linux/in.h>
     29 #include <linux/in6.h>
     30 
     31 /* For user-space programs to pick up these definitions
     32  * which they wouldn't get otherwise without defining __KERNEL__
     33  */
     34 #ifndef AF_PPPOX
     35 #define AF_PPPOX	24
     36 #define PF_PPPOX	AF_PPPOX
     37 #endif /* !(AF_PPPOX) */
     38 
     39 /************************************************************************ 
     40  * PPPoE addressing definition 
     41  */ 
     42 typedef __be16 sid_t;
     43 struct pppoe_addr {
     44 	sid_t         sid;                    /* Session identifier */
     45 	unsigned char remote[ETH_ALEN];       /* Remote address */
     46 	char          dev[IFNAMSIZ];          /* Local device to use */
     47 }; 
     48  
     49 /************************************************************************ 
     50  * PPTP addressing definition
     51  */
     52 struct pptp_addr {
     53 	__u16		call_id;
     54 	struct in_addr	sin_addr;
     55 };
     56 
     57 /************************************************************************
     58  * Protocols supported by AF_PPPOX
     59  */
     60 #define PX_PROTO_OE    0 /* Currently just PPPoE */
     61 #define PX_PROTO_OL2TP 1 /* Now L2TP also */
     62 #define PX_PROTO_PPTP  2
     63 #define PX_MAX_PROTO   3
     64 
     65 struct sockaddr_pppox {
     66 	__kernel_sa_family_t sa_family;       /* address family, AF_PPPOX */
     67 	unsigned int    sa_protocol;          /* protocol identifier */
     68 	union {
     69 		struct pppoe_addr  pppoe;
     70 		struct pptp_addr   pptp;
     71 	} sa_addr;
     72 } __attribute__((packed));
     73 
     74 /* The use of the above union isn't viable because the size of this
     75  * struct must stay fixed over time -- applications use sizeof(struct
     76  * sockaddr_pppox) to fill it. We use a protocol specific sockaddr
     77  * type instead.
     78  */
     79 struct sockaddr_pppol2tp {
     80 	__kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
     81 	unsigned int    sa_protocol;    /* protocol identifier */
     82 	struct pppol2tp_addr pppol2tp;
     83 } __attribute__((packed));
     84 
     85 struct sockaddr_pppol2tpin6 {
     86 	__kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
     87 	unsigned int    sa_protocol;    /* protocol identifier */
     88 	struct pppol2tpin6_addr pppol2tp;
     89 } __attribute__((packed));
     90 
     91 /* The L2TPv3 protocol changes tunnel and session ids from 16 to 32
     92  * bits. So we need a different sockaddr structure.
     93  */
     94 struct sockaddr_pppol2tpv3 {
     95 	__kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
     96 	unsigned int    sa_protocol;    /* protocol identifier */
     97 	struct pppol2tpv3_addr pppol2tp;
     98 } __attribute__((packed));
     99 
    100 struct sockaddr_pppol2tpv3in6 {
    101 	__kernel_sa_family_t sa_family; /* address family, AF_PPPOX */
    102 	unsigned int    sa_protocol;    /* protocol identifier */
    103 	struct pppol2tpv3in6_addr pppol2tp;
    104 } __attribute__((packed));
    105 
    106 /*********************************************************************
    107  *
    108  * ioctl interface for defining forwarding of connections
    109  *
    110  ********************************************************************/
    111 
    112 #define PPPOEIOCSFWD	_IOW(0xB1 ,0, size_t)
    113 #define PPPOEIOCDFWD	_IO(0xB1 ,1)
    114 /*#define PPPOEIOCGFWD	_IOWR(0xB1,2, size_t)*/
    115 
    116 /* Codes to identify message types */
    117 #define PADI_CODE	0x09
    118 #define PADO_CODE	0x07
    119 #define PADR_CODE	0x19
    120 #define PADS_CODE	0x65
    121 #define PADT_CODE	0xa7
    122 struct pppoe_tag {
    123 	__be16 tag_type;
    124 	__be16 tag_len;
    125 	char tag_data[];
    126 } __attribute__ ((packed));
    127 
    128 /* Tag identifiers */
    129 #define PTT_EOL		__cpu_to_be16(0x0000)
    130 #define PTT_SRV_NAME	__cpu_to_be16(0x0101)
    131 #define PTT_AC_NAME	__cpu_to_be16(0x0102)
    132 #define PTT_HOST_UNIQ	__cpu_to_be16(0x0103)
    133 #define PTT_AC_COOKIE	__cpu_to_be16(0x0104)
    134 #define PTT_VENDOR 	__cpu_to_be16(0x0105)
    135 #define PTT_RELAY_SID	__cpu_to_be16(0x0110)
    136 #define PTT_SRV_ERR     __cpu_to_be16(0x0201)
    137 #define PTT_SYS_ERR  	__cpu_to_be16(0x0202)
    138 #define PTT_GEN_ERR  	__cpu_to_be16(0x0203)
    139 
    140 struct pppoe_hdr {
    141 #if defined(__LITTLE_ENDIAN_BITFIELD)
    142 	__u8 type : 4;
    143 	__u8 ver : 4;
    144 #elif defined(__BIG_ENDIAN_BITFIELD)
    145 	__u8 ver : 4;
    146 	__u8 type : 4;
    147 #else
    148 #error	"Please fix <asm/byteorder.h>"
    149 #endif
    150 	__u8 code;
    151 	__be16 sid;
    152 	__be16 length;
    153 	struct pppoe_tag tag[];
    154 } __attribute__((packed));
    155 
    156 /* Length of entire PPPoE + PPP header */
    157 #define PPPOE_SES_HLEN	8
    158 
    159 
    160 #endif /* __LINUX_IF_PPPOX_H */