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_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_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_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_set_bridge_forward_delay(const char *br, int sec) { if (!ifexists(br)) return -1; struct timeval tv; tv.tv_sec = sec; tv.tv_usec = 0; return br_set(br, "forward_delay", __tv_to_jiffies(&tv), BRCTL_SET_BRIDGE_FORWARD_DELAY); }
int _create_bridge(const char* name) { int sock; sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { return -errno; } int err; err = ioctl(sock, SIOCBRADDBR, name); if (err < 0) { close(sock); return -errno; } struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 1000000 * (0 - tv.tv_sec); unsigned long args[5]; struct ifreq ifr; args[0] = BRCTL_SET_BRIDGE_FORWARD_DELAY; args[1] = __tv_to_jiffies(&tv); args[2] = 0; args[3] = 0; args[4] = 0; memcpy(ifr.ifr_name, name, IFNAMSIZ); ((unsigned long *)(&ifr.ifr_data))[0] = (unsigned long)args; ioctl(sock, SIOCDEVPRIVATE, &ifr); close(sock); return 0; }
int br_set_ageing_time(const char *br, struct timeval *tv) { return br_set(br, "ageing_time", __tv_to_jiffies(tv), BRCTL_SET_AGEING_TIME); }
int br_set_bridge_max_age(const char *br, struct timeval *tv) { return br_set(br, "max_age", __tv_to_jiffies(tv), BRCTL_SET_BRIDGE_MAX_AGE); }
int br_set_bridge_hello_time(const char *br, struct timeval *tv) { return br_set(br, "hello_time", __tv_to_jiffies(tv), BRCTL_SET_BRIDGE_HELLO_TIME); }
int br_set_bridge_forward_delay(const char *br, struct timeval *tv) { return br_set(br, "forward_delay", __tv_to_jiffies(tv), BRCTL_SET_BRIDGE_FORWARD_DELAY); }
static unsigned long str_to_jiffies(const char *time_str) { struct timeval tv; strtotimeval(&tv, time_str); return __tv_to_jiffies(&tv); }
int br_set_igmpsnoop_ageing_time(const char *br, struct timeval *tv) { return br_set(br, "igmpsnoop_ageing_time", __tv_to_jiffies(tv), BRCTL_SET_IGMPSNOOPING_AGEING_TIME); }