#ifndef SNMP_BRIDGE_H
#define SNMP_BRIDGE_H
#define SNMP_BRIDGE_ID_LEN 8
typedef uint8_t port_id[2];
typedef u_char bridge_id[SNMP_BRIDGE_ID_LEN];
#define SNMP_BRIDGE_MAX_PRIORITY 65535
#define SNMP_BRIDGE_MIN_AGE_TIME 10
#define SNMP_BRIDGE_MAX_AGE_TIME 1000000
#define SNMP_BRIDGE_MIN_TXHC 1
#define SNMP_BRIDGE_MAX_TXHC 10
#define SNMP_BRIDGE_MIN_MAGE 600
#define SNMP_BRIDGE_MAX_MAGE 4000
#define SNMP_BRIDGE_MIN_HTIME 100
#define SNMP_BRIDGE_MAX_HTIME 1000
#define SNMP_BRIDGE_MIN_FDELAY 400
#define SNMP_BRIDGE_MAX_FDELAY 3000
#define SNMP_PORT_PATHCOST_OBSOLETE 65535
#define SNMP_PORT_MIN_PATHCOST 0
#define SNMP_PORT_MAX_PATHCOST 200000000
#define SNMP_PORT_PATHCOST_AUTO 0
#define SNMP_BRIDGE_DATA_MAXAGE 10
#define SNMP_BRIDGE_DATA_MAXAGE_MIN 1
#define SNMP_BRIDGE_DATA_MAXAGE_MAX 300
#define SNMP_BRIDGE_POLL_INTERVAL (5 * 60)
#define SNMP_BRIDGE_POLL_INTERVAL_MIN 1
#define SNMP_BRIDGE_POLL_INTERVAL_MAX 3600
#define SNMP_BRIDGE_TC_POLL_INTERVAL 30
struct bridge_if *bridge_get_default(void);
void bridge_set_default(struct bridge_if *bif);
const char *bridge_get_default_name(void);
int bridge_get_data_maxage(void);
struct tp_entry {
uint32_t sysindex;
int32_t port_no;
enum TpFdbStatus status;
uint8_t tp_addr[ETHER_ADDR_LEN];
uint8_t flags;
TAILQ_ENTRY(tp_entry) tp_e;
};
struct bridge_port {
uint32_t sysindex;
int32_t port_no;
int32_t if_idx;
int8_t span_enable;
struct asn_oid circuit;
uint32_t dly_ex_drops;
uint32_t dly_mtu_drops;
int32_t status;
enum TruthValue priv_set;
int32_t path_cost;
int32_t priority;
int32_t design_cost;
uint32_t fwd_trans;
char p_name[IFNAMSIZ];
enum StpPortState state;
enum dot1dStpPortEnable enable;
port_id design_port;
bridge_id design_root;
bridge_id design_bridge;
int32_t admin_path_cost;
enum TruthValue proto_migr;
enum TruthValue admin_edge;
enum TruthValue oper_edge;
enum TruthValue oper_ptp;
enum StpPortAdminPointToPointType admin_ptp;
int32_t max_info;
int32_t in_frames;
int32_t out_frames;
int32_t in_drops;
uint8_t flags;
TAILQ_ENTRY(bridge_port) b_p;
};
struct bridge_if {
uint32_t sysindex;
int32_t num_ports;
enum BaseType br_type;
enum RowStatus if_status;
char bif_name[IFNAMSIZ];
struct ether_addr br_addr;
struct bridge_port *f_bp;
int32_t priority;
int32_t root_cost;
int32_t root_port;
int32_t max_age;
int32_t hello_time;
int32_t fwd_delay;
int32_t hold_time;
int32_t bridge_max_age;
int32_t bridge_hello_time;
int32_t bridge_fwd_delay;
int32_t tx_hold_count;
uint32_t top_changes;
enum dot1dStpVersion stp_version;
enum dot1dStpProtocolSpecification prot_spec;
struct timeval last_tc_time;
bridge_id design_root;
int32_t lrnt_drops;
int32_t age_time;
int32_t num_addrs;
int32_t max_addrs;
struct tp_entry *f_tpa;
time_t entry_age;
time_t ports_age;
time_t addrs_age;
TAILQ_ENTRY(bridge_if) b_if;
};
void bridge_ifs_fini(void);
struct bridge_if *bridge_if_find_ifs(uint32_t sysindex);
struct bridge_if *bridge_if_find_ifname(const char *b_name);
const char *bridge_if_find_name(uint32_t sysindex);
int bridge_compare_sysidx(uint32_t i1, uint32_t i2);
int bridge_attach_newif(struct mibif *ifp);
struct bridge_if *bridge_first_bif(void);
struct bridge_if *bridge_next_bif(struct bridge_if *b_pr);
void bridge_remove_bif(struct bridge_if *bif);
void bridge_update_all_ports(void);
void bridge_update_all_addrs(void);
void bridge_update_all_ifs(void);
void bridge_update_all(void *arg);
void bridge_update_tc_time(void *arg);
void bridge_ifs_dump(void);
void bridge_ports_update_listage(void);
void bridge_ports_fini(void);
void bridge_members_free(struct bridge_if *bif);
struct bridge_port *bridge_new_port(struct mibif *mif, struct bridge_if *bif);
void bridge_port_remove(struct bridge_port *bp, struct bridge_if *bif);
struct bridge_port *bridge_port_bif_first(struct bridge_if *bif);
struct bridge_port *bridge_port_bif_next(struct bridge_port *bp);
struct bridge_port *bridge_port_find(int32_t if_idx, struct bridge_if *bif);
void bridge_port_getinfo_mibif(struct mibif *m_if, struct bridge_port *bp);
int bridge_getinfo_bif_ports(struct bridge_if *bif);
int bridge_update_memif(struct bridge_if *bif);
void bridge_ports_dump(struct bridge_if *bif);
void bridge_addrs_update_listage(void);
void bridge_addrs_fini(void);
void bridge_addrs_free(struct bridge_if *bif);
struct tp_entry *bridge_new_addrs(uint8_t *mac, struct bridge_if *bif);
void bridge_addrs_remove(struct tp_entry *te, struct bridge_if *bif);
struct tp_entry *bridge_addrs_find(uint8_t *mac, struct bridge_if *bif);
struct tp_entry *bridge_addrs_bif_first(struct bridge_if *bif);
struct tp_entry *bridge_addrs_bif_next(struct tp_entry *te);
int bridge_getinfo_bif_addrs(struct bridge_if *bif);
int bridge_update_addrs(struct bridge_if *bif);
void bridge_addrs_dump(struct bridge_if *bif);
void bridge_pf_dump(void);
int bridge_ioctl_init(void);
int bridge_kmod_load(void);
int bridge_getinfo_bif(struct bridge_if *bif);
int bridge_get_op_param(struct bridge_if *bif);
int bridge_set_priority(struct bridge_if *bif, int32_t priority);
int bridge_set_maxage(struct bridge_if *bif, int32_t max_age);
int bridge_set_hello_time(struct bridge_if *bif, int32_t hello_time);
int bridge_set_forward_delay(struct bridge_if *bif, int32_t fwd_delay);
int bridge_set_aging_time(struct bridge_if *bif, int32_t age_time);
int bridge_set_max_cache(struct bridge_if *bif, int32_t max_cache);
int bridge_set_tx_hold_count(struct bridge_if *bif, int32_t tx_hc);
int bridge_set_stp_version(struct bridge_if *bif, int32_t stp_proto);
int bridge_set_if_up(const char* b_name, int8_t up);
int bridge_create(const char *b_name);
int bridge_destroy(const char *b_name);
u_char *bridge_get_basemac(const char *bif_name, u_char *mac, size_t mlen);
int bridge_port_set_priority(const char *bif_name, struct bridge_port *bp,
int32_t priority);
int bridge_port_set_stp_enable(const char *bif_name, struct bridge_port *bp,
uint32_t enable);
int bridge_port_set_path_cost(const char *bif_name, struct bridge_port *bp,
int32_t path_cost);
int bridge_port_set_admin_ptp(const char *bif_name, struct bridge_port *bp,
uint32_t admin_ptp);
int bridge_port_set_admin_edge(const char *bif_name, struct bridge_port *bp,
uint32_t enable);
int bridge_port_set_private(const char *bif_name, struct bridge_port *bp,
uint32_t priv_set);
int bridge_port_addm(struct bridge_port *bp, const char *b_name);
int bridge_port_delm(struct bridge_port *bp, const char *b_name);
int32_t bridge_get_pfval(uint8_t which);
int32_t bridge_do_pfctl(int32_t bridge_ctl, enum snmp_op op, int32_t *val);
#endif