Merge branch 'for-next/netconsole'
This commit is contained in:
commit
b396f38596
|
@ -61,15 +61,15 @@ Network console
|
|||
barebox has a UDP-based network console. If enabled in the config, you will see
|
||||
something like this during startup::
|
||||
|
||||
registered netconsole as cs1
|
||||
registered netconsole as netconsole
|
||||
|
||||
By default the network console is disabled during runtime to prevent security
|
||||
risks. It can be enabled using:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
cs1.ip=192.168.23.2
|
||||
cs1.active=ioe
|
||||
netconsole.ip=192.168.23.2
|
||||
netconsole.active=ioe
|
||||
|
||||
This will send UDP packets to 192.168.23.2 on port 6666. On 192.168.23.2 the
|
||||
scripts/netconsole script can be used to control barebox:
|
||||
|
|
|
@ -64,6 +64,7 @@ static int console_std_set(struct device_d *dev, struct param_d *param,
|
|||
struct console_device *cdev = to_console_dev(dev);
|
||||
char active[4];
|
||||
unsigned int flag = 0, i = 0;
|
||||
int ret;
|
||||
|
||||
if (val) {
|
||||
if (strchr(val, 'i') && cdev->getc) {
|
||||
|
@ -90,6 +91,12 @@ static int console_std_set(struct device_d *dev, struct param_d *param,
|
|||
cdev->setbrg(cdev, cdev->baudrate);
|
||||
}
|
||||
|
||||
if (cdev->set_active) {
|
||||
ret = cdev->set_active(cdev, flag);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
active[i] = 0;
|
||||
cdev->f_active = flag;
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@ struct console_device {
|
|||
int (*setbrg)(struct console_device *cdev, int baudrate);
|
||||
void (*flush)(struct console_device *cdev);
|
||||
int (*set_mode)(struct console_device *cdev, enum console_mode mode);
|
||||
int (*set_active)(struct console_device *cdev, unsigned active);
|
||||
|
||||
char *devname;
|
||||
|
||||
|
|
|
@ -52,24 +52,6 @@ static void nc_handler(void *ctx, char *pkt, unsigned len)
|
|||
kfifo_put(priv->fifo, packet, net_eth_to_udplen(pkt));
|
||||
}
|
||||
|
||||
static int nc_init(void)
|
||||
{
|
||||
struct nc_priv *priv = g_priv;
|
||||
|
||||
if (priv->con)
|
||||
net_unregister(priv->con);
|
||||
|
||||
priv->con = net_udp_new(priv->ip, priv->port, nc_handler, NULL);
|
||||
if (IS_ERR(priv->con)) {
|
||||
int ret = PTR_ERR(priv->con);
|
||||
priv->con = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
net_udp_bind(priv->con, priv->port);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int nc_getc(struct console_device *cdev)
|
||||
{
|
||||
struct nc_priv *priv = container_of(cdev,
|
||||
|
@ -123,9 +105,39 @@ static void nc_putc(struct console_device *cdev, char c)
|
|||
priv->busy = 0;
|
||||
}
|
||||
|
||||
static int nc_port_set(struct param_d *p, void *_priv)
|
||||
static int nc_set_active(struct console_device *cdev, unsigned flags)
|
||||
{
|
||||
nc_init();
|
||||
struct nc_priv *priv = container_of(cdev,
|
||||
struct nc_priv, cdev);
|
||||
|
||||
if (priv->con) {
|
||||
net_unregister(priv->con);
|
||||
priv->con = NULL;
|
||||
}
|
||||
|
||||
if (!flags)
|
||||
return 0;
|
||||
|
||||
if (!priv->port) {
|
||||
pr_err("port not set\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!priv->ip) {
|
||||
pr_err("ip not set\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
priv->con = net_udp_new(priv->ip, priv->port, nc_handler, NULL);
|
||||
if (IS_ERR(priv->con)) {
|
||||
int ret = PTR_ERR(priv->con);
|
||||
priv->con = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
net_udp_bind(priv->con, priv->port);
|
||||
|
||||
pr_info("netconsole initialized with %s:%d\n", ip_to_string(priv->ip), priv->port);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -142,6 +154,7 @@ static int netconsole_init(void)
|
|||
cdev->putc = nc_putc;
|
||||
cdev->getc = nc_getc;
|
||||
cdev->devname = "netconsole";
|
||||
cdev->set_active = nc_set_active;
|
||||
|
||||
g_priv = priv;
|
||||
|
||||
|
@ -157,7 +170,7 @@ static int netconsole_init(void)
|
|||
priv->port = 6666;
|
||||
|
||||
dev_add_param_ip(&cdev->class_dev, "ip", NULL, NULL, &priv->ip, NULL);
|
||||
dev_add_param_int(&cdev->class_dev, "port", nc_port_set, NULL, &priv->port, "%u", NULL);
|
||||
dev_add_param_int(&cdev->class_dev, "port", NULL, NULL, &priv->port, "%u", NULL);
|
||||
|
||||
pr_info("registered as %s%d\n", cdev->class_dev.name, cdev->class_dev.id);
|
||||
|
||||
|
|
Loading…
Reference in New Issue