Commit 6354948e authored by Alessandro Rubini's avatar Alessandro Rubini

userspace/tools: optionally obey dotconfig for vlan number

Signed-off-by: Alessandro Rubini's avatarAlessandro Rubini <rubini@gnudd.com>
parent 1b6293ed
......@@ -29,23 +29,25 @@
#endif
#define IS_PC (!IS_WRS)
/* This is a set of global variables, that convey program status */
char *prgname; /* argv[0], for my laziness */
int verbose;
int rvlan_pmask = ~0;
int rvlan_change_pending; /* wrsw_vlans must be called globally */
char *rvlan_radius_servers; /* strdup from config */
char *rvlan_radius_secret;
int rvlan_auth_vlan, rvlan_noauth_vlan;
int rvlan_auth_vlan, rvlan_noauth_vlan, rvlan_obey_dotconfig;
struct rvlan_dev {
char *name; /* Allocated */
int portnr;
int ifindex;
int up_now; /* Current (detected) status 0-1 */
char peer_mac[16]; /* Detected from traffic, as string */
int poll_fd; /* Sniffing or radclient output */
int pid; /* Running child */
int fsm_state; /* During sniff/auth */
int chosen_vlan;
int dotconfig_vlan, chosen_vlan;
unsigned char mac[ETH_ALEN]; /* Own mac address */
char radbuffer[10240];
int radbuffer_size;
......@@ -298,6 +300,8 @@ int rvlan_fsm(struct rvlan_dev *dev, fd_set *rdset)
if (s)
sscanf(s+1, "%i", &dev->chosen_vlan);
}
if (rvlan_obey_dotconfig)
dev->chosen_vlan = dev->dotconfig_vlan;
if (verbose)
printf("dev %s: vlan %i ", dev->name,
dev->chosen_vlan);
......@@ -355,6 +359,8 @@ static int rvlan_enumerate_devices(char *prefix)
FILE *f;
struct dirent *ent;
struct rvlan_dev *dev;
char *s, cfgname[40];
int portnr, mode_access;
d = opendir(dirname);
if (!d) {
......@@ -370,9 +376,7 @@ static int rvlan_enumerate_devices(char *prefix)
if (IS_WRS) {
/* Check configuration of this port */
int portnr = -1, mode_access;
char cfgname[40];
portnr = -1;
sscanf(ent->d_name + strlen(prefix), "%d", &portnr);
if (portnr < 0) {
fprintf(stderr, "%s: \"%s\" has no number\n",
......@@ -399,7 +403,15 @@ static int rvlan_enumerate_devices(char *prefix)
dev = calloc(1, sizeof(*dev));
dev->name = strdup(ent->d_name);
dev->portnr = portnr;
dev->poll_fd = -1;
if (IS_WRS) {
sprintf(cfgname, "VLANS_PORT%02d_VID", portnr);
s = libwr_cfg_get(cfgname);
if (s)
sscanf(s, "%i", &dev->dotconfig_vlan);
}
/* read ifindex from sysfs -- instead of ioctl(SIOCGIFINDEX) */
sprintf(path, "%s/%s/ifindex", dirname, dev->name);
f = fopen(path, "r");
......@@ -653,6 +665,10 @@ int main(int argc, char **argv)
exit(1);
}
s = libwr_cfg_get("RVLAN_OBEY_DOTCONFIG");
if (s && s[0]=='y')
rvlan_obey_dotconfig = 1;
rvlan_radius_servers = libwr_cfg_get("RVLAN_RADIUS_SERVERS");
rvlan_radius_secret = libwr_cfg_get("RVLAN_RADIUS_SECRET");
if (!rvlan_radius_servers || !rvlan_radius_secret) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment