[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[UNIKRAFT PATCH v4 2/2] lib/uknetdev: Get the ipaddr, gw_addr and subnet



The user of uknetdev can pass the ipaddr, gw_addr and subnet as a
library argument. The library argument can be retrieved from the
network stack using uk_netdev_einfo_get function. The library
arguments are retrieved only if the driver does not support the
uk_netdev_einfo_get callback.

Signed-off-by: Sharan Santhanam <sharan.santhanam@xxxxxxxxx>
---
 lib/uknetdev/netdev.c | 32 +++++++++++++++++++++++++++-----
 1 file changed, 27 insertions(+), 5 deletions(-)

diff --git a/lib/uknetdev/netdev.c b/lib/uknetdev/netdev.c
index 096973a3..74be618a 100644
--- a/lib/uknetdev/netdev.c
+++ b/lib/uknetdev/netdev.c
@@ -236,17 +236,39 @@ void uk_netdev_info_get(struct uk_netdev *dev,
                                      dev_info->max_tx_queues);
 }
 
+static const void *_netdev_einfo_get(struct uk_netdev *dev,
+                               enum uk_netdev_einfo_type einfo)
+{
+       switch (einfo) {
+       case UK_NETDEV_IPV4_ADDR_STR:
+               if (dev->_einfo->ipv4_addr)
+                       uk_pr_debug("ip_addr: %s\n", dev->_einfo->ipv4_addr);
+               return dev->_einfo->ipv4_addr;
+       case UK_NETDEV_IPV4_MASK_STR:
+               if (dev->_einfo->ipv4_net_mask)
+                       uk_pr_debug("netmask: %s\n", 
dev->_einfo->ipv4_net_mask);
+               return dev->_einfo->ipv4_net_mask;
+       case UK_NETDEV_IPV4_GW_STR:
+               if (dev->_einfo->ipv4_gw_addr)
+                       uk_pr_debug("Gateway: %s\n", dev->_einfo->ipv4_gw_addr);
+               return dev->_einfo->ipv4_gw_addr;
+       default:
+               uk_pr_warn("Option %d not yet supported\n", einfo);
+       }
+       return NULL;
+}
+
 const void *uk_netdev_einfo_get(struct uk_netdev *dev,
                                enum uk_netdev_einfo_type einfo)
 {
        UK_ASSERT(dev);
        UK_ASSERT(dev->ops);
 
-       if (!dev->ops->einfo_get) {
-               /* driver does not provide any extra configuration */
-               return NULL;
-       }
-       return dev->ops->einfo_get(dev, einfo);
+       if (dev->_einfo)
+               return _netdev_einfo_get(dev, einfo);
+       else if (dev->ops->einfo_get)
+               return dev->ops->einfo_get(dev, einfo);
+       return NULL;
 }
 
 int uk_netdev_rxq_info_get(struct uk_netdev *dev, uint16_t queue_id,
-- 
2.20.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.