Merge branch 'for-next/misc'
This commit is contained in:
commit
bfdb14c7da
|
@ -28,9 +28,11 @@ can be checked out as follows:
|
||||||
Checking connectivity... done.
|
Checking connectivity... done.
|
||||||
Checking out files: 100% (5651/5651), done.
|
Checking out files: 100% (5651/5651), done.
|
||||||
|
|
||||||
After this, make sure to check out the appropriate branch. If you want to
|
By default, the master branch is checked out. If you want to develop for
|
||||||
develop for barebox, it's best to check out the ``next`` branch rather than
|
barebox, this is the right branch to send patches against.
|
||||||
the ``master`` branch:
|
|
||||||
|
If you want to see which patches are already selected for the next release,
|
||||||
|
you can look at the ``next`` branch:
|
||||||
|
|
||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
|
|
|
@ -231,8 +231,10 @@ static void *am33xx_net_boot(void)
|
||||||
int err;
|
int err;
|
||||||
int len;
|
int len;
|
||||||
struct dhcp_req_param dhcp_param;
|
struct dhcp_req_param dhcp_param;
|
||||||
const char *bootfile, *ip;
|
const char *bootfile;
|
||||||
|
IPaddr_t ip;
|
||||||
char *file;
|
char *file;
|
||||||
|
char ip4_str[sizeof("255.255.255.255")];
|
||||||
|
|
||||||
am33xx_register_ethaddr(0, 0);
|
am33xx_register_ethaddr(0, 0);
|
||||||
|
|
||||||
|
@ -258,8 +260,9 @@ static void *am33xx_net_boot(void)
|
||||||
if (err)
|
if (err)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
ip = ip_to_string(net_get_serverip());
|
ip = net_get_serverip();
|
||||||
err = mount(ip, "tftp", TFTP_MOUNT, NULL);
|
sprintf(ip4_str, "%pI4", &ip);
|
||||||
|
err = mount(ip4_str, "tftp", TFTP_MOUNT, NULL);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
printf("Unable to mount.\n");
|
printf("Unable to mount.\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -31,11 +31,6 @@ else
|
||||||
CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs))
|
CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
|
|
||||||
-e s/arm.*/arm/ -e s/sa110/arm/ \
|
|
||||||
-e s/s390x/s390/ -e s/parisc64/parisc/ \
|
|
||||||
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ )
|
|
||||||
|
|
||||||
archprepare: maketools
|
archprepare: maketools
|
||||||
|
|
||||||
PHONY += maketools
|
PHONY += maketools
|
||||||
|
|
|
@ -36,6 +36,7 @@ static int do_tftpb(int argc, char *argv[])
|
||||||
int tftp_push = 0;
|
int tftp_push = 0;
|
||||||
int ret;
|
int ret;
|
||||||
IPaddr_t ip;
|
IPaddr_t ip;
|
||||||
|
char ip4_str[sizeof("255.255.255.255")];
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, "p")) > 0) {
|
while ((opt = getopt(argc, argv, "p")) > 0) {
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
|
@ -73,7 +74,8 @@ static int do_tftpb(int argc, char *argv[])
|
||||||
goto err_free;
|
goto err_free;
|
||||||
|
|
||||||
ip = net_get_serverip();
|
ip = net_get_serverip();
|
||||||
ret = mount(ip_to_string(ip), "tftp", TFTP_MOUNT_PATH, NULL);
|
sprintf(ip4_str, "%pI4", &ip);
|
||||||
|
ret = mount(ip4_str, "tftp", TFTP_MOUNT_PATH, NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_rmdir;
|
goto err_rmdir;
|
||||||
|
|
||||||
|
|
|
@ -306,7 +306,7 @@ static char *parse_nfs_url(const char *url)
|
||||||
if (ip == 0)
|
if (ip == 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
hostpath = basprintf("%s:%s", ip_to_string(ip), path);
|
hostpath = basprintf("%pI4:%s", &ip, path);
|
||||||
|
|
||||||
prevpath = nfs_find_mountpath(hostpath);
|
prevpath = nfs_find_mountpath(hostpath);
|
||||||
|
|
||||||
|
@ -348,7 +348,7 @@ out:
|
||||||
* entry_is_of_compatible - check if a bootspec entry is compatible with
|
* entry_is_of_compatible - check if a bootspec entry is compatible with
|
||||||
* the current machine.
|
* the current machine.
|
||||||
*
|
*
|
||||||
* returns true is the entry is compatible, false otherwise
|
* returns true if the entry is compatible, false otherwise
|
||||||
*/
|
*/
|
||||||
static bool entry_is_of_compatible(struct blspec_entry *entry)
|
static bool entry_is_of_compatible(struct blspec_entry *entry)
|
||||||
{
|
{
|
||||||
|
|
|
@ -279,7 +279,7 @@ static int env_param_complete(struct string_list *sl, char *instr, int eval)
|
||||||
struct env_context *c;
|
struct env_context *c;
|
||||||
char *instr_param;
|
char *instr_param;
|
||||||
int len;
|
int len;
|
||||||
char end = '=';
|
char end = '=', *pos, *dot;
|
||||||
char *begin = "";
|
char *begin = "";
|
||||||
|
|
||||||
if (!instr)
|
if (!instr)
|
||||||
|
@ -290,7 +290,6 @@ static int env_param_complete(struct string_list *sl, char *instr, int eval)
|
||||||
end = ' ';
|
end = ' ';
|
||||||
}
|
}
|
||||||
|
|
||||||
instr_param = strchr(instr, '.');
|
|
||||||
len = strlen(instr);
|
len = strlen(instr);
|
||||||
|
|
||||||
c = get_current_context();
|
c = get_current_context();
|
||||||
|
@ -312,20 +311,21 @@ static int env_param_complete(struct string_list *sl, char *instr, int eval)
|
||||||
c = c->parent;
|
c = c->parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (instr_param) {
|
pos = instr;
|
||||||
|
while ((dot = strchr(pos, '.'))) {
|
||||||
char *devname;
|
char *devname;
|
||||||
|
|
||||||
len = (instr_param - instr);
|
devname = xstrndup(instr, dot - instr);
|
||||||
|
|
||||||
devname = xstrndup(instr, len);
|
|
||||||
|
|
||||||
instr_param++;
|
instr_param++;
|
||||||
|
|
||||||
dev = get_device_by_name(devname);
|
dev = get_device_by_name(devname);
|
||||||
free(devname);
|
free(devname);
|
||||||
|
|
||||||
if (dev)
|
if (dev)
|
||||||
device_param_complete(dev, sl, instr_param, eval);
|
device_param_complete(dev, sl, dot + 1, eval);
|
||||||
return 0;
|
|
||||||
|
pos = dot + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = strlen(instr);
|
len = strlen(instr);
|
||||||
|
|
50
common/env.c
50
common/env.c
|
@ -135,25 +135,45 @@ static const char *getenv_raw(struct list_head *l, const char *name)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *getenv (const char *name)
|
static const char *dev_getenv(const char *name)
|
||||||
|
{
|
||||||
|
const char *pos, *val, *dot, *varname;
|
||||||
|
char *devname;
|
||||||
|
struct device_d *dev;
|
||||||
|
|
||||||
|
pos = name;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
dot = strchr(pos, '.');
|
||||||
|
if (!dot)
|
||||||
|
break;
|
||||||
|
|
||||||
|
devname = xstrndup(name, dot - name);
|
||||||
|
varname = dot + 1;
|
||||||
|
|
||||||
|
dev = get_device_by_name(devname);
|
||||||
|
|
||||||
|
free(devname);
|
||||||
|
|
||||||
|
if (dev) {
|
||||||
|
val = dev_get_param(dev, varname);
|
||||||
|
if (val)
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
pos = dot + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *getenv(const char *name)
|
||||||
{
|
{
|
||||||
struct env_context *c;
|
struct env_context *c;
|
||||||
const char *val;
|
const char *val;
|
||||||
|
|
||||||
if (strchr(name, '.')) {
|
if (strchr(name, '.'))
|
||||||
const char *ret = NULL;
|
return dev_getenv(name);
|
||||||
char *devstr = strdup(name);
|
|
||||||
char *par = strchr(devstr, '.');
|
|
||||||
struct device_d *dev;
|
|
||||||
*par = 0;
|
|
||||||
dev = get_device_by_name(devstr);
|
|
||||||
if (dev) {
|
|
||||||
par++;
|
|
||||||
ret = dev_get_param(dev, par);
|
|
||||||
}
|
|
||||||
free(devstr);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
c = context;
|
c = context;
|
||||||
|
|
||||||
|
|
|
@ -382,7 +382,7 @@ EXPORT_SYMBOL(envfs_save);
|
||||||
static int envfs_check_super(struct envfs_super *super, size_t *size)
|
static int envfs_check_super(struct envfs_super *super, size_t *size)
|
||||||
{
|
{
|
||||||
if (ENVFS_32(super->magic) != ENVFS_MAGIC) {
|
if (ENVFS_32(super->magic) != ENVFS_MAGIC) {
|
||||||
printf("envfs: wrong magic\n");
|
printf("envfs: no envfs (magic mismatch) - envfs newer written?\n");
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,9 +35,9 @@
|
||||||
*
|
*
|
||||||
* fpga@0 {
|
* fpga@0 {
|
||||||
* compatible = "altr,fpga-passive-serial";
|
* compatible = "altr,fpga-passive-serial";
|
||||||
* nstat-gpio = <&gpio4 18 0>;
|
* nstat-gpios = <&gpio4 18 0>;
|
||||||
* confd-gpio = <&gpio4 19 0>;
|
* confd-gpios = <&gpio4 19 0>;
|
||||||
* nconfig-gpio = <&gpio4 20 0>;
|
* nconfig-gpios = <&gpio4 20 0>;
|
||||||
* spi-max-frequency = <10000000>;
|
* spi-max-frequency = <10000000>;
|
||||||
* reg = <0>;
|
* reg = <0>;
|
||||||
* };
|
* };
|
||||||
|
@ -220,26 +220,24 @@ static int altera_spi_of(struct device_d *dev, struct fpga_spi *this)
|
||||||
const char *name;
|
const char *name;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
name = "nstat-gpio";
|
name = "nstat-gpios";
|
||||||
if (!of_get_property(n, name, NULL)) {
|
this->nstat_gpio = of_get_named_gpio(n, name, 0);
|
||||||
|
if (this->nstat_gpio == -ENOENT) {
|
||||||
dev_info(dev, "nstat-gpio is not specified, assuming it is not connected\n");
|
dev_info(dev, "nstat-gpio is not specified, assuming it is not connected\n");
|
||||||
this->nstat_gpio = -1;
|
this->nstat_gpio = -1;
|
||||||
} else {
|
} else if (this->nstat_gpio < 0) {
|
||||||
this->nstat_gpio = of_get_named_gpio(n, name, 0);
|
ret = this->nstat_gpio;
|
||||||
if (this->nstat_gpio < 0) {
|
goto out;
|
||||||
ret = this->nstat_gpio;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
name = "confd-gpio";
|
name = "confd-gpios";
|
||||||
this->confd_gpio = of_get_named_gpio(n, name, 0);
|
this->confd_gpio = of_get_named_gpio(n, name, 0);
|
||||||
if (this->confd_gpio < 0) {
|
if (this->confd_gpio < 0) {
|
||||||
ret = this->confd_gpio;
|
ret = this->confd_gpio;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
name = "nconfig-gpio";
|
name = "nconfig-gpios";
|
||||||
this->nconfig_gpio = of_get_named_gpio(n, name, 0);
|
this->nconfig_gpio = of_get_named_gpio(n, name, 0);
|
||||||
if (this->nconfig_gpio < 0) {
|
if (this->nconfig_gpio < 0) {
|
||||||
ret = this->nconfig_gpio;
|
ret = this->nconfig_gpio;
|
||||||
|
@ -330,7 +328,7 @@ out:
|
||||||
|
|
||||||
static struct of_device_id altera_spi_id_table[] = {
|
static struct of_device_id altera_spi_id_table[] = {
|
||||||
{
|
{
|
||||||
.compatible = "altr,passive-serial",
|
.compatible = "altr,fpga-passive-serial",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
12
fs/nfs.c
12
fs/nfs.c
|
@ -1314,10 +1314,9 @@ static char *rootnfsopts;
|
||||||
static void nfs_set_rootarg(struct nfs_priv *npriv, struct fs_device_d *fsdev)
|
static void nfs_set_rootarg(struct nfs_priv *npriv, struct fs_device_d *fsdev)
|
||||||
{
|
{
|
||||||
char *str, *tmp;
|
char *str, *tmp;
|
||||||
const char *ip;
|
const char *bootargs;
|
||||||
|
|
||||||
ip = ip_to_string(npriv->server);
|
str = basprintf("root=/dev/nfs nfsroot=%pI4:%s%s%s", &npriv->server, npriv->path,
|
||||||
str = basprintf("root=/dev/nfs nfsroot=%s:%s%s%s", ip, npriv->path,
|
|
||||||
rootnfsopts[0] ? "," : "", rootnfsopts);
|
rootnfsopts[0] ? "," : "", rootnfsopts);
|
||||||
|
|
||||||
/* forward specific mount options on demand */
|
/* forward specific mount options on demand */
|
||||||
|
@ -1333,6 +1332,13 @@ static void nfs_set_rootarg(struct nfs_priv *npriv, struct fs_device_d *fsdev)
|
||||||
str = tmp;
|
str = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bootargs = dev_get_param(&npriv->con->edev->dev, "linux.bootargs");
|
||||||
|
if (bootargs) {
|
||||||
|
tmp = basprintf("%s %s", str, bootargs);
|
||||||
|
free(str);
|
||||||
|
str = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
fsdev_set_linux_rootarg(fsdev, str);
|
fsdev_set_linux_rootarg(fsdev, str);
|
||||||
|
|
||||||
free(str);
|
free(str);
|
||||||
|
|
|
@ -62,6 +62,7 @@ struct eth_device {
|
||||||
IPaddr_t netmask;
|
IPaddr_t netmask;
|
||||||
IPaddr_t gateway;
|
IPaddr_t gateway;
|
||||||
char ethaddr[6];
|
char ethaddr[6];
|
||||||
|
char *bootarg;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define dev_to_edev(d) container_of(d, struct eth_device, dev)
|
#define dev_to_edev(d) container_of(d, struct eth_device, dev)
|
||||||
|
@ -257,9 +258,6 @@ static inline int net_eth_to_udplen(char *pkt)
|
||||||
int net_checksum_ok(unsigned char *, int); /* Return true if cksum OK */
|
int net_checksum_ok(unsigned char *, int); /* Return true if cksum OK */
|
||||||
uint16_t net_checksum(unsigned char *, int); /* Calculate the checksum */
|
uint16_t net_checksum(unsigned char *, int); /* Calculate the checksum */
|
||||||
|
|
||||||
/* Print an IP address on the console */
|
|
||||||
void print_IPaddr (IPaddr_t);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The following functions are a bit ugly, but necessary to deal with
|
* The following functions are a bit ugly, but necessary to deal with
|
||||||
* alignment restrictions on ARM.
|
* alignment restrictions on ARM.
|
||||||
|
@ -308,9 +306,6 @@ static inline void net_copy_uint32(uint32_t *to, uint32_t *from)
|
||||||
memcpy(to, from, sizeof(uint32_t));
|
memcpy(to, from, sizeof(uint32_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert an IP address to a string */
|
|
||||||
char *ip_to_string (IPaddr_t x);
|
|
||||||
|
|
||||||
/* Convert a string to ip address */
|
/* Convert a string to ip address */
|
||||||
int string_to_ip(const char *s, IPaddr_t *ip);
|
int string_to_ip(const char *s, IPaddr_t *ip);
|
||||||
|
|
||||||
|
|
|
@ -777,7 +777,7 @@ static const char *param_ip_get(struct device_d *dev, struct param_d *p)
|
||||||
}
|
}
|
||||||
|
|
||||||
free(p->value);
|
free(p->value);
|
||||||
p->value = xstrdup(ip_to_string(*pi->ip));
|
p->value = xasprintf("%pI4", pi->ip);
|
||||||
|
|
||||||
return p->value;
|
return p->value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -190,6 +190,27 @@ static char *symbol_string(char *buf, char *end, void *ptr, int field_width, int
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static noinline_for_stack
|
||||||
|
char *ip4_addr_string(char *buf, char *end, const u8 *addr, int field_width,
|
||||||
|
int precision, int flags, const char *fmt)
|
||||||
|
{
|
||||||
|
char ip4_addr[sizeof("255.255.255.255")];
|
||||||
|
char *pos;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
pos = ip4_addr;
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
pos = number(pos, pos + 3, addr[i], 10, 0, 0, LEFT);
|
||||||
|
if (i < 3)
|
||||||
|
*pos++ = '.';
|
||||||
|
}
|
||||||
|
|
||||||
|
*pos = 0;
|
||||||
|
|
||||||
|
return string(buf, end, ip4_addr, field_width, precision, flags);
|
||||||
|
}
|
||||||
|
|
||||||
static noinline_for_stack
|
static noinline_for_stack
|
||||||
char *uuid_string(char *buf, char *end, const u8 *addr, int field_width,
|
char *uuid_string(char *buf, char *end, const u8 *addr, int field_width,
|
||||||
int precision, int flags, const char *fmt)
|
int precision, int flags, const char *fmt)
|
||||||
|
@ -267,6 +288,8 @@ char *address_val(char *buf, char *end, const void *addr,
|
||||||
*
|
*
|
||||||
* Right now we handle:
|
* Right now we handle:
|
||||||
*
|
*
|
||||||
|
* - 'I' [4] for IPv4 addresses printed in the usual way
|
||||||
|
* IPv4 uses dot-separated decimal without leading 0's (1.2.3.4)
|
||||||
* - 'S' For symbolic direct pointers
|
* - 'S' For symbolic direct pointers
|
||||||
* - 'U' For a 16 byte UUID/GUID, it prints the UUID/GUID in the form
|
* - 'U' For a 16 byte UUID/GUID, it prints the UUID/GUID in the form
|
||||||
* "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
|
* "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
|
||||||
|
@ -297,6 +320,12 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr, int field
|
||||||
break;
|
break;
|
||||||
case 'a':
|
case 'a':
|
||||||
return address_val(buf, end, ptr, field_width, precision, flags, fmt);
|
return address_val(buf, end, ptr, field_width, precision, flags, fmt);
|
||||||
|
case 'I':
|
||||||
|
switch (fmt[1]) {
|
||||||
|
case '4':
|
||||||
|
return ip4_addr_string(buf, end, ptr, field_width, precision, flags, fmt);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
flags |= SMALL;
|
flags |= SMALL;
|
||||||
if (field_width == -1) {
|
if (field_width == -1) {
|
||||||
|
|
|
@ -613,13 +613,13 @@ static void dhcp_handler(void *ctx, char *packet, unsigned int len)
|
||||||
debug ("%s: State REQUESTING\n", __func__);
|
debug ("%s: State REQUESTING\n", __func__);
|
||||||
|
|
||||||
if (dhcp_message_type((u8 *)bp->bp_vend) == DHCP_ACK ) {
|
if (dhcp_message_type((u8 *)bp->bp_vend) == DHCP_ACK ) {
|
||||||
|
IPaddr_t ip;
|
||||||
if (net_read_uint32((uint32_t *)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC))
|
if (net_read_uint32((uint32_t *)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC))
|
||||||
dhcp_options_process((u8 *)&bp->bp_vend[4], bp);
|
dhcp_options_process((u8 *)&bp->bp_vend[4], bp);
|
||||||
bootp_copy_net_params(bp); /* Store net params from reply */
|
bootp_copy_net_params(bp); /* Store net params from reply */
|
||||||
dhcp_state = BOUND;
|
dhcp_state = BOUND;
|
||||||
puts ("DHCP client bound to address ");
|
ip = net_get_ip();
|
||||||
print_IPaddr(net_get_ip());
|
printf("DHCP client bound to address %pI4\n", &ip);
|
||||||
putchar('\n');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -221,7 +221,7 @@ IPaddr_t resolv(const char *host)
|
||||||
if (string_to_ip(ns, &ip))
|
if (string_to_ip(ns, &ip))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
debug("resolving host %s via nameserver %s\n", host, ip_to_string(ip));
|
debug("resolving host %s via nameserver %pI4\n", host, &ip);
|
||||||
|
|
||||||
dns_con = net_udp_new(ip, DNS_PORT, dns_handler, NULL);
|
dns_con = net_udp_new(ip, DNS_PORT, dns_handler, NULL);
|
||||||
if (IS_ERR(dns_con))
|
if (IS_ERR(dns_con))
|
||||||
|
@ -258,9 +258,7 @@ static int do_host(int argc, char *argv[])
|
||||||
if (!ip)
|
if (!ip)
|
||||||
printf("unknown host %s\n", argv[1]);
|
printf("unknown host %s\n", argv[1]);
|
||||||
else {
|
else {
|
||||||
printf("%s is at ", argv[1]);
|
printf("%s is at %pI4\n", argv[1], &ip);
|
||||||
print_IPaddr(ip);
|
|
||||||
printf("\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -384,6 +384,8 @@ int eth_register(struct eth_device *edev)
|
||||||
dev_add_param_ip(dev, "netmask", NULL, NULL, &edev->netmask, edev);
|
dev_add_param_ip(dev, "netmask", NULL, NULL, &edev->netmask, edev);
|
||||||
dev_add_param_mac(dev, "ethaddr", eth_param_set_ethaddr, NULL,
|
dev_add_param_mac(dev, "ethaddr", eth_param_set_ethaddr, NULL,
|
||||||
edev->ethaddr, edev);
|
edev->ethaddr, edev);
|
||||||
|
edev->bootarg = xstrdup("");
|
||||||
|
dev_add_param_string(dev, "linux.bootargs", NULL, NULL, &edev->bootarg, NULL);
|
||||||
|
|
||||||
if (edev->init)
|
if (edev->init)
|
||||||
edev->init(edev);
|
edev->init(edev);
|
||||||
|
|
|
@ -106,12 +106,21 @@ int ifup(const char *name, unsigned flags)
|
||||||
ret = eth_set_param(dev, "serverip");
|
ret = eth_set_param(dev, "serverip");
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
dev_set_param(dev, "linux.bootargs", "ip=dhcp");
|
||||||
} else if (!strcmp(ip, "static")) {
|
} else if (!strcmp(ip, "static")) {
|
||||||
|
char *bootarg;
|
||||||
for (i = 0; i < ARRAY_SIZE(vars); i++) {
|
for (i = 0; i < ARRAY_SIZE(vars); i++) {
|
||||||
ret = eth_set_param(dev, vars[i]);
|
ret = eth_set_param(dev, vars[i]);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
bootarg = basprintf("ip=%pI4:%pI4:%pI4:%pI4:::",
|
||||||
|
&edev->ipaddr,
|
||||||
|
&edev->serverip,
|
||||||
|
&edev->gateway,
|
||||||
|
&edev->netmask);
|
||||||
|
dev_set_param(dev, "linux.bootargs", bootarg);
|
||||||
|
free(bootarg);
|
||||||
} else {
|
} else {
|
||||||
pr_err("unknown ip type: %s\n", ip);
|
pr_err("unknown ip type: %s\n", ip);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
|
19
net/lib.c
19
net/lib.c
|
@ -57,25 +57,6 @@ void ethaddr_to_string(const u8 enetaddr[6], char *str)
|
||||||
enetaddr[4], enetaddr[5]);
|
enetaddr[4], enetaddr[5]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_IPaddr(IPaddr_t x)
|
|
||||||
{
|
|
||||||
puts(ip_to_string(x));
|
|
||||||
}
|
|
||||||
|
|
||||||
char *ip_to_string(IPaddr_t x)
|
|
||||||
{
|
|
||||||
static char s[sizeof("xxx.xxx.xxx.xxx")];
|
|
||||||
|
|
||||||
x = ntohl(x);
|
|
||||||
sprintf(s, "%d.%d.%d.%d",
|
|
||||||
(int) ((x >> 24) & 0xff),
|
|
||||||
(int) ((x >> 16) & 0xff),
|
|
||||||
(int) ((x >> 8) & 0xff), (int) ((x >> 0) & 0xff)
|
|
||||||
);
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
int string_to_ip(const char *s, IPaddr_t *ip)
|
int string_to_ip(const char *s, IPaddr_t *ip)
|
||||||
{
|
{
|
||||||
IPaddr_t addr = 0;
|
IPaddr_t addr = 0;
|
||||||
|
|
|
@ -78,9 +78,9 @@ IPaddr_t getenv_ip(const char *name)
|
||||||
|
|
||||||
int setenv_ip(const char *name, IPaddr_t ip)
|
int setenv_ip(const char *name, IPaddr_t ip)
|
||||||
{
|
{
|
||||||
const char *str;
|
char str[sizeof("255.255.255.255")];
|
||||||
|
|
||||||
str = ip_to_string(ip);
|
sprintf(str, "%pI4", &ip);
|
||||||
|
|
||||||
setenv(name, str);
|
setenv(name, str);
|
||||||
|
|
||||||
|
|
|
@ -137,7 +137,7 @@ static int nc_set_active(struct console_device *cdev, unsigned flags)
|
||||||
|
|
||||||
net_udp_bind(priv->con, priv->port);
|
net_udp_bind(priv->con, priv->port);
|
||||||
|
|
||||||
pr_info("netconsole initialized with %s:%d\n", ip_to_string(priv->ip), priv->port);
|
pr_info("netconsole initialized with %pI4:%d\n", &priv->ip, priv->port);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue