-
- memset(users, 0, USERS * sizeof(struct user));
- for (i = 0; i < USERS; i++) {
+
+ int maxusers;
+
+ in_addr_t netmask = 0;
+ struct in_addr net;
+ struct in_addr ipstart;
+
+ for (i = 0; i < netbits; i++) {
+ netmask = (netmask << 1) | 1;
+ }
+ netmask <<= (32 - netbits);
+ net.s_addr = htonl(netmask);
+ ipstart.s_addr = my_ip & net.s_addr;
+
+ maxusers = (1 << (32-netbits)) - 3; /* 3: Net addr, broadcast addr, iodined addr */
+ usercount = MIN(maxusers, USERS);
+
+ users = calloc(usercount, sizeof(struct tun_user));
+ for (i = 0; i < usercount; i++) {
+ in_addr_t ip;