net: add nameserver IPs to kernel-parameter ip=
PATCH 1/2 net: add nameserver IPs to kernel-parameter ip=
Kernel-parameter "ip=" is used to assign network configuration. With linux kernel 3.7 it is also possible to set nameserver IPs.
This patch adds two new options (nameserver0 and nameserver1) to ethernet device parameter. It also updates defaultenv version 1.
--- defaultenv/bin/boot | 4 +++- defaultenv/config | 2 ++ net/eth.c | 2 ++ 3 files changed, 7 insertions(+), 1 deletions(-)
defaultenv/bin/boot +3 -1
@@ -61,7 +61,9 @@ if [ x$ip = xdhcp -o ]; then elif [ x$ip = xnone ]; then bootargs="$bootargs ip=none" else - bootargs="$bootargs ip=$eth0.ipaddr:$eth0.serverip:$eth0.gateway:$eth0.netmask::eth0:" + bootargs="$bootargs ip=$eth0.ipaddr:$eth0.serverip:$eth0.gateway:" + bootargs="$bootargs$eth0.netmask::eth0::" + bootargs="$bootargs$eth0.nameserver0:$eth0.nameserver1" fi
defaultenv/config +2 -0
@@ -18,6 +18,8 @@ global.dhcp.vendor_id=barebox #eth0.netmask=a.b.c.d #eth0.serverip=a.b.c.d #eth0.gateway=a.b.c.d +#eth0.nameserver0=a.b.c.d +#eth0.nameserver1=a.b.c.d # can be either 'tftp', 'nfs', 'nand', 'nor' or 'disk' kernel_loc=tftp
net/eth.c +2 -0
@@ -229,6 +229,8 @@ int eth_register(struct eth_device *edev)dev_add_param (dev,"gateway" , eth_set_ipaddr,NULL ,0 );dev_add_param (dev,"netmask" , eth_set_ipaddr,NULL ,0 );dev_add_param (dev,"serverip" , eth_set_ipaddr,NULL ,0 ); +dev_add_param (dev,"nameserver0" , eth_set_ipaddr,NULL ,0 ); +dev_add_param (dev,"nameserver1" , eth_set_ipaddr,NULL ,0 ); edev->init (edev);
Signature · 9 lines
1.7.2.5 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Quoted 5 lines · Christoph Fritz
Kernel-parameter "ip=" is used to assign network configuration. With linux kernel 3.7 it is also possible to set nameserver IPs.
This patch adds two new options (nameserver0 and nameserver1) to ethernet device parameter. It also updates defaultenv version 1.
defaultenv-2 mandatory
v1 is for fix only
Quoted 41 lines
Signed-off-by Christoph Fritz <[email protected]>--- defaultenv/bin/boot | 4 +++- defaultenv/config | 2 ++ net/eth.c | 2 ++ 3 files changed, 7 insertions(+), 1 deletions(-)defaultenv/bin/boot +3
-1@@ -61,7 +61,9 @@ if [ x$ip = xdhcp -o ]; then elif [ x$ip = xnone ]; then bootargs="$bootargs ip=none" else - bootargs="$bootargs ip=$eth0.ipaddr:$eth0.serverip:$eth0.gateway:$eth0.netmask::eth0:" + bootargs="$bootargs ip=$eth0.ipaddr:$eth0.serverip:$eth0.gateway:" + bootargs="$bootargs$eth0.netmask::eth0::" + bootargs="$bootargs$eth0.nameserver0:$eth0.nameserver1" fidefaultenv/config +2
-0@@ -18,6 +18,8 @@ global.dhcp.vendor_id=barebox #eth0.netmask=a.b.c.d #eth0.serverip=a.b.c.d #eth0.gateway=a.b.c.d +#eth0.nameserver0=a.b.c.d +#eth0.nameserver1=a.b.c.d # can be either 'tftp', 'nfs', 'nand', 'nor' or 'disk' kernel_loc=tftpnet/eth.c +0
-0
net/eth.c int eth_register(struct eth_device *edev) · line 233
Quoted 5 lines
net/eth.c +2
-0@@ -229,6 +229,8 @@ int eth_register(struct eth_device *edev)dev_add_param (dev,"gateway" , eth_set_ipaddr,NULL ,0 );dev_add_param (dev,"netmask" , eth_set_ipaddr,NULL ,0 );dev_add_param (dev,"serverip" , eth_set_ipaddr,NULL ,0 ); +dev_add_param (dev,"nameserver0" , eth_set_ipaddr,NULL ,0 ); +dev_add_param (dev,"nameserver1" , eth_set_ipaddr,NULL ,0 );
this is done via net as the nameserver is not interface specific
Best Regards,
J.
_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
PATCH v2 1/2 net: add nameserver IPs to kernel-parameter ip=
Kernel-parameter "ip=" is used to assign network configuration. With linux kernel 3.7 it is also possible to set nameserver IPs.
This patch adds two new variables (nameserver0 and nameserver1) to barebox's $net configuration.
--- net/dhcp.c | 2 +- net/dns.c | 4 ++-- net/net.c | 18 +++++++++++++++++- 3 files changed, 20 insertions(+), 4 deletions(-)
net/dhcp.c +1 -1
@@ -211,7 +211,7 @@ struct dhcp_opt dhcp_options[] = { }, { .option = 6, .handle = env_ip_handle, - .barebox_var_name = "net.nameserver", + .barebox_var_name = "net.nameserver0", }, { .option = 12, .copy_only_if_valid = 1,
net/dns.c +2 -2
@@ -206,9 +206,9 @@ IPaddr_t resolv(char *host) dns_state =STATE_INIT ; - ns =getenv ("net.nameserver" ); + ns =getenv ("net.nameserver0" );if (!ns || !*ns) { -printk ("%s: no nameserver specified in $net.nameserver\n" , +printk ("%s: no nameserver specified in $net.nameserver0\n" , __func__);return 0 ; }
net/net.c +17 -1
@@ -669,6 +669,21 @@ static struct device_d net_device = { .id = DEVICE_ID_SINGLE, }; +static int net_set_namesrv (struct device_d *dev,struct param_d *param,const char *val) +{ +IPaddr_t ip; + +if (!val) +return -EINVAL ; + +if (string_to_ip (val, &ip)) +return -EINVAL ; + +dev_param_set_generic (dev, param, val); + +return 0 ; +} +static int net_init (void ) {int i;
@@ -677,7 +692,8 @@ static int net_init(void) NetRxPackets[i] =net_alloc_packet ();register_device (&net_device); -dev_add_param (&net_device,"nameserver" ,NULL ,NULL ,0 ); +dev_add_param (&net_device,"nameserver0" , net_set_namesrv,NULL ,0 ); +dev_add_param (&net_device,"nameserver1" , net_set_namesrv,NULL ,0 );dev_add_param (&net_device,"domainname" ,NULL ,NULL ,0 );return 0 ;
Signature · 9 lines
1.7.2.5 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Quoted 7 lines · Christoph Fritz
Kernel-parameter "ip=" is used to assign network configuration. With linux kernel 3.7 it is also possible to set nameserver IPs.
This patch adds two new variables (nameserver0 and nameserver1) to barebox's $net configuration.
Signed-off-by Christoph Fritz <[email protected]>
this is not the right way to handle this the option 6 of the DHCP allow a dhcp server to provide n nameserver
so we need to use tehm if provided and if you add nameserver1 we need to use it for resolve too
patch in reply
Best Regards,
J.
_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
PATCH 1/1 net: add multiple nameserver support
In reply to Christoph FritzToday limit it to 2
Update dhcp support as option 6 allow to get n nameserver If more than 2 nameserver are provided by the DHCP server ignore them.
--- net/dhcp.c | 22 ++++++++++++++++++---- net/dns.c | 19 +++++++++++++++---- net/net.c | 3 ++- 3 files changed, 35 insertions(+), 9 deletions(-)
net/dhcp.c +18 -4
@@ -137,12 +137,24 @@ static void gateway_handle(struct dhcp_opt *opt, unsigned char *popt, int optlennet_set_gateway (ip); } -static void env_ip_handle (struct dhcp_opt *opt,unsigned char *popt,int optlen) +static void env_ip_multiple_handle (struct dhcp_opt *opt,unsigned char *popt,int optlen) { +char *var_name;IPaddr_t ip; +int i; +int max = (int )opt->data; - ip =net_read_ip (popt); -setenv_ip (opt->barebox_var_name, ip); +for (i =0 ; optlen >0 && i < max; i++) { + var_name =asprintf ("%s%d" , opt->barebox_var_name, i); +if (!var_name) +return ; + + ip =net_read_ip (popt); +setenv_ip (var_name, ip); + optlen -=4 ; + popt +=4 ; +free (var_name); + } }static void env_str_handle (struct dhcp_opt *opt,unsigned char *popt,int optlen)
@@ -210,8 +222,10 @@ struct dhcp_opt dhcp_options[] = { .handle = gateway_handle, }, { .option = 6, - .handle = env_ip_handle, + .handle = env_ip_multiple_handle, .barebox_var_name = "net.nameserver", + /* max today supported, ignore if more */ + .data = (void*)2, }, { .option = 12, .copy_only_if_valid = 1,
net/dns.c +15 -4
@@ -194,7 +194,7 @@ static void dns_handler(void *ctx, char *packet, unsigned len) } } -IPaddr_t resolv (char *host) +static IPaddr_t resolv_on (char *host,const char * nameserver) {IPaddr_t ip;const char *ns;
@@ -206,10 +206,10 @@ IPaddr_t resolv(char *host) dns_state =STATE_INIT ; - ns =getenv ("net.nameserver" ); + ns =getenv (nameserver);if (!ns || !*ns) { -printk ("%s: no nameserver specified in $net.nameserver\n" , - __func__); +printk ("%s: no nameserver specified in $%s\n" , + __func__, nameserver);return 0 ; }
@@ -241,6 +241,17 @@ IPaddr_t resolv(char *host)return dns_ip; } +IPaddr_t resolv (char *host) +{ +IPaddr_t ip; + + ip =resolv_on (host,"net.nameserver0" ); +if (ip ==0 ) + ip =resolv_on (host,"net.nameserver1" ); + +return ip; +} +static int do_host (int argc,char *argv[]) {IPaddr_t ip;
net/net.c +2 -1
@@ -677,7 +677,8 @@ static int net_init(void) NetRxPackets[i] =net_alloc_packet ();register_device (&net_device); -dev_add_param (&net_device,"nameserver" ,NULL ,NULL ,0 ); +dev_add_param (&net_device,"nameserver0" ,NULL ,NULL ,0 ); +dev_add_param (&net_device,"nameserver1" ,NULL ,NULL ,0 );dev_add_param (&net_device,"domainname" ,NULL ,NULL ,0 );return 0 ;
Signature · 7 lines
1.7.10.4 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Re: [PATCH 1/1] net: add multiple nameserver support
Quoted 9 lines · Jean-Christophe PLAGNIOL-VILLARD
net/dns.c +1
-0+static int do_host (int argc,char *argv[]) {IPaddr_t ip;net/net.c +0
-0
net/net.c static int net_init(void) · line 681
Quoted 6 lines
net/net.c +2
-1@@ -677,7 +677,8 @@ static int net_init(void) NetRxPackets[i] =net_alloc_packet ();register_device (&net_device); -dev_add_param (&net_device,"nameserver" ,NULL ,NULL ,0 ); +dev_add_param (&net_device,"nameserver0" ,NULL ,NULL ,0 ); +dev_add_param (&net_device,"nameserver1" ,NULL ,NULL ,0 );
What do you think about a function that checks if nameserver0/1 is really an IP, like this:
+static int net_set_namesrv(struct device_d *dev, struct param_d *param, const char *val) +{
+ IPaddr_t ip;
+
+ if (!val)
+ return -EINVAL;
+
+ if (string_to_ip(val, &ip))
+ return -EINVAL;
+
+ dev_param_set_generic(dev, param, val);
+
+ return 0;
+}
+
static int net_init(void)
{
int i;
@@ -677,7 +692,8 @@ static int net_init(void)
NetRxPackets[i] = net_alloc_packet();
register_device(&net_device);
- dev_add_param(&net_device, "nameserver", NULL, NULL, 0);
+ dev_add_param(&net_device, "nameserver0", net_set_namesrv, NULL, 0);
+ dev_add_param(&net_device, "nameserver1", net_set_namesrv, NULL, 0);
dev_add_param(&net_device, "domainname", NULL, NULL, 0);
return 0;
---
It has the benefit that you get an error message ("set parameter:
Invalid argument") if it's defined wrong.
Thanks,
-- Christoph
_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
Re: [PATCH 1/1] net: add multiple nameserver support
Quoted 14 lines · Christoph Fritz
Quoted 11 lines · Jean-Christophe PLAGNIOL-VILLARD
net/dns.c +1
-0+static int do_host (int argc,char *argv[]) {IPaddr_t ip;net/net.c +0
-0@@ -677,7 +677,8 @@ static int net_init(void) NetRxPackets[i] =net_alloc_packet ();
Quoted 7 lines
net/net.c static int net_init(void) · line 681
Quoted 4 lines
net/net.c +2
-1register_device (&net_device); -dev_add_param (&net_device,"nameserver" ,NULL ,NULL ,0 ); +dev_add_param (&net_device,"nameserver0" ,NULL ,NULL ,0 ); +dev_add_param (&net_device,"nameserver1" ,NULL ,NULL ,0 );What do you think about a function that checks if nameserver0/1 is really an IP, like this:
why not I've not strong felling about it
Best Regards,
J.
_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
PATCH 1/1 net: add multiple nameserver support
Today limit it to 2
Update dhcp support as option 6 allow to get n nameserver If more than 2 nameserver are provided by the DHCP server ignore them.
--- net/dhcp.c | 24 +++++++++++++++++++----- net/dns.c | 19 +++++++++++++++---- net/net.c | 18 +++++++++++++++++- 3 files changed, 51 insertions(+), 10 deletions(-)
net/dhcp.c +18 -4
@@ -137,12 +137,24 @@ static void gateway_handle(struct dhcp_opt *opt, unsigned char *popt, int optlennet_set_gateway (ip); } -static void env_ip_handle (struct dhcp_opt *opt,unsigned char *popt,int optlen) +static void env_ip_multiple_handle (struct dhcp_opt *opt,unsigned char *popt,int optlen) { +char *var_name;IPaddr_t ip; +int i; +int max = (int )opt->data; - ip =net_read_ip (popt); -setenv_ip (opt->barebox_var_name, ip); +for (i =0 ; optlen >0 && i < max; i++) { + var_name =asprintf ("%s%d" , opt->barebox_var_name, i); +if (!var_name) +return ; + + ip =net_read_ip (popt); +setenv_ip (var_name, ip); + optlen -=4 ; + popt +=4 ; +free (var_name); + } }static void env_str_handle (struct dhcp_opt *opt,unsigned char *popt,int optlen)
@@ -210,8 +222,10 @@ struct dhcp_opt dhcp_options[] = { .handle = gateway_handle, }, { .option = 6, - .handle = env_ip_handle, + .handle = env_ip_multiple_handle, .barebox_var_name = "net.nameserver", + /* max today supported, ignore if more */ + .data = (void*)2, }, { .option = 12, .copy_only_if_valid = 1,
net/dns.c +15 -4
@@ -194,7 +194,7 @@ static void dns_handler(void *ctx, char *packet, unsigned len) } } -IPaddr_t resolv (char *host) +static IPaddr_t resolv_on (char *host,const char * nameserver) {IPaddr_t ip;const char *ns;
@@ -206,10 +206,10 @@ IPaddr_t resolv(char *host) dns_state =STATE_INIT ; - ns =getenv ("net.nameserver" ); + ns =getenv (nameserver);if (!ns || !*ns) { -printk ("%s: no nameserver specified in $net.nameserver\n" , - __func__); +printk ("%s: no nameserver specified in $%s\n" , + __func__, nameserver);return 0 ; }
@@ -241,6 +241,17 @@ IPaddr_t resolv(char *host)return dns_ip; } +IPaddr_t resolv (char *host) +{ +IPaddr_t ip; + + ip =resolv_on (host,"net.nameserver0" ); +if (ip ==0 ) + ip =resolv_on (host,"net.nameserver1" ); + +return ip; +} +static int do_host (int argc,char *argv[]) {IPaddr_t ip;
net/net.c +17 -1
@@ -669,6 +669,21 @@ static struct device_d net_device = { .id = DEVICE_ID_SINGLE, }; +static int net_set_namesrv (struct device_d *dev,struct param_d *param,const char *val) +{ +IPaddr_t ip; + +if (!val) +return -EINVAL ; + +if (string_to_ip (val, &ip)) +return -EINVAL ; + +dev_param_set_generic (dev, param, val); + +return 0 ; +} +static int net_init (void ) {int i;
@@ -677,7 +692,8 @@ static int net_init(void) NetRxPackets[i] =net_alloc_packet ();register_device (&net_device); -dev_add_param (&net_device,"nameserver" ,NULL ,NULL ,0 ); +dev_add_param (&net_device,"nameserver0" , net_set_namesrv,NULL ,0 ); +dev_add_param (&net_device,"nameserver1" , net_set_namesrv,NULL ,0 );dev_add_param (&net_device,"domainname" ,NULL ,NULL ,0 );return 0 ;
Signature · 8 lines
1.7.2.5 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Re: [PATCH] net: add multiple nameserver support
Quoted 4 lines · Christoph Fritz
Today limit it to 2
Update dhcp support as option 6 allow to get n nameserver If more than 2 nameserver are provided by the DHCP server ignore them.
I rethink about it and no I do not want wo check it the format here
as I plan to make the globalvar more commoon and swtich net to it too
Best Regards,
J.
_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
Christoph Fritz
Tested-byRe: [PATCH] net: add multiple nameserver support
Quoted 9 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 4 lines · Christoph Fritz
Today limit it to 2
Update dhcp support as option 6 allow to get n nameserver If more than 2 nameserver are provided by the DHCP server ignore them.
I rethink about it and no I do not want wo check it the format here
as I plan to make the globalvar more commoon and swtich net to it too
I'm fine when the not modified version gets applied.
You can add a
Thanks,
-- Christoph
_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
Re: [PATCH] net: add multiple nameserver support
Quoted 9 lines · Christoph Fritz
Quoted 7 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 4 lines · Christoph Fritz
Today limit it to 2
Update dhcp support as option 6 allow to get n nameserver If more than 2 nameserver are provided by the DHCP server ignore them.
I rethink about it and no I do not want wo check it the format here
Quoted 7 lines
Quoted 2 lines
as I plan to make the globalvar more commoon and swtich net to it too
I'm fine when the not modified version gets applied.
You can add a
Tested-by Christoph Fritz <[email protected]>
*ping*, has this patch gotten lost?
_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox