⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 relay.h

📁 网上的一个开源代码
💻 H
字号:
/************************************************************************ relay.h** Definitions for PPPoE relay** Copyright (C) 2001-2005 Roaring Penguin Software Inc.** This program may be distributed according to the terms of the GNU* General Public License, version 2 or (at your option) any later version.** LIC: GPL** $Id: relay.h,v 1.12 2005/08/10 00:25:21 dfs Exp $************************************************************************/#include "pppoe.h"/* Description for each active Ethernet interface */typedef struct InterfaceStruct {    char name[IFNAMSIZ+1];	/* Interface name */    int discoverySock;		/* Socket for discovery frames */    int sessionSock;		/* Socket for session frames */    int clientOK;		/* Client requests allowed (PADI, PADR) */    int acOK;			/* AC replies allowed (PADO, PADS) */    unsigned char mac[ETH_ALEN]; /* MAC address */} PPPoEInterface;/* Session state for relay */struct SessionHashStruct;typedef struct SessionStruct {    struct SessionStruct *next;	/* Free list link */    struct SessionStruct *prev;	/* Free list link */    struct SessionHashStruct *acHash; /* Hash bucket for AC MAC/Session */    struct SessionHashStruct *clientHash; /* Hash bucket for client MAC/Session */    unsigned int epoch;		/* Epoch when last activity was seen */    UINT16_t sesNum;		/* Session number assigned by relay */} PPPoESession;/* Hash table entry to find sessions */typedef struct SessionHashStruct {    struct SessionHashStruct *next; /* Link in hash chain */    struct SessionHashStruct *prev; /* Link in hash chain */    struct SessionHashStruct *peer; /* Peer for this session */    PPPoEInterface const *interface;	/* Interface */    unsigned char peerMac[ETH_ALEN]; /* Peer's MAC address */    UINT16_t sesNum;		/* Session number */    PPPoESession *ses;		/* Session data */} SessionHash;/* Function prototypes */void relayGotSessionPacket(PPPoEInterface const *i);void relayGotDiscoveryPacket(PPPoEInterface const *i);PPPoEInterface *findInterface(int sock);unsigned int hash(unsigned char const *mac, UINT16_t sesNum);SessionHash *findSession(unsigned char const *mac, UINT16_t sesNum);void deleteHash(SessionHash *hash);PPPoESession *createSession(PPPoEInterface const *ac,			    PPPoEInterface const *cli,			    unsigned char const *acMac,			    unsigned char const *cliMac,			    UINT16_t acSes);void freeSession(PPPoESession *ses, char const *msg);void addInterface(char const *ifname, int clientOK, int acOK);void usage(char const *progname);void initRelay(int nsess);void relayLoop(void);void addHash(SessionHash *sh);void unhash(SessionHash *sh);void relayHandlePADT(PPPoEInterface const *iface, PPPoEPacket *packet, int size);void relayHandlePADI(PPPoEInterface const *iface, PPPoEPacket *packet, int size);void relayHandlePADO(PPPoEInterface const *iface, PPPoEPacket *packet, int size);void relayHandlePADR(PPPoEInterface const *iface, PPPoEPacket *packet, int size);void relayHandlePADS(PPPoEInterface const *iface, PPPoEPacket *packet, int size);int addTag(PPPoEPacket *packet, PPPoETag const *tag);int insertBytes(PPPoEPacket *packet, unsigned char *loc,		void const *bytes, int length);int removeBytes(PPPoEPacket *packet, unsigned char *loc,		int length);void relaySendError(unsigned char code,		    UINT16_t session,		    PPPoEInterface const *iface,		    unsigned char const *mac,		    PPPoETag const *hostUniq,		    char const *errMsg);void alarmHandler(int sig);void cleanSessions(void);#define MAX_INTERFACES 8#define DEFAULT_SESSIONS 5000/* Hash table size -- a prime number; gives load factor of around 6   for 65534 sessions */#define HASHTAB_SIZE 18917

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -