mirror of
https://github.com/ntop/n2n.git
synced 2024-09-20 00:51:10 +02:00
merged edge's subnet parameter into address parameter
This commit is contained in:
parent
421968ac4e
commit
df869bfd3b
|
@ -257,7 +257,6 @@ typedef struct n2n_tuntap_priv_config {
|
||||||
dec_ip_str_t netmask;
|
dec_ip_str_t netmask;
|
||||||
char device_mac[N2N_MACNAMSIZ];
|
char device_mac[N2N_MACNAMSIZ];
|
||||||
int mtu;
|
int mtu;
|
||||||
uint8_t got_s;
|
|
||||||
uint8_t daemon;
|
uint8_t daemon;
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
uid_t userid;
|
uid_t userid;
|
||||||
|
|
|
@ -89,6 +89,10 @@
|
||||||
#define N2N_MACNAMSIZ 18 /* AA:BB:CC:DD:EE:FF + NULL*/
|
#define N2N_MACNAMSIZ 18 /* AA:BB:CC:DD:EE:FF + NULL*/
|
||||||
#define N2N_IF_MODE_SIZE 16 /* static | dhcp */
|
#define N2N_IF_MODE_SIZE 16 /* static | dhcp */
|
||||||
|
|
||||||
|
#define N2N_EDGE_DEFAULT_DEV_NAME "edge0"
|
||||||
|
#define N2N_EDGE_DEFAULT_NETMASK "255.255.255.0" /* default netmask for edge ip address... */
|
||||||
|
#define N2N_EDGE_DEFAULT_CIDR_NM 24 /* ... also in cidr format */
|
||||||
|
|
||||||
#define N2N_SN_LPORT_DEFAULT 7654
|
#define N2N_SN_LPORT_DEFAULT 7654
|
||||||
#define N2N_SN_PKTBUF_SIZE 2048
|
#define N2N_SN_PKTBUF_SIZE 2048
|
||||||
|
|
||||||
|
|
93
src/edge.c
93
src/edge.c
|
@ -45,54 +45,65 @@ int num_cap = sizeof(cap_values)/sizeof(cap_value_t);
|
||||||
|
|
||||||
/** Find the address and IP mode for the tuntap device.
|
/** Find the address and IP mode for the tuntap device.
|
||||||
*
|
*
|
||||||
* s is one of these forms:
|
* s is of the form:
|
||||||
*
|
*
|
||||||
* <host> := <hostname> | A.B.C.D
|
* ["static"|"dhcp",":"] (<host>|<ip>) [/<cidr subnet mask>]
|
||||||
*
|
*
|
||||||
* <host> | static:<host> | dhcp:<host>
|
* for example static:192.168.8.5/24
|
||||||
*
|
*
|
||||||
* If the mode is present (colon required) then fill ip_mode with that value
|
* Fill the parts of the string into the fileds, ip_mode only if
|
||||||
* otherwise do not change ip_mode. Fill ip_mode with everything after the
|
* present. All strings are NULL terminated.
|
||||||
* colon if it is present; or s if colon is not present.
|
|
||||||
*
|
|
||||||
* ip_add and ip_mode are NULL terminated if modified.
|
|
||||||
*
|
*
|
||||||
* return 0 on success and -1 on error
|
* return 0 on success and -1 on error
|
||||||
*/
|
*/
|
||||||
static int scan_address(char * ip_addr, size_t addr_size,
|
static int scan_address(char * ip_addr, size_t addr_size,
|
||||||
|
char * netmask, size_t netmask_size,
|
||||||
char * ip_mode, size_t mode_size,
|
char * ip_mode, size_t mode_size,
|
||||||
const char * s) {
|
char * s) {
|
||||||
int retval = -1;
|
|
||||||
char * p;
|
|
||||||
|
|
||||||
if((NULL == s) || (NULL == ip_addr))
|
int retval = -1;
|
||||||
{
|
char * start;
|
||||||
|
char * end;
|
||||||
|
int bitlen = N2N_EDGE_DEFAULT_CIDR_NM;
|
||||||
|
|
||||||
|
if((NULL == s) || (NULL == ip_addr) || (NULL == netmask)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(ip_addr, 0, addr_size);
|
memset(ip_addr, 0, addr_size);
|
||||||
|
memset(netmask, 0, netmask_size);
|
||||||
|
|
||||||
p = strpbrk(s, ":");
|
start = s;
|
||||||
|
end = strpbrk(s, ":");
|
||||||
if(p)
|
|
||||||
{
|
|
||||||
/* colon is present */
|
|
||||||
if(ip_mode)
|
|
||||||
{
|
|
||||||
size_t end=0;
|
|
||||||
|
|
||||||
|
if(end) {
|
||||||
|
// colon is present
|
||||||
|
if(ip_mode) {
|
||||||
memset(ip_mode, 0, mode_size);
|
memset(ip_mode, 0, mode_size);
|
||||||
end = MIN(p-s, (ssize_t)(mode_size-1)); /* ensure NULL term */
|
strncpy(ip_mode, start, (size_t)MIN(end - start, mode_size - 1));
|
||||||
strncpy(ip_mode, s, end);
|
|
||||||
strncpy(ip_addr, p+1, addr_size-1); /* ensure NULL term */
|
|
||||||
retval = 0;
|
|
||||||
}
|
}
|
||||||
|
start = end + 1;
|
||||||
|
} else {
|
||||||
|
// colon is not present
|
||||||
}
|
}
|
||||||
else
|
// start now points to first address character
|
||||||
{
|
retval = 0; // we have got an address
|
||||||
/* colon is not present */
|
|
||||||
strncpy(ip_addr, s, addr_size-1);
|
end = strpbrk(start, "/");
|
||||||
ip_addr[addr_size-1] = '\0';
|
|
||||||
|
if(!end)
|
||||||
|
// no slash present -- default end
|
||||||
|
end = s + strlen(s);
|
||||||
|
|
||||||
|
strncpy(ip_addr, start, (size_t)MIN(end - start, addr_size - 1)); // ensure NULL term
|
||||||
|
|
||||||
|
if(end) {
|
||||||
|
// slash is present
|
||||||
|
|
||||||
|
// now, handle the sub-network address
|
||||||
|
sscanf(end + 1, "%u", &bitlen);
|
||||||
|
bitlen = htobe32(bitlen2mask(bitlen));
|
||||||
|
inet_ntop(AF_INET, &bitlen, netmask, netmask_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
|
@ -110,11 +121,10 @@ static void help() {
|
||||||
#if defined(N2N_CAN_NAME_IFACE)
|
#if defined(N2N_CAN_NAME_IFACE)
|
||||||
"-d <tap device> "
|
"-d <tap device> "
|
||||||
#endif /* #if defined(N2N_CAN_NAME_IFACE) */
|
#endif /* #if defined(N2N_CAN_NAME_IFACE) */
|
||||||
"-a [static:|dhcp:]<tap IP address> "
|
"-a [static:|dhcp:]<tap IP address>[/nn] "
|
||||||
"-c <community> "
|
"-c <community> "
|
||||||
"[-k <encrypt key>]\n"
|
"[-k <encrypt key>]\n"
|
||||||
" "
|
" "
|
||||||
"[-s <netmask>] "
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
"[-u <uid> -g <gid>]"
|
"[-u <uid> -g <gid>]"
|
||||||
#endif /* #ifndef WIN32 */
|
#endif /* #ifndef WIN32 */
|
||||||
|
@ -139,10 +149,9 @@ static void help() {
|
||||||
printf("-d <tap device> | tap device name\n");
|
printf("-d <tap device> | tap device name\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
printf("-a <mode:address> | Set interface address. For DHCP use '-r -a dhcp:0.0.0.0'\n");
|
printf("-a [mode:]<address>[/nn] | Interface address and optional subnet (cidr, default /24). For DHCP use '-r -a dhcp:0.0.0.0'\n");
|
||||||
printf("-c <community> | n2n community name the edge belongs to.\n");
|
printf("-c <community> | n2n community name the edge belongs to.\n");
|
||||||
printf("-k <encrypt key> | Encryption key (ASCII) - also N2N_KEY=<encrypt key>.\n");
|
printf("-k <encrypt key> | Encryption key (ASCII) - also N2N_KEY=<encrypt key>.\n");
|
||||||
printf("-s <netmask> | Edge interface netmask in dotted decimal notation (255.255.255.0).\n");
|
|
||||||
printf("-l <supernode host:port> | Supernode IP:port\n");
|
printf("-l <supernode host:port> | Supernode IP:port\n");
|
||||||
printf("-i <reg_interval> | Registration interval, for NAT hole punching (default 20 seconds)\n");
|
printf("-i <reg_interval> | Registration interval, for NAT hole punching (default 20 seconds)\n");
|
||||||
printf("-L <reg_ttl> | TTL for registration packet when UDP NAT hole punching through supernode (default 0 for not set )\n");
|
printf("-L <reg_ttl> | TTL for registration packet when UDP NAT hole punching through supernode (default 0 for not set )\n");
|
||||||
|
@ -273,6 +282,7 @@ static int setOption(int optkey, char *optargument, n2n_tuntap_priv_config_t *ec
|
||||||
case 'a': /* IP address and mode of TUNTAP interface */
|
case 'a': /* IP address and mode of TUNTAP interface */
|
||||||
{
|
{
|
||||||
scan_address(ec->ip_addr, N2N_NETMASK_STR_SIZE,
|
scan_address(ec->ip_addr, N2N_NETMASK_STR_SIZE,
|
||||||
|
ec->netmask, N2N_NETMASK_STR_SIZE,
|
||||||
ec->ip_mode, N2N_IF_MODE_SIZE,
|
ec->ip_mode, N2N_IF_MODE_SIZE,
|
||||||
optargument);
|
optargument);
|
||||||
break;
|
break;
|
||||||
|
@ -475,17 +485,6 @@ static int setOption(int optkey, char *optargument, n2n_tuntap_priv_config_t *ec
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 's': /* Subnet Mask */
|
|
||||||
{
|
|
||||||
if(0 != ec->got_s) {
|
|
||||||
traceEvent(TRACE_WARNING, "Multiple subnet masks supplied");
|
|
||||||
}
|
|
||||||
strncpy(ec->netmask, optargument, N2N_NETMASK_STR_SIZE);
|
|
||||||
ec->netmask[N2N_NETMASK_STR_SIZE - 1] = '\0';
|
|
||||||
ec->got_s = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case 'S':
|
case 'S':
|
||||||
{
|
{
|
||||||
conf->allow_p2p = 0;
|
conf->allow_p2p = 0;
|
||||||
|
@ -809,9 +808,9 @@ int main(int argc, char* argv[]) {
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
ec.tuntap_dev_name[0] = '\0';
|
ec.tuntap_dev_name[0] = '\0';
|
||||||
#else
|
#else
|
||||||
snprintf(ec.tuntap_dev_name, sizeof(ec.tuntap_dev_name), "edge0");
|
snprintf(ec.tuntap_dev_name, sizeof(ec.tuntap_dev_name), N2N_EDGE_DEFAULT_DEV_NAME);
|
||||||
#endif
|
#endif
|
||||||
snprintf(ec.netmask, sizeof(ec.netmask), "255.255.255.0");
|
snprintf(ec.netmask, sizeof(ec.netmask), N2N_EDGE_DEFAULT_NETMASK);
|
||||||
|
|
||||||
if((argc >= 2) && (argv[1][0] != '-')) {
|
if((argc >= 2) && (argv[1][0] != '-')) {
|
||||||
rc = loadFromFile(argv[1], &conf, &ec);
|
rc = loadFromFile(argv[1], &conf, &ec);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user