1/*
2 * Copyright 2003-2004, Waldemar Kornewald <wkornew@gmx.net>
3 * Distributed under the terms of the MIT License.
4 */
5
6#ifndef PPPoE__H
7#define PPPoE__H
8
9#include <SupportDefs.h>
10#include <net/if.h>
11
12#include <ethernet.h>
13#include <ether_driver.h>
14#include <net_stack.h>
15
16class PPPoEDevice;
17
18#define B_NET_FRAME_TYPE_PPPOE	B_NET_FRAME_TYPE(IFT_ETHER, ETHER_TYPE_PPPOE)
19#define B_NET_FRAME_TYPE_PPPOE_DISCOVERY B_NET_FRAME_TYPE(IFT_ETHER, ETHER_TYPE_PPPOE_DISCOVERY)
20
21#define PPPoE_QUERY_REPORT_SIZE	2048
22#define PPPoE_QUERY_REPORT		'PoEQ'
23	// the code value used for query reports
24
25#define PPPoE_HEADER_SIZE		6
26	// without ethernet header
27#define PPPoE_TIMEOUT			3000000
28	// 3 seconds
29#define PPPoE_MAX_ATTEMPTS		2
30	// maximum number of PPPoE's connect-retries
31
32#define PPPoE_VERSION			0x1
33#define PPPoE_TYPE				0x1
34
35#define PPPoE_INTERFACE_KEY		"Interface"
36#define PPPoE_AC_NAME_KEY		"ACName"
37#define PPPoE_SERVICE_NAME_KEY	"ServiceName"
38
39enum pppoe_ops {
40	PPPoE_GET_INTERFACES,
41	PPPoE_QUERY_SERVICES
42};
43
44typedef struct pppoe_query_request {
45	const char *interfaceName;
46	thread_id receiver;
47} pppoe_query_request;
48
49extern struct core_module_info *core;
50
51
52typedef struct pppoe_header {
53	uint8 version : 4;
54	uint8 type : 4;
55	uint8 code;
56	uint16 sessionID;
57	uint16 length;
58	uint8 data[0];
59} _PACKED pppoe_header;
60
61typedef struct complete_pppoe_header {
62	struct ether_header ethernetHeader;
63	pppoe_header pppoeHeader;
64} complete_pppoe_header;
65
66
67// defined in pppoe.cpp
68extern net_device *FindPPPoEInterface(const char *name);
69extern uint32 NewHostUniq();
70extern void add_device(PPPoEDevice *device);
71extern void remove_device(PPPoEDevice *device);
72
73#if DEBUG
74// defined in PPPoEDevice.cpp
75extern void dump_packet(net_buffer *packet);
76#endif // DEBUG
77
78
79#endif
80