summaryrefslogtreecommitdiff
path: root/ext/dnet/intf.h
blob: 38acd43560eceb4c40a9f1383f52d024605f79fa (plain)
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
/*
 * intf.c
 *
 * Network interface operations.
 *
 * Copyright (c) 2000 Dug Song <dugsong@monkey.org>
 *
 * $Id: intf.h,v 1.16 2004/01/13 07:41:09 dugsong Exp $
 */

#ifndef DNET_INTF_H
#define DNET_INTF_H

/*
 * Interface entry
 */
#define INTF_NAME_LEN	16

struct intf_entry {
        u_int		intf_len;		    /* length of entry */
        char		intf_name[INTF_NAME_LEN];   /* interface name */
        u_short		intf_type;		    /* interface type (r/o) */
        u_short		intf_flags;		    /* interface flags */
        u_int		intf_mtu;		    /* interface MTU */
        struct addr	intf_addr;		    /* interface address */
        struct addr	intf_dst_addr;		    /* point-to-point dst */
        struct addr	intf_link_addr;		    /* link-layer address */
        u_int		intf_alias_num;		    /* number of aliases */
        struct addr	intf_alias_addrs __flexarr; /* array of aliases */
};

/*
 * MIB-II interface types - http://www.iana.org/assignments/ianaiftype-mib
 */
#define INTF_TYPE_OTHER		1	/* other */
#define INTF_TYPE_ETH		6	/* Ethernet */
#define INTF_TYPE_TOKENRING	9	/* Token Ring */
#define INTF_TYPE_FDDI		15	/* FDDI */
#define INTF_TYPE_PPP		23	/* Point-to-Point Protocol */
#define INTF_TYPE_LOOPBACK	24	/* software loopback */
#define INTF_TYPE_SLIP		28	/* Serial Line Interface Protocol */
#define INTF_TYPE_TUN		53	/* proprietary virtual/internal */

/*
 * Interface flags
 */
#define INTF_FLAG_UP		0x01	/* enable interface */
#define INTF_FLAG_LOOPBACK	0x02	/* is a loopback net (r/o) */
#define INTF_FLAG_POINTOPOINT	0x04	/* point-to-point link (r/o) */
#define INTF_FLAG_NOARP		0x08	/* disable ARP */
#define INTF_FLAG_BROADCAST	0x10	/* supports broadcast (r/o) */
#define INTF_FLAG_MULTICAST	0x20	/* supports multicast (r/o) */

typedef struct intf_handle intf_t;

typedef int (*intf_handler)(const struct intf_entry *entry, void *arg);

__BEGIN_DECLS
intf_t	*intf_open(void);
int	 intf_get(intf_t *i, struct intf_entry *entry);
int	 intf_get_src(intf_t *i, struct intf_entry *entry, struct addr *src);
int	 intf_get_dst(intf_t *i, struct intf_entry *entry, struct addr *dst);
int	 intf_set(intf_t *i, const struct intf_entry *entry);
int	 intf_loop(intf_t *i, intf_handler callback, void *arg);
intf_t	*intf_close(intf_t *i);
__END_DECLS

#endif /* DNET_INTF_H */