diff --git a/src/Makefile b/src/Makefile index 60f5d0d6090dcbf3c03e47648a8af12a50cb7059..a60218dd97c14267131ee2ed9edbf449c10603ed 100644 --- a/src/Makefile +++ b/src/Makefile @@ -7,7 +7,6 @@ LIBNETMNGROBJS := net_plugin.o \ routing.o \ ppp.o \ routeradvertisement.o \ - ipv6rd.o \ common.o LIBIFACESTACKOBJS := interfacestack.o diff --git a/src/ip.c b/src/ip.c index 2d19cc2fbdf83e2182f9a15759240dac995126e3..2be80d57ffbdabb9daf271e5ca969eb62003b028 100644 --- a/src/ip.c +++ b/src/ip.c @@ -2399,7 +2399,7 @@ DMLEAF tIPInterfaceIPv4AddressParams[] = { {"Enable", &DMWRITE, DMT_BOOL, get_IPInterfaceIPv4Address_Enable, set_IPInterfaceIPv4Address_Enable, BBFDM_BOTH}, {"Status", &DMREAD, DMT_STRING, get_IPInterfaceIPv4Address_Status, NULL, BBFDM_BOTH}, {"Alias", &DMWRITE, DMT_STRING, get_IPInterfaceIPv4Address_Alias, set_IPInterfaceIPv4Address_Alias, BBFDM_BOTH, DM_FLAG_UNIQUE}, -{"IPAddress", &DMWRITE, DMT_STRING, get_IPInterfaceIPv4Address_IPAddress, set_IPInterfaceIPv4Address_IPAddress, BBFDM_BOTH, DM_FLAG_UNIQUE|DM_FLAG_LINKER}, +{"IPAddress", &DMWRITE, DMT_STRING, get_IPInterfaceIPv4Address_IPAddress, set_IPInterfaceIPv4Address_IPAddress, BBFDM_BOTH, DM_FLAG_UNIQUE}, {"SubnetMask", &DMWRITE, DMT_STRING, get_IPInterfaceIPv4Address_SubnetMask, set_IPInterfaceIPv4Address_SubnetMask, BBFDM_BOTH, DM_FLAG_UNIQUE}, {"AddressingType", &DMREAD, DMT_STRING, get_IPInterfaceIPv4Address_AddressingType, NULL, BBFDM_BOTH}, {0} diff --git a/src/ipv6rd.c b/src/ipv6rd.c deleted file mode 100644 index e9ad296b9942e0f6f3c764a430fccc707d1a4188..0000000000000000000000000000000000000000 --- a/src/ipv6rd.c +++ /dev/null @@ -1,384 +0,0 @@ -/* - * Copyright (C) 2024 iopsys Software Solutions AB - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1 - * as published by the Free Software Foundation - * - * Author: Mohd Husaam Mehdi <husaam.mehdi@iopsys.eu> - */ - -#include "ipv6rd.h" - -#define DEFAULT_SEC_NAME "wan6rd" - -/************************************************************* -* ENTRY METHOD -**************************************************************/ -static int browseIPv6rdInterfaceSettingInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data, char *prev_instance) -{ - struct dm_data *curr_data = NULL; - LIST_HEAD(dup_list); - char *inst = NULL; - - // if 6rd sections are present in uci then handle them - synchronize_specific_config_sections_with_dmmap_eq("network", "interface", "dmmap_ipv6rd", "proto", "6rd", &dup_list); - list_for_each_entry(curr_data, &dup_list, list) { - - inst = handle_instance(dmctx, parent_node, curr_data->dmmap_section, "ipv6rd_intf_instance", "ipv6rd_intf_alias"); - - if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)curr_data, inst) == DM_STOP) - break; - } - - free_dmmap_config_dup_list(&dup_list); - - // no 6rd section was found - // we still present one 6rd object with empty values - // and if the any parameter is set then section will - // be created - if (!inst) { - struct dm_data data = {0}; - struct uci_section *dmmap_sec = NULL; - - dmuci_add_section_bbfdm("dmmap_ipv6rd", "interface", &dmmap_sec); - dmuci_set_value_by_section(dmmap_sec, "section_name", DEFAULT_SEC_NAME); - dmuci_set_value_by_section(dmmap_sec, "ipv6rd_intf_instance", "1"); - dmuci_set_value_by_section(dmmap_sec, "ipv6rd_intf_alias", "cpe-1"); - - data.dmmap_section = dmmap_sec; - - inst = handle_instance(dmctx, parent_node, data.dmmap_section, "ipv6rd_intf_instance", "ipv6rd_intf_alias"); - DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&data, inst); - } - - return 0; -} - -/************************************************************* -* GET & SET PARAM -**************************************************************/ -static int get_IPv6rd_Enable(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) -{ - // no way to disable ipv6rd for now, always enabled - *value = "1"; - return 0; -} - -static int set_IPv6rd_Enable(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) -{ - switch (action) { - case VALUECHECK: - if (bbfdm_validate_boolean(ctx, value)) - return FAULT_9007; - break; - case VALUESET: - // no way to disable ipv6rd for now, always enabled - break; - } - return 0; -} - -static int get_IPv6rd_InterfaceSettingNumberOfEntries(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) -{ - int cnt = get_number_of_entries(ctx, data, instance, browseIPv6rdInterfaceSettingInst); - dmasprintf(value, "%d", cnt); - return 0; -} - -static int get_IPv6rdInterfaceSetting_Enable(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) -{ - *value = "0"; - - if (((struct dm_data *)data)->config_section == NULL) - return 0; - - char *disabled = NULL; - dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "disabled", &disabled); - - if (DM_STRCMP(disabled, "1") != 0) - *value = "1"; - - return 0; -} - -static void check_and_add_6rd_section(void **data) -{ - struct dm_data *curr_data = *((struct dm_data **)data); - - if (curr_data->config_section == NULL) { - struct uci_section *s = NULL; - - dmuci_add_section("network", "interface", &s); - dmuci_rename_section_by_section(s, DEFAULT_SEC_NAME); - dmuci_set_value_by_section(s, "proto", "6rd"); - dmuci_set_value_by_section(s, "disabled", "1"); - - // for return value - curr_data->config_section = s; - } -} - -static int set_IPv6rdInterfaceSetting_Enable(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) -{ - bool b; - - switch (action) { - case VALUECHECK: - if (bbfdm_validate_boolean(ctx, value)) - return FAULT_9007; - break; - case VALUESET: - check_and_add_6rd_section(&data); - - string_to_bool(value, &b); - dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "disabled", b ? "0" : "1"); - break; - } - return 0; -} - -static int get_IPv6rdInterfaceSetting_Status(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) -{ - get_IPv6rdInterfaceSetting_Enable(refparam, ctx, data, instance, value); - *value = ((*value)[0] == '1') ? "Enabled" : "Disabled"; - return 0; -} - -static int get_IPv6rdInterfaceSetting_Alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) -{ - return bbf_get_alias(ctx, ((struct dm_data *)data)->dmmap_section, "ipv6rd_intf_alias", instance, value); -} - -static int set_IPv6rdInterfaceSetting_Alias(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) -{ - check_and_add_6rd_section(&data); - return bbf_set_alias(ctx, ((struct dm_data *)data)->dmmap_section, "ipv6rd_intf_alias", instance, value); -} - -static int get_IPv6rdInterfaceSetting_BorderRelayIPv4Addresses(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) -{ - if (((struct dm_data *)data)->config_section == NULL) { - *value = ""; - return 0; - } - - dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "peeraddr", value); - return 0; -} - -static int set_IPv6rdInterfaceSetting_BorderRelayIPv4Addresses(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) -{ - switch (action) { - case VALUECHECK: - // only single IPv4 address is allowed in openwrt - if (bbfdm_validate_string(ctx, value, -1, 15, NULL, IPv4Address)) - return FAULT_9007; - break; - case VALUESET: - check_and_add_6rd_section(&data); - dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "peeraddr", value); - break; - } - return 0; -} - -static int get_IPv6rdInterfaceSetting_AllTrafficToBorderRelay(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) -{ - if (((struct dm_data *)data)->config_section == NULL) { - *value = ""; - return 0; - } - // this is always true in openwrt - *value = "1"; - return 0; -} - -static int set_IPv6rdInterfaceSetting_AllTrafficToBorderRelay(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) -{ - switch (action) { - case VALUECHECK: - if (bbfdm_validate_boolean(ctx, value)) - return FAULT_9007; - break; - case VALUESET: - // this is always true in openwrt - // if logic is added in future, remember to use check_and_add_6rd_section - break; - } - return 0; -} - -static int get_IPv6rdInterfaceSetting_SPIPv6Prefix(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) -{ - *value = ""; - - if (((struct dm_data *)data)->config_section == NULL) - return 0; - - char *ip6prefix = NULL, *ip6prefixlen = NULL; - - dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "ip6prefix", &ip6prefix); - dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "ip6prefixlen", &ip6prefixlen); - - if (DM_STRLEN(ip6prefix) && DM_STRLEN(ip6prefixlen)) - dmasprintf(value, "%s/%s", ip6prefix, ip6prefixlen); - - return 0; -} - -static int set_IPv6rdInterfaceSetting_SPIPv6Prefix(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) -{ - switch (action) { - case VALUECHECK: - if (bbfdm_validate_string(ctx, value, -1, -1, NULL, IPv6Prefix)) - return FAULT_9007; - break; - case VALUESET: - check_and_add_6rd_section(&data); - dmuci_set_value_by_section(((struct dm_data *)data)->dmmap_section, "prefix", value); - // separate the prefix and prefix len - char *slash = DM_STRCHR(value, '/'); - if (!slash) - return FAULT_9002; - - // terminate prefix where slash was present - *slash = '\0'; - slash++; - - dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "ip6prefix", value); - dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "ip6prefixlen", slash); - break; - } - return 0; -} - -static int get_IPv6rdInterfaceSetting_IPv4MaskLength(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) -{ - if (((struct dm_data *)data)->config_section == NULL) { - *value = ""; - return 0; - } - - dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "ip4prefixlen", value); - return 0; -} - -static int set_IPv6rdInterfaceSetting_IPv4MaskLength(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) -{ - switch (action) { - case VALUECHECK: - if (bbfdm_validate_unsignedInt(ctx, value, RANGE_ARGS{{"0","32"}}, 1)) - return FAULT_9007; - break; - case VALUESET: - check_and_add_6rd_section(&data); - dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "ip4prefixlen", value); - break; - } - return 0; -} - -static int get_IPv6rdInterfaceSetting_AddressSource(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) -{ - if (((struct dm_data *)data)->config_section == NULL) { - *value = ""; - return 0; - } - - dmuci_get_value_by_section_string(((struct dm_data *)data)->dmmap_section, "ipv4path", value); - - if (!value || (*value)[0] == '\0') { - char *ipaddr = NULL; - dmuci_get_value_by_section_string(((struct dm_data *)data)->config_section, "ipaddr", &ipaddr); - - _bbfdm_get_references(ctx, "Device.IP.Interface.*.IPv4Address.", "IPAddress", ipaddr, value); - // save it for later - dmuci_set_value_by_section(((struct dm_data *)data)->dmmap_section, "ipv4path", *value); - } - - return 0; -} - -static int set_IPv6rdInterfaceSetting_AddressSource(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) -{ - char *allowed_objects[] = {"Device.IP.Interface.*.IPv4Address.", NULL}; - struct dm_reference reference = {0}; - - bbfdm_get_reference_linker(ctx, value, &reference); - - switch (action) { - case VALUECHECK: - if (bbfdm_validate_string(ctx, reference.path, -1, 256, NULL, NULL)) - return FAULT_9007; - - if (dm_validate_allowed_objects(ctx, &reference, allowed_objects)) - return FAULT_9007; - break; - case VALUESET: - if (DM_STRLEN(reference.value)) { - check_and_add_6rd_section(&data); - dmuci_set_value_by_section(((struct dm_data *)data)->config_section, "ipaddr", reference.value); - dmuci_set_value_by_section(((struct dm_data *)data)->dmmap_section, "ipv4path", reference.path); - } - break; - } - return 0; -} - -static int get_IPv6rdInterfaceSetting_TunnelInterface(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) -{ - // Tunnel, Tunneled interfaces are not yet supported - // when their support is added, we can update this function - *value = ""; - return 0; -} - -static int get_IPv6rdInterfaceSetting_TunneledInterface(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) -{ - // Tunnel, Tunneled interfaces are not yet supported - // when their support is added, we can update this function - *value = ""; - return 0; -} - -/********************************************************************************************************************************** -* OBJ & PARAM DEFINITION -***********************************************************************************************************************************/ -/* *** Device. *** */ -DMOBJ tDeviceIPv6rdObj[] = { -/* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys, version*/ -{"IPv6rd", &DMREAD, NULL, NULL, "file:/lib/netifd/proto/6rd.sh,/etc/config/network", NULL, NULL, NULL, tIPv6rdObj, tIPv6rdParams, NULL, BBFDM_BOTH, NULL}, -{0} -}; - -/* *** Device.IPv6rd. *** */ -DMOBJ tIPv6rdObj[] = { -/* OBJ, permission, addobj, delobj, checkdep, browseinstobj, nextdynamicobj, dynamicleaf, nextobj, leaf, linker, bbfdm_type, uniqueKeys */ -{"InterfaceSetting", &DMREAD, NULL, NULL, NULL, browseIPv6rdInterfaceSettingInst, NULL, NULL, NULL, tIPv6rdInterfaceSettingParams, NULL, BBFDM_BOTH, NULL}, -{0} -}; - -DMLEAF tIPv6rdParams[] = { -/* PARAM, permission, type, getvalue, setvalue, bbfdm_type */ -{"Enable", &DMWRITE, DMT_BOOL, get_IPv6rd_Enable, set_IPv6rd_Enable, BBFDM_BOTH}, -{"InterfaceSettingNumberOfEntries", &DMREAD, DMT_UNINT, get_IPv6rd_InterfaceSettingNumberOfEntries, NULL, BBFDM_BOTH}, -{0} -}; - -/* *** Device.IPv6rd.InterfaceSetting.{i}. *** */ -DMLEAF tIPv6rdInterfaceSettingParams[] = { -/* PARAM, permission, type, getvalue, setvalue, bbfdm_type */ -{"Enable", &DMWRITE, DMT_BOOL, get_IPv6rdInterfaceSetting_Enable, set_IPv6rdInterfaceSetting_Enable, BBFDM_BOTH}, -{"Status", &DMREAD, DMT_STRING, get_IPv6rdInterfaceSetting_Status, NULL, BBFDM_BOTH}, -{"Alias", &DMWRITE, DMT_STRING, get_IPv6rdInterfaceSetting_Alias, set_IPv6rdInterfaceSetting_Alias, BBFDM_BOTH}, -{"BorderRelayIPv4Addresses", &DMWRITE, DMT_STRING, get_IPv6rdInterfaceSetting_BorderRelayIPv4Addresses, set_IPv6rdInterfaceSetting_BorderRelayIPv4Addresses, BBFDM_BOTH}, -{"AllTrafficToBorderRelay", &DMWRITE, DMT_BOOL, get_IPv6rdInterfaceSetting_AllTrafficToBorderRelay, set_IPv6rdInterfaceSetting_AllTrafficToBorderRelay, BBFDM_BOTH}, -{"SPIPv6Prefix", &DMWRITE, DMT_STRING, get_IPv6rdInterfaceSetting_SPIPv6Prefix, set_IPv6rdInterfaceSetting_SPIPv6Prefix, BBFDM_BOTH}, -{"IPv4MaskLength", &DMWRITE, DMT_UNINT, get_IPv6rdInterfaceSetting_IPv4MaskLength, set_IPv6rdInterfaceSetting_IPv4MaskLength, BBFDM_BOTH}, -{"AddressSource", &DMWRITE, DMT_STRING, get_IPv6rdInterfaceSetting_AddressSource, set_IPv6rdInterfaceSetting_AddressSource, BBFDM_BOTH, DM_FLAG_REFERENCE}, -{"TunnelInterface", &DMREAD, DMT_STRING, get_IPv6rdInterfaceSetting_TunnelInterface, NULL, BBFDM_BOTH}, -{"TunneledInterface", &DMREAD, DMT_STRING, get_IPv6rdInterfaceSetting_TunneledInterface, NULL, BBFDM_BOTH}, -{0} -}; - diff --git a/src/ipv6rd.h b/src/ipv6rd.h deleted file mode 100644 index 65102af739502316d894474f7bca5958d5bfb43e..0000000000000000000000000000000000000000 --- a/src/ipv6rd.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2023 iopsys Software Solutions AB - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 2.1 - * as published by the Free Software Foundation - * - * Author: Mohd Husaam Mehdi <husaam.mehdi@iopsys.eu> - */ - -#ifndef __IPV6RD_H -#define __IPV6RD_H - -#include <libbbfdm-api/dmcommon.h> - -extern DMOBJ tDeviceIPv6rdObj[]; -extern DMOBJ tIPv6rdObj[]; -extern DMLEAF tIPv6rdParams[]; -extern DMLEAF tIPv6rdInterfaceSettingParams[]; - - -#endif //__IPV6RD_H - diff --git a/src/net_plugin.c b/src/net_plugin.c index b8bab34a4506d7359b53eefd6f19bea3f8d64549..fc1aa616d6b775e8200eae01fc26842e5fbf7d57 100644 --- a/src/net_plugin.c +++ b/src/net_plugin.c @@ -13,7 +13,6 @@ #include "ppp.h" #include "routing.h" #include "routeradvertisement.h" -#include "ipv6rd.h" DM_MAP_OBJ tDynamicObj[] = { /* parentobj, nextobject, parameter */ @@ -22,6 +21,5 @@ DM_MAP_OBJ tDynamicObj[] = { {"Device.", tDevicePPPObj, NULL}, {"Device.", tDeviceRoutingObj, NULL}, {"Device.", tDeviceRouterAdvertisementObj, NULL}, -{"Device.", tDeviceIPv6rdObj, NULL}, {0} };