int br_del_interface(struct bridge *br, int ifindex) { if (br_device_ioctl(br, BRCTL_DEL_IF, ifindex, 0, 0) < 0) return errno; return 0; }
int br_set_path_cost(struct port *p, int path_cost) { if (br_device_ioctl(p->parent, BRCTL_SET_PATH_COST, p->index, path_cost, 0) < 0) return errno; return 0; }
int br_set_port_priority(struct port *p, int port_priority) { if (br_device_ioctl(p->parent, BRCTL_SET_PORT_PRIORITY, p->index, port_priority, 0) < 0) return errno; return 0; }
int br_set_bridge_priority(struct bridge *br, int bridge_priority) { if (br_device_ioctl(br, BRCTL_SET_BRIDGE_PRIORITY, bridge_priority, 0, 0) < 0) return errno; return 0; }
int br_set_stp_state(struct bridge *br, int stp_state) { if (br_device_ioctl(br, BRCTL_SET_BRIDGE_STP_STATE, stp_state, 0, 0) < 0) return errno; return 0; }
int br_set_ageing_time(struct bridge *br, struct timeval *tv) { unsigned long jif = __tv_to_jiffies(tv); if (br_device_ioctl(br, BRCTL_SET_AGEING_TIME, jif, 0, 0) < 0) return errno; return 0; }
int br_set_bridge_max_age(struct bridge *br, struct timeval *tv) { unsigned long jif = __tv_to_jiffies(tv); if (br_device_ioctl(br, BRCTL_SET_BRIDGE_MAX_AGE, jif, 0, 0) < 0) return errno; return 0; }
int br_set_bridge_hello_time(struct bridge *br, struct timeval *tv) { unsigned long jif = __tv_to_jiffies(tv); if (br_device_ioctl(br, BRCTL_SET_BRIDGE_HELLO_TIME, jif, 0, 0) < 0) return errno; return 0; }
int br_set_gc_interval(struct bridge *br, struct timeval *tv) { unsigned long jif = __tv_to_jiffies(tv); if (br_device_ioctl(br, BRCTL_SET_GC_INTERVAL, jif, 0, 0) < 0) return errno; return 0; }
int br_set_bridge_forward_delay(struct bridge *br, struct timeval *tv) { unsigned long jif = __tv_to_jiffies(tv); if (br_device_ioctl(br, BRCTL_SET_BRIDGE_FORWARD_DELAY, jif, 0, 0) < 0) return errno; return 0; }
int br_read_port_info(struct port *p) { struct __port_info i; if (br_device_ioctl(p->parent, BRCTL_GET_PORT_INFO, (unsigned long)&i, p->index, 0) < 0) return errno; __port_info_copy(&p->info, &i); return 0; }
int br_read_info(struct bridge *br) { struct __bridge_info i; if (if_indextoname(br->ifindex, br->ifname) == NULL) return 1; if (br_device_ioctl(br, BRCTL_GET_BRIDGE_INFO, (unsigned long)&i, 0, 0) < 0) return 1; __bridge_info_copy(&br->info, &i); return 0; }
int br_read_fdb(struct bridge *br, struct fdb_entry *fdbs, int offset, int num) { struct __fdb_entry f[num]; int i; int numread; if ((numread = br_device_ioctl(br, BRCTL_GET_FDB_ENTRIES, (unsigned long)f, num, offset)) < 0) return errno; for (i=0;i<numread;i++) __copy_fdb(fdbs+i, f+i); return numread; }
int br_read_fdb(struct bridge *br, struct fdb_entry *fdbs, int offset, int num) { struct __fdb_entry f[num]; int i; int numread; again: numread = br_device_ioctl(br, BRCTL_GET_FDB_ENTRIES, (unsigned long)f, num, offset); if (numread < 0) { if (errno == EAGAIN) goto again; return -errno; } for (i=0;i<numread;i++) __copy_fdb(fdbs+i, f+i); return numread; }