File: netdev.h

package info (click to toggle)
klibc 2.0.4-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-backports, jessie-kfreebsd
  • size: 5,376 kB
  • ctags: 7,412
  • sloc: ansic: 48,256; asm: 2,532; perl: 781; makefile: 197; sh: 152
file content (86 lines) | stat: -rw-r--r-- 2,493 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#ifndef IPCONFIG_NETDEV_H
#define IPCONFIG_NETDEV_H

#include <sys/utsname.h>
#include <net/if.h>

#define BPLEN		256
#define FNLEN		128			/* from DHCP  RFC 2131 */

struct netdev {
	const char *name;	/* Device name          */
	unsigned int ifindex;	/* interface index      */
	unsigned int hwtype;	/* ARPHRD_xxx           */
	unsigned int hwlen;	/* HW address length    */
	uint8_t hwaddr[16];	/* HW address           */
	uint8_t hwbrd[16];	/* Broadcast HW address */
	unsigned int mtu;	/* Device mtu           */
	unsigned int caps;	/* Capabilities         */
	time_t open_time;

	struct {		/* BOOTP/DHCP info      */
		int fd;
		uint32_t xid;
		uint32_t gateway; /* BOOTP/DHCP gateway   */
	} bootp;

	struct {		/* RARP information     */
		int fd;
	} rarp;

	uint8_t proto;          /* a protocol used (e.g. PROTO_DHCP) */
	uint32_t ip_addr;	/* my address           */
	uint32_t ip_broadcast;	/* broadcast address    */
	uint32_t ip_server;	/* server address       */
	uint32_t ip_netmask;	/* my subnet mask       */
	uint32_t ip_gateway;	/* my gateway           */
	uint32_t ip_nameserver[2];	/* two nameservers      */
	uint32_t serverid;		/* dhcp serverid        */
	uint32_t dhcpleasetime;	/* duration in seconds  */
	char reqhostname[SYS_NMLN];	/* requested hostname   */
	char hostname[SYS_NMLN];	/* hostname             */
	char dnsdomainname[SYS_NMLN];	/* dns domain name      */
	char nisdomainname[SYS_NMLN];	/* nis domain name      */
	char bootpath[BPLEN];	/* boot path            */
	char filename[FNLEN];   /* filename             */
	char *domainsearch;	/* decoded, NULL or malloc-ed  */
	long uptime;		/* when complete configuration */
	struct netdev *next;	/* next configured i/f  */
};

extern struct netdev *ifaces;

/*
 * Device capabilities
 */
#define CAP_BOOTP	(1<<0)
#define CAP_DHCP	(1<<1)
#define CAP_RARP	(1<<2)

/*
 * Device states
 */
#define DEVST_UP	0
#define DEVST_BOOTP	1
#define DEVST_DHCPDISC	2
#define DEVST_DHCPREQ	3
#define DEVST_COMPLETE	4
#define DEVST_ERROR	5

int netdev_getflags(struct netdev *dev, short *flags);
int netdev_setaddress(struct netdev *dev);
int netdev_setdefaultroute(struct netdev *dev);
int netdev_up(struct netdev *dev);
int netdev_down(struct netdev *dev);
int netdev_init_if(struct netdev *dev);
int netdev_setmtu(struct netdev *dev);

static inline int netdev_running(struct netdev *dev)
{
	short flags;
	int ret = netdev_getflags(dev, &flags);

	return ret ? 0 : !!(flags & IFF_RUNNING);
}

#endif /* IPCONFIG_NETDEV_H */