summaryrefslogtreecommitdiffstats
path: root/usr.sbin/mrouted/vif.h
blob: 3cfa2e596f04c3c5163eb62a5f1ccc2660f473fc (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
/*
 * The mrouted program is covered by the license in the accompanying file
 * named "LICENSE".  Use of the mrouted program represents acceptance of
 * the terms and conditions listed in that file.
 *
 * The mrouted program is COPYRIGHT 1989 by The Board of Trustees of
 * Leland Stanford Junior University.
 *
 *
 * $Id: vif.h,v 1.6 1994/08/24 23:54:47 thyagara Exp $
 */

/*
 * User level Virtual Interface structure
 *
 * A "virtual interface" is either a physical, multicast-capable interface
 * (called a "phyint") or a virtual point-to-point link (called a "tunnel").
 * (Note: all addresses, subnet numbers and masks are kept in NETWORK order.)
 */
struct uvif {
    u_short	     uv_flags;	    /* VIFF_ flags defined below            */
    u_char	     uv_metric;     /* cost of this vif                     */
    u_int	     uv_rate_limit; /* rate limit on this vif               */
    u_char	     uv_threshold;  /* min ttl required to forward on vif   */
    u_long	     uv_lcl_addr;   /* local address of this vif            */
    u_long	     uv_rmt_addr;   /* remote end-point addr (tunnels only) */
    u_long	     uv_subnet;     /* subnet number         (phyints only) */
    u_long	     uv_subnetmask; /* subnet mask           (phyints only) */
    u_long	     uv_subnetbcast;/* subnet broadcast addr (phyints only) */
    char	     uv_name[IFNAMSIZ]; /* interface name                   */
    struct listaddr *uv_groups;     /* list of local groups  (phyints only) */
    struct listaddr *uv_neighbors;  /* list of neighboring routers          */
    struct vif_acl  *uv_acl;	    /* access control list of groups        */
};

#define VIFF_KERNEL_FLAGS	(VIFF_TUNNEL|VIFF_SRCRT)
#define VIFF_DOWN		0x0100	       /* kernel state of interface */
#define VIFF_DISABLED		0x0200	       /* administratively disabled */
#define VIFF_QUERIER		0x0400	       /* I am the subnet's querier */
#define VIFF_ONEWAY		0x0800         /* Maybe one way interface   */

struct vif_acl {
    struct vif_acl  *acl_next;	    /* next acl member         */
    u_long	     acl_addr;	    /* Group address           */
    u_long	     acl_mask;	    /* Group addr. mask        */
};

struct listaddr {
    struct listaddr *al_next;		/* link to next addr, MUST BE FIRST */
    u_long	     al_addr;		/* local group or neighbor address  */
    u_long	     al_timer;		/* for timing out group or neighbor */
    u_long	     al_genid;		/* generation id for neighbor       */
    u_char	     al_pv;		/* router protocol version	    */
    u_char	     al_mv;		/* router mrouted version	    */
    u_long           al_timerid;        /* returned by set timer */
    u_long	     al_query;		/* second query in case of leave*/
    u_short          al_old;            /* if old memberships are present */
    u_short          al_last;		/* # of query's since last old rep */
};


#define NO_VIF		((vifi_t)MAXVIFS)  /* An invalid vif index */
OpenPOWER on IntegriCloud