aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2023-09-13 22:21:08 +0100
committerMichael Brown <mcb30@ipxe.org>2023-09-13 23:02:54 +0100
commit8b1d34badf321668f830c78e6803d718446b57ef (patch)
treea479814af7162decd65c0d40c996b9a174f92026
parentcc1e27e525201f5ee7fcc098f47f04ec26814289 (diff)
downloadipxe-8b1d34badf321668f830c78e6803d718446b57ef.zip
ipxe-8b1d34badf321668f830c78e6803d718446b57ef.tar.gz
ipxe-8b1d34badf321668f830c78e6803d718446b57ef.tar.bz2
[ipv6] Use driver-private data to hold link-local IPv6 settings block
Simplify the IPv6 link-local settings code by using driver-private data to hold the settings block, instead of using a separate allocation. Signed-off-by: Michael Brown <mcb30@ipxe.org>
-rw-r--r--src/net/ipv6.c39
1 files changed, 10 insertions, 29 deletions
diff --git a/src/net/ipv6.c b/src/net/ipv6.c
index a0173df..8ee0804 100644
--- a/src/net/ipv6.c
+++ b/src/net/ipv6.c
@@ -1212,14 +1212,6 @@ static struct settings_operations ipv6_settings_operations = {
.fetch = ipv6_fetch,
};
-/** IPv6 link-local address settings */
-struct ipv6_settings {
- /** Reference counter */
- struct refcnt refcnt;
- /** Settings interface */
- struct settings settings;
-};
-
/**
* Register IPv6 link-local address settings
*
@@ -1227,37 +1219,26 @@ struct ipv6_settings {
* @v priv Private data
* @ret rc Return status code
*/
-static int ipv6_register_settings ( struct net_device *netdev,
- void *priv __unused ) {
+static int ipv6_register_settings ( struct net_device *netdev, void *priv ) {
struct settings *parent = netdev_settings ( netdev );
- struct ipv6_settings *ipv6set;
+ struct settings *settings = priv;
int rc;
- /* Allocate and initialise structure */
- ipv6set = zalloc ( sizeof ( *ipv6set ) );
- if ( ! ipv6set ) {
- rc = -ENOMEM;
- goto err_alloc;
- }
- ref_init ( &ipv6set->refcnt, NULL );
- settings_init ( &ipv6set->settings, &ipv6_settings_operations,
- &ipv6set->refcnt, &ipv6_settings_scope );
- ipv6set->settings.order = IPV6_ORDER_LINK_LOCAL;
-
- /* Register settings */
- if ( ( rc = register_settings ( &ipv6set->settings, parent,
+ /* Initialise and register settings */
+ settings_init ( settings, &ipv6_settings_operations,
+ &netdev->refcnt, &ipv6_settings_scope );
+ settings->order = IPV6_ORDER_LINK_LOCAL;
+ if ( ( rc = register_settings ( settings, parent,
IPV6_SETTINGS_NAME ) ) != 0 )
- goto err_register;
+ return rc;
- err_register:
- ref_put ( &ipv6set->refcnt );
- err_alloc:
- return rc;
+ return 0;
}
/** IPv6 network device driver */
struct net_driver ipv6_driver __net_driver = {
.name = "IPv6",
+ .priv_len = sizeof ( struct settings ),
.probe = ipv6_register_settings,
};