diff --git a/repos/dde_linux/run/vfs_cfg.run b/repos/dde_linux/run/vfs_cfg.run
index 86e01ff337..460299320d 100644
--- a/repos/dde_linux/run/vfs_cfg.run
+++ b/repos/dde_linux/run/vfs_cfg.run
@@ -54,7 +54,7 @@ append config {
-
+
diff --git a/repos/dde_linux/src/lib/lxip/driver.c b/repos/dde_linux/src/lib/lxip/driver.c
index 14e67db9a9..91f6109bc9 100644
--- a/repos/dde_linux/src/lib/lxip/driver.c
+++ b/repos/dde_linux/src/lib/lxip/driver.c
@@ -31,7 +31,7 @@ static int driver_net_open(struct net_device *dev)
}
-int driver_net_xmit(struct sk_buff *skb, struct net_device *dev)
+static int driver_net_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct net_device_stats *stats = (struct net_device_stats*) netdev_priv(dev);
int len = skb->len;
@@ -56,10 +56,18 @@ int driver_net_xmit(struct sk_buff *skb, struct net_device *dev)
}
+static int driver_change_mtu(struct net_device *dev, int new_mtu)
+{
+ /* possible point to reflect successful MTU setting */
+ return eth_change_mtu(dev, new_mtu);
+}
+
+
static const struct net_device_ops driver_net_ops =
{
.ndo_open = driver_net_open,
.ndo_start_xmit = driver_net_xmit,
+ .ndo_change_mtu = driver_change_mtu,
};
diff --git a/repos/dde_linux/src/lib/lxip/lx.h b/repos/dde_linux/src/lib/lxip/lx.h
index 4a19526803..79fd21de52 100644
--- a/repos/dde_linux/src/lib/lxip/lx.h
+++ b/repos/dde_linux/src/lib/lxip/lx.h
@@ -47,6 +47,7 @@ extern "C" void lxip_configure_static(char const *addr,
char const *gateway,
char const *nameserver);
extern "C" void lxip_configure_dhcp();
+extern "C" void lxip_configure_mtu(unsigned mtu);
extern "C" bool lxip_do_dhcp();
diff --git a/repos/dde_linux/src/lib/lxip/lxc_emul.c b/repos/dde_linux/src/lib/lxip/lxc_emul.c
index e860c6325c..7a6a1ea39a 100644
--- a/repos/dde_linux/src/lib/lxip/lxc_emul.c
+++ b/repos/dde_linux/src/lib/lxip/lxc_emul.c
@@ -528,6 +528,22 @@ static void lxip_configure(char const *address_config)
static bool dhcp_configured = false;
static bool dhcp_pending = false;
+void lxip_configure_mtu(unsigned mtu)
+{
+ /* zero mtu means reset to default */
+ unsigned new_mtu = mtu ? mtu : ETH_DATA_LEN;
+
+ struct net *net;
+ struct net_device *dev;
+
+ for_each_net(net) {
+ for_each_netdev(net, dev) {
+ dev_set_mtu(dev, new_mtu);
+ }
+ }
+}
+
+
void lxip_configure_static(char const *addr, char const *netmask,
char const *gateway, char const *nameserver)
{
diff --git a/repos/dde_linux/src/lib/vfs/lxip/vfs.cc b/repos/dde_linux/src/lib/vfs/lxip/vfs.cc
index 6e29901be7..6ec4ab0d6b 100644
--- a/repos/dde_linux/src/lib/vfs/lxip/vfs.cc
+++ b/repos/dde_linux/src/lib/vfs/lxip/vfs.cc
@@ -1393,15 +1393,19 @@ class Vfs::Lxip_file_system : public Vfs::File_system,
{
typedef String<16> Addr;
- try {
+ unsigned const mtu = config.attribute_value("mtu", 0U);
+ if (mtu) {
+ log("Setting MTU to ", mtu);
+ lxip_configure_mtu(mtu);
+ } else {
+ lxip_configure_mtu(0);
+ }
- if (config.attribute_value("dhcp", false)) {
- log("Using DHCP for interface configuration.");
- lxip_configure_dhcp();
- return;
- }
-
- } catch (...) { }
+ if (config.attribute_value("dhcp", false)) {
+ log("Using DHCP for interface configuration.");
+ lxip_configure_dhcp();
+ return;
+ }
try {
@@ -1426,7 +1430,7 @@ class Vfs::Lxip_file_system : public Vfs::File_system,
lxip_configure_static(ip_addr.string(), netmask.string(),
gateway.string(), nameserver.string());
- } catch (...) { }
+ } catch (...) { }
}
diff --git a/repos/libports/run/netty.inc b/repos/libports/run/netty.inc
index 35ec3654b9..3a0f4b0a69 100644
--- a/repos/libports/run/netty.inc
+++ b/repos/libports/run/netty.inc
@@ -1,11 +1,15 @@
assert_spec x86
+proc use_dynamic_rom { } { return true }
+
set build_components {
core init
- drivers/timer drivers/nic server/ram_fs server/vfs
+ drivers/timer drivers/nic server/vfs
lib/vfs/lxip
}
+lappend_if [use_dynamic_rom] build_components server/dynamic_rom
+
source ${genode_dir}/repos/base/run/platform_drv.inc
append_platform_drv_build_components
@@ -39,12 +43,51 @@ append config {
-
+ }
+append_if [use_dynamic_rom] config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+
+append config {
-
+ }
+
+if {[use_dynamic_rom]} { append config {
+
+
+
+
+ }
+} else { append config {
@@ -53,16 +96,20 @@ append config {
-
+ }
+}
+
+append config {
}
append boot_modules {
- core init timer } [nic_drv_binary] { ram_fs vfs
- ld.lib.so libc.lib.so libm.lib.so posix.lib.so
- vfs_lxip.lib.so lxip.lib.so
+ core init timer } [nic_drv_binary] { vfs
+ ld.lib.so libc.lib.so vfs_lxip.lib.so lxip.lib.so
}
+lappend_if [use_dynamic_rom] boot_modules dynamic_rom
+
append_platform_drv_boot_modules
append qemu_args " -nographic -net nic,model=e1000 -net tap,ifname=tap0,downscript=no,script=no "