#ifndef _NET_BRIDGE_H
#define _NET_BRIDGE_H
#include <sys/param.h>
#include <sys/dld.h>
#include <sys/ethernet.h>
#ifdef __cplusplus
extern "C" {
#endif
#define BRIDGE_GROUP_ADDRESS { 0x01, 0x80, 0xC2, 0, 0, 0 }
#define _BRIOC(n) (0x42524700 + (n))
#define BRIOC_NEWBRIDGE _BRIOC(1)
#define BRIOC_ADDLINK _BRIOC(2)
#define BRIOC_REMLINK _BRIOC(3)
#define BRIOC_SETSTATE _BRIOC(4)
#define BRIOC_SETPVID _BRIOC(5)
#define BRIOC_VLANENAB _BRIOC(6)
#define BRIOC_FLUSHFWD _BRIOC(7)
#define BRIOC_LISTFWD _BRIOC(8)
#define BRIOC_TABLEMAX _BRIOC(8)
#define BRIDGE_CTL "bridgectl"
#define BRIDGE_CTLPATH "/dev/" BRIDGE_CTL
typedef struct bridge_newbridge_s {
datalink_id_t bnb_linkid;
char bnb_name[MAXNAMELEN];
} bridge_newbridge_t;
typedef enum bridge_state_e {
BLS_BLOCKLISTEN,
BLS_LEARNING,
BLS_FORWARDING
} bridge_state_t;
typedef struct bridge_setstate_s {
datalink_id_t bss_linkid;
bridge_state_t bss_state;
} bridge_setstate_t;
typedef struct bridge_setpvid_s {
datalink_id_t bsv_linkid;
uint_t bsv_vlan;
} bridge_setpvid_t;
typedef struct bridge_vlanenab_s {
datalink_id_t bve_linkid;
uint_t bve_vlan;
boolean_t bve_onoff;
} bridge_vlanenab_t;
typedef struct bridge_flushfwd_s {
datalink_id_t bff_linkid;
boolean_t bff_exclude;
} bridge_flushfwd_t;
typedef struct bridge_listfwd_s {
char blf_name[MAXNAMELEN];
ether_addr_t blf_dest;
uint16_t blf_trill_nick;
uint_t blf_ms_age;
boolean_t blf_is_local;
datalink_id_t blf_linkid;
} bridge_listfwd_t;
typedef struct bridge_ctl_s {
datalink_id_t bc_linkid;
boolean_t bc_failed;
} bridge_ctl_t;
#define BRIDGE_IOC_LISTFWD BRIDGEIOC(1)
#ifdef __cplusplus
}
#endif
#endif