mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-07 19:34:56 +00:00
lxip: dhcp update on link state change
This commit is contained in:
parent
a1453d83ff
commit
b8b34efef9
@ -48,4 +48,6 @@ extern "C" void lxip_configure_static(char const *addr,
|
||||
char const *nameserver);
|
||||
extern "C" void lxip_configure_dhcp();
|
||||
|
||||
extern "C" bool lxip_do_dhcp();
|
||||
|
||||
#endif /* _LX_H_ */
|
||||
|
@ -509,7 +509,6 @@ void lxip_init()
|
||||
/*
|
||||
* Network configuration
|
||||
*/
|
||||
|
||||
static void lxip_configure(char const *address_config)
|
||||
{
|
||||
__ip_auto_config_setup((char *)address_config);
|
||||
@ -517,10 +516,16 @@ static void lxip_configure(char const *address_config)
|
||||
}
|
||||
|
||||
|
||||
static bool dhcp_configured = false;
|
||||
static bool dhcp_pending = false;
|
||||
|
||||
void lxip_configure_static(char const *addr, char const *netmask,
|
||||
char const *gateway, char const *nameserver)
|
||||
{
|
||||
char address_config[128];
|
||||
|
||||
dhcp_configured = false;
|
||||
|
||||
snprintf(address_config, sizeof(address_config),
|
||||
"%s::%s:%s:::off:%s",
|
||||
addr, gateway, netmask, nameserver);
|
||||
@ -530,7 +535,17 @@ void lxip_configure_static(char const *addr, char const *netmask,
|
||||
|
||||
void lxip_configure_dhcp()
|
||||
{
|
||||
dhcp_configured = true;
|
||||
dhcp_pending = true;
|
||||
|
||||
lxip_configure("dhcp");
|
||||
dhcp_pending = false;
|
||||
}
|
||||
|
||||
|
||||
bool lxip_do_dhcp()
|
||||
{
|
||||
return dhcp_configured && !dhcp_pending;
|
||||
}
|
||||
|
||||
|
||||
|
@ -38,9 +38,19 @@ class Nic_client
|
||||
Genode::Signal_handler<Nic_client> _sink_ack;
|
||||
Genode::Signal_handler<Nic_client> _sink_submit;
|
||||
Genode::Signal_handler<Nic_client> _source_ack;
|
||||
Genode::Signal_handler<Nic_client> _link_state_change;
|
||||
|
||||
void (*_tick)();
|
||||
|
||||
void _link_state()
|
||||
{
|
||||
if (_nic.link_state() == false || lxip_do_dhcp() == false)
|
||||
return;
|
||||
|
||||
/* reconnect dhcp client */
|
||||
lxip_configure_dhcp();
|
||||
}
|
||||
|
||||
/**
|
||||
* submit queue not empty anymore
|
||||
*/
|
||||
@ -98,11 +108,13 @@ class Nic_client
|
||||
_sink_ack(ep, *this, &Nic_client::_packet_avail),
|
||||
_sink_submit(ep, *this, &Nic_client::_ready_to_ack),
|
||||
_source_ack(ep, *this, &Nic_client::_ack_avail),
|
||||
_link_state_change(ep, *this, &Nic_client::_link_state),
|
||||
_tick(ticker)
|
||||
{
|
||||
_nic.rx_channel()->sigh_ready_to_ack(_sink_ack);
|
||||
_nic.rx_channel()->sigh_packet_avail(_sink_submit);
|
||||
_nic.tx_channel()->sigh_ack_avail(_source_ack);
|
||||
_nic.link_state_sigh(_link_state_change);
|
||||
/* ready_to_submit not handled */
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user