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

📄 nethub.h

📁 This a good VPN source
💻 H
字号:
/* * @(#) jig to exercise a UML/FreeSWAN kernel with two interfaces * * Copyright (C) 2001 Michael Richardson  <mcr@freeswan.org> *  * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License * for more details. * * RCSID $Id: nethub.h,v 1.7 2003/04/02 20:25:53 mcr Exp $ * * @(#) based upon uml_router from User-Mode-Linux tools package * */#ifndef _NETHUB_H_#include <net/ethernet.h>#include <sys/socket.h>#include <sys/un.h>#include <sys/queue.h>#include <netinet/in.h>#include "pcap.h"enum request_type { REQ_NEW_CONTROL };struct request_v0 {  enum request_type type;  union {    struct {      unsigned char addr[ETH_ALEN];      struct sockaddr_un name;    } new_control;  } u;};#define SWITCH_MAGIC 0xfeedfacestruct request_v1 {  unsigned long magic;  enum request_type type;  union {    struct {      unsigned char addr[ETH_ALEN];      struct sockaddr_un name;    } new_control;  } u;};struct request_v2 {  unsigned long magic;  int version;  enum request_type type;  struct sockaddr_un sock;};struct reply_v2 {  unsigned char mac[ETH_ALEN];  struct sockaddr_un sock;};struct request_v3 {  unsigned long magic;  int version;  enum request_type type;  struct sockaddr_un sock;};union request {  struct request_v0 v0;  struct request_v1 v1;  struct request_v2 v2;  struct request_v3 v3;};#define HASH_SIZE 128#define HASH_MOD 11struct port;struct nethub {	TAILQ_ENTRY(nethub)     nh_link;	TAILQ_HEAD(,port)  nh_ports;	char              *nh_name;	unsigned char      nh_defaultether[ETH_ALEN];	struct in_addr     nh_defaultgate;	int                nh_allarp;	char              *nh_outputFile;	pcap_dumper_t     *nh_output;	int                nh_rate;	char              *nh_inputFile;	pcap_t            *nh_input;	int                nh_hub;	int                nh_compat_v0;	char              *socket_dir;	char              *pid_file_name;	char              *ctl_socket_name_env;   /* do not free this one */	char              *ctl_socket_name;	int                ctl_listen_fd;	char              *data_socket_name_env;  /* do not free this one */	char              *data_socket_name;	struct sockaddr_un data_sun;	int                data_fd;	int                tap_fd;	struct hash_entry *h[HASH_SIZE];};#define CMDBUF_LEN 256struct netjig_state {	int   done;	int   debug;	int   verbose;        int   waitplay;	char *socketbasedir;	char *startup;	char *playprivatefile;	char *recordprivatefile;	char *playpublicfile;	char *recordpublicfile;	int arpreply;	int cmdproto;	int forcetick;   /* if set to 1, then a packet will be sent out */	int packetrate;  /* how many miliseconds between packets */	FILE *cmdproto_out;	int exitonempty;	TAILQ_HEAD(,nethub) switches;	/* stuff to keep track of the sources of input */	struct pollfd *fds;        /* array of input sources */	int            nfds;       /* number of relevant entries */	int            max_fds;    /* current size of the array */	/* poll(2) doesn't provide a very useful interface to figure out what	 * fd belongs to what event, and searching through stuff sucks, we	 * we keep a mapping of fd# -> poll descriptor entry. We then walk through	 * the set of possible inputs, (in the appropriate priority order) and	 * use this array to map to an entry in fds[] to see if this input has	 * activity.	 */	int            *fd_array;	int             fd_array_size;  /* so we can grow it in add_fd() */	/* keep track of curtent input buffer, since we predict that eventuallyu	 * command sizes will grow such that they do not always fit into a single	 * read(2), or that multiple commands may get coalesced into a single buffer.	 */	char cmdbuf[CMDBUF_LEN];	int  cmdloc;	int  cmdskip;	int  cmdlaststat;         /* 0= success */};struct packet {  struct {    unsigned char dest[6];    unsigned char src[6];    u_int16_t     proto;  } header;  unsigned char data[1500];};/* in nethub.c */extern struct nethub *init_nethub(struct netjig_state *ns,				  char *switchname,				  char *data_socket, char *ctl_socket,				  int compat_v0);extern void bind_sockets(struct nethub *nh);extern void cleanup_nh(struct nethub *nh);extern struct nethub *find_nethubbyname(struct netjig_state *ns, char *name);extern void add_fd(struct netjig_state *ns, int fd);extern void remove_fd(struct netjig_state *ns, int fd);extern void close_descriptor(struct netjig_state *ns,			     struct nethub       *nh,			     int fd);#define xmalloc(X) xmalloc1((X), __FILE__, __LINE__)#ifdef NETDISSECT#include "netdissect.h"extern struct netdissect_options gndo;extern int tcpdump_print;#endif#define _NETHUB_H_#endif /* _NETHUB_H_ *//* * $Log: nethub.h,v $ * Revision 1.7  2003/04/02 20:25:53  mcr * 	quiet down uml_netjig unless -v or $NETJIGVERBOSE is set. * * Revision 1.6  2003/04/02 02:15:59  mcr * 	added option to set packet replay rate. * * Revision 1.5  2002/11/07 22:18:09  mcr * 	use proper #define for ethernet length. * * Revision 1.4  2002/08/30 01:37:35  mcr * 	double buffered the poll(2) structures so that changes during * 	use would not affect the system. * 	changed fd_array to be indirect references so that the poll(2) * 	loop could more easily double buffer the structures. * * Revision 1.3  2002/07/21 16:40:34  mcr * 	clean pid file upon exit, so that directories can be removed * 	properly. Free up memory that was allocated for the hub. * 	switch to using mkstemp instead of tmpname for directory * 	creation - append .d to the generated name. (still not race safe!) * 	when freeing the hubs, take care not to reference free'ed memory. * * Revision 1.2  2002/07/17 03:59:46  mcr * 	debugged uml_switch - added "-name" option. * * Revision 1.1  2002/07/14 02:48:48  mcr * 	first version of merged uml_switch/uml_netjig that compiles. * * * Local variables: * c-file-style: "linux" * c-basic-offset: 8 * End: * */

⌨️ 快捷键说明

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