Add secure transport and OAM router runtime implementations
- Implement secure transport mechanisms in `gateway_knx_secure_transport.cpp` for handling secure sessions, including AES encryption, session key generation, and secure packet wrapping and unwrapping. - Introduce `OamRouterRuntime` in `oam_router_runtime.cpp` to manage OAM router identity, individual addresses, and tunnel frame handling. - Enhance secure session management with functions for session allocation, authentication, and secure packet processing. - Ensure compatibility with existing KNXnet/IP protocols while adding support for secure communications. Signed-off-by: Tony <tonylu@tony-cloud.com>
This commit is contained in:
@@ -779,6 +779,101 @@ config GATEWAY_KNX_INDIVIDUAL_ADDRESS
|
||||
Raw 16-bit individual address used by the ETS-programmable KNX-DALI gateway device.
|
||||
The default 65534 is 15.15.254, used as the unprogrammed logical device address.
|
||||
|
||||
config GATEWAY_KNX_OAM_ROUTER_SUPPORTED
|
||||
bool "OAM-compatible KNX/IP router persona is supported"
|
||||
depends on GATEWAY_KNX_BRIDGE_SUPPORTED
|
||||
default n
|
||||
help
|
||||
Compiles support for a second OAM-compatible BAU091A KNX/IP router
|
||||
application behind the same KNXnet/IP endpoint and TP interface as the
|
||||
KNX-DALI gateway application.
|
||||
|
||||
config GATEWAY_KNX_OAM_ROUTER_ENABLED
|
||||
bool "Enable OAM-compatible KNX/IP router persona by default"
|
||||
depends on GATEWAY_KNX_OAM_ROUTER_SUPPORTED
|
||||
default n
|
||||
help
|
||||
Enables the second router application in the default KNX bridge config.
|
||||
The physical UDP/TCP endpoint and TP-UART remain shared with the main
|
||||
KNX/IP router settings.
|
||||
|
||||
config GATEWAY_KNX_OAM_ROUTER_OEM_MANUFACTURER_ID
|
||||
hex "OAM router OEM manufacturer ID"
|
||||
depends on GATEWAY_KNX_OAM_ROUTER_SUPPORTED
|
||||
range 0x0000 0xffff
|
||||
default 0x00FA
|
||||
help
|
||||
Manufacturer ID advertised by the OAM-compatible IP router application.
|
||||
The default follows the OpenKNX OAM-IP-Router reference database.
|
||||
|
||||
config GATEWAY_KNX_OAM_ROUTER_HARDWARE_ID
|
||||
hex "OAM router hardware ID"
|
||||
depends on GATEWAY_KNX_OAM_ROUTER_SUPPORTED
|
||||
range 0x0000 0xffff
|
||||
default 0x0001
|
||||
|
||||
config GATEWAY_KNX_OAM_ROUTER_APPLICATION_NUMBER
|
||||
hex "OAM router application number"
|
||||
depends on GATEWAY_KNX_OAM_ROUTER_SUPPORTED
|
||||
range 0x0000 0xffff
|
||||
default 0xA11F
|
||||
help
|
||||
Application number for the OAM IP-Router release database.
|
||||
|
||||
config GATEWAY_KNX_OAM_ROUTER_APPLICATION_VERSION
|
||||
hex "OAM router application version"
|
||||
depends on GATEWAY_KNX_OAM_ROUTER_SUPPORTED
|
||||
range 0x00 0xff
|
||||
default 0x07
|
||||
help
|
||||
Application version for the OAM IP-Router release database.
|
||||
|
||||
config GATEWAY_KNX_OAM_ROUTER_INDIVIDUAL_ADDRESS
|
||||
int "OAM router individual address raw value"
|
||||
depends on GATEWAY_KNX_OAM_ROUTER_SUPPORTED
|
||||
range 0 65535
|
||||
default 65282
|
||||
help
|
||||
Raw 16-bit individual address for the second BAU091A router application.
|
||||
The default 65282 is 15.15.2.
|
||||
|
||||
config GATEWAY_KNX_OAM_ROUTER_TUNNEL_ADDRESS_BASE
|
||||
int "OAM router tunnel address base raw value"
|
||||
depends on GATEWAY_KNX_OAM_ROUTER_SUPPORTED
|
||||
range 0 65520
|
||||
default 65296
|
||||
help
|
||||
First raw 16-bit individual address reserved for the OAM router tunnel
|
||||
users. The default 65296 is 15.15.16 and leaves room for 16 tunnels.
|
||||
|
||||
config GATEWAY_KNX_OAM_PROGRAMMING_BUTTON_GPIO
|
||||
int "OAM router programming button GPIO"
|
||||
depends on GATEWAY_KNX_OAM_ROUTER_SUPPORTED
|
||||
range -1 48
|
||||
default -1
|
||||
help
|
||||
GPIO used to toggle programming mode for the second OAM router
|
||||
application. Set to -1 to disable the local OAM programming button.
|
||||
|
||||
config GATEWAY_KNX_OAM_PROGRAMMING_BUTTON_ACTIVE_LOW
|
||||
bool "OAM router programming button is active low"
|
||||
depends on GATEWAY_KNX_OAM_PROGRAMMING_BUTTON_GPIO >= 0
|
||||
default y
|
||||
|
||||
config GATEWAY_KNX_OAM_PROGRAMMING_LED_GPIO
|
||||
int "OAM router programming LED GPIO"
|
||||
depends on GATEWAY_KNX_OAM_ROUTER_SUPPORTED
|
||||
range -1 48
|
||||
default -1
|
||||
help
|
||||
GPIO used to show programming mode for the second OAM router
|
||||
application. Set to -1 to disable the local OAM programming LED.
|
||||
|
||||
config GATEWAY_KNX_OAM_PROGRAMMING_LED_ACTIVE_HIGH
|
||||
bool "OAM router programming LED is active high"
|
||||
depends on GATEWAY_KNX_OAM_PROGRAMMING_LED_GPIO >= 0
|
||||
default y
|
||||
|
||||
config GATEWAY_KNX_PROGRAMMING_BUTTON_GPIO
|
||||
int "KNX programming button GPIO"
|
||||
depends on GATEWAY_KNX_BRIDGE_SUPPORTED
|
||||
|
||||
@@ -243,6 +243,22 @@
|
||||
#define CONFIG_GATEWAY_KNX_IP_INTERFACE_INDIVIDUAL_ADDRESS 65281
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_GATEWAY_KNX_OAM_ROUTER_INDIVIDUAL_ADDRESS
|
||||
#define CONFIG_GATEWAY_KNX_OAM_ROUTER_INDIVIDUAL_ADDRESS 65282
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_GATEWAY_KNX_OAM_ROUTER_TUNNEL_ADDRESS_BASE
|
||||
#define CONFIG_GATEWAY_KNX_OAM_ROUTER_TUNNEL_ADDRESS_BASE 65296
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_GATEWAY_KNX_OAM_PROGRAMMING_BUTTON_GPIO
|
||||
#define CONFIG_GATEWAY_KNX_OAM_PROGRAMMING_BUTTON_GPIO -1
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_GATEWAY_KNX_OAM_PROGRAMMING_LED_GPIO
|
||||
#define CONFIG_GATEWAY_KNX_OAM_PROGRAMMING_LED_GPIO -1
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_GATEWAY_KNX_PROGRAMMING_BUTTON_GPIO
|
||||
#define CONFIG_GATEWAY_KNX_PROGRAMMING_BUTTON_GPIO -1
|
||||
#endif
|
||||
@@ -400,6 +416,18 @@ constexpr bool kKnxMulticastEnabled = true;
|
||||
constexpr bool kKnxMulticastEnabled = false;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_GATEWAY_KNX_OAM_ROUTER_SUPPORTED
|
||||
constexpr bool kKnxOamRouterSupported = true;
|
||||
#else
|
||||
constexpr bool kKnxOamRouterSupported = false;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_GATEWAY_KNX_OAM_ROUTER_ENABLED
|
||||
constexpr bool kKnxOamRouterEnabled = true;
|
||||
#else
|
||||
constexpr bool kKnxOamRouterEnabled = false;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_GATEWAY_CLOUD_BRIDGE_SUPPORTED
|
||||
constexpr bool kCloudBridgeSupported = true;
|
||||
#else
|
||||
@@ -904,6 +932,25 @@ extern "C" void app_main(void) {
|
||||
static_cast<uint16_t>(CONFIG_GATEWAY_KNX_IP_INTERFACE_INDIVIDUAL_ADDRESS);
|
||||
default_knx.individual_address =
|
||||
static_cast<uint16_t>(CONFIG_GATEWAY_KNX_INDIVIDUAL_ADDRESS);
|
||||
default_knx.oam_router.enabled = kKnxOamRouterSupported && kKnxOamRouterEnabled;
|
||||
default_knx.oam_router.individual_address =
|
||||
static_cast<uint16_t>(CONFIG_GATEWAY_KNX_OAM_ROUTER_INDIVIDUAL_ADDRESS);
|
||||
default_knx.oam_router.tunnel_address_base =
|
||||
static_cast<uint16_t>(CONFIG_GATEWAY_KNX_OAM_ROUTER_TUNNEL_ADDRESS_BASE);
|
||||
default_knx.oam_router.programming_button_gpio =
|
||||
CONFIG_GATEWAY_KNX_OAM_PROGRAMMING_BUTTON_GPIO;
|
||||
default_knx.oam_router.programming_led_gpio =
|
||||
CONFIG_GATEWAY_KNX_OAM_PROGRAMMING_LED_GPIO;
|
||||
#ifdef CONFIG_GATEWAY_KNX_OAM_PROGRAMMING_BUTTON_ACTIVE_LOW
|
||||
default_knx.oam_router.programming_button_active_low = true;
|
||||
#else
|
||||
default_knx.oam_router.programming_button_active_low = false;
|
||||
#endif
|
||||
#ifdef CONFIG_GATEWAY_KNX_OAM_PROGRAMMING_LED_ACTIVE_HIGH
|
||||
default_knx.oam_router.programming_led_active_high = true;
|
||||
#else
|
||||
default_knx.oam_router.programming_led_active_high = false;
|
||||
#endif
|
||||
default_knx.programming_button_gpio = CONFIG_GATEWAY_KNX_PROGRAMMING_BUTTON_GPIO;
|
||||
default_knx.programming_led_gpio = CONFIG_GATEWAY_KNX_PROGRAMMING_LED_GPIO;
|
||||
#ifdef CONFIG_GATEWAY_KNX_PROGRAMMING_BUTTON_ACTIVE_LOW
|
||||
|
||||
+13
-3
@@ -596,7 +596,7 @@ CONFIG_PARTITION_TABLE_MD5=y
|
||||
#
|
||||
# Gateway App
|
||||
#
|
||||
CONFIG_GATEWAY_CHANNEL_COUNT=1
|
||||
CONFIG_GATEWAY_CHANNEL_COUNT=2
|
||||
|
||||
#
|
||||
# Gateway Channel 1
|
||||
@@ -615,6 +615,15 @@ CONFIG_GATEWAY_CHANNEL1_NATIVE_BAUDRATE=1200
|
||||
#
|
||||
# Gateway Channel 2
|
||||
#
|
||||
CONFIG_GATEWAY_CHANNEL2_GW_ID=4
|
||||
# CONFIG_GATEWAY_CHANNEL2_PHY_DISABLED is not set
|
||||
CONFIG_GATEWAY_CHANNEL2_PHY_NATIVE=y
|
||||
# CONFIG_GATEWAY_CHANNEL2_PHY_UART1 is not set
|
||||
# CONFIG_GATEWAY_CHANNEL2_PHY_UART2 is not set
|
||||
CONFIG_GATEWAY_CHANNEL2_NATIVE_BUS_ID=1
|
||||
CONFIG_GATEWAY_CHANNEL2_NATIVE_TX_PIN=4
|
||||
CONFIG_GATEWAY_CHANNEL2_NATIVE_RX_PIN=3
|
||||
CONFIG_GATEWAY_CHANNEL2_NATIVE_BAUDRATE=1200
|
||||
# end of Gateway Channel 2
|
||||
|
||||
#
|
||||
@@ -624,7 +633,7 @@ CONFIG_GATEWAY_CACHE_SUPPORTED=y
|
||||
CONFIG_GATEWAY_CACHE_START_ENABLED=y
|
||||
CONFIG_GATEWAY_CACHE_RECONCILIATION_ENABLED=y
|
||||
CONFIG_GATEWAY_CACHE_FULL_STATE_MIRROR=y
|
||||
CONFIG_GATEWAY_CACHE_FLUSH_INTERVAL_MS=10000
|
||||
CONFIG_GATEWAY_CACHE_FLUSH_INTERVAL_MS=600000
|
||||
CONFIG_GATEWAY_CACHE_REFRESH_INTERVAL_MS=120000
|
||||
CONFIG_GATEWAY_CACHE_OUTSIDE_BUS_FIRST=y
|
||||
# CONFIG_GATEWAY_CACHE_LOCAL_GATEWAY_FIRST is not set
|
||||
@@ -658,7 +667,7 @@ CONFIG_GATEWAY_ETHERNET_W5500_MISO_GPIO=33
|
||||
CONFIG_GATEWAY_ETHERNET_W5500_CS_GPIO=34
|
||||
CONFIG_GATEWAY_ETHERNET_W5500_INT_GPIO=36
|
||||
CONFIG_GATEWAY_ETHERNET_W5500_POLL_PERIOD_MS=0
|
||||
CONFIG_GATEWAY_ETHERNET_W5500_CLOCK_MHZ=40
|
||||
CONFIG_GATEWAY_ETHERNET_W5500_CLOCK_MHZ=20
|
||||
CONFIG_GATEWAY_ETHERNET_PHY_RESET_GPIO=-1
|
||||
CONFIG_GATEWAY_ETHERNET_PHY_ADDR=1
|
||||
CONFIG_GATEWAY_ETHERNET_RX_TASK_STACK_SIZE=4096
|
||||
@@ -693,6 +702,7 @@ CONFIG_GATEWAY_KNX_UDP_PORT=3671
|
||||
CONFIG_GATEWAY_KNX_MULTICAST_ADDRESS="224.0.23.12"
|
||||
CONFIG_GATEWAY_KNX_IP_INTERFACE_INDIVIDUAL_ADDRESS=65281
|
||||
CONFIG_GATEWAY_KNX_INDIVIDUAL_ADDRESS=65534
|
||||
# CONFIG_GATEWAY_KNX_OAM_ROUTER_SUPPORTED is not set
|
||||
CONFIG_GATEWAY_KNX_PROGRAMMING_BUTTON_GPIO=0
|
||||
CONFIG_GATEWAY_KNX_PROGRAMMING_BUTTON_ACTIVE_LOW=y
|
||||
CONFIG_GATEWAY_KNX_PROGRAMMING_LED_GPIO=10
|
||||
|
||||
@@ -622,9 +622,12 @@ CONFIG_GATEWAY_CHANNEL1_NATIVE_BAUDRATE=1200
|
||||
#
|
||||
CONFIG_GATEWAY_CACHE_SUPPORTED=y
|
||||
CONFIG_GATEWAY_CACHE_START_ENABLED=y
|
||||
# CONFIG_GATEWAY_CACHE_RECONCILIATION_ENABLED is not set
|
||||
CONFIG_GATEWAY_CACHE_RECONCILIATION_ENABLED=y
|
||||
CONFIG_GATEWAY_CACHE_FULL_STATE_MIRROR=y
|
||||
CONFIG_GATEWAY_CACHE_FLUSH_INTERVAL_MS=10000
|
||||
CONFIG_GATEWAY_CACHE_REFRESH_INTERVAL_MS=120000
|
||||
CONFIG_GATEWAY_CACHE_OUTSIDE_BUS_FIRST=y
|
||||
# CONFIG_GATEWAY_CACHE_LOCAL_GATEWAY_FIRST is not set
|
||||
# end of Gateway Cache
|
||||
|
||||
# CONFIG_GATEWAY_ENABLE_DALI_BUS is not set
|
||||
@@ -655,7 +658,7 @@ CONFIG_GATEWAY_ETHERNET_W5500_MISO_GPIO=33
|
||||
CONFIG_GATEWAY_ETHERNET_W5500_CS_GPIO=34
|
||||
CONFIG_GATEWAY_ETHERNET_W5500_INT_GPIO=36
|
||||
CONFIG_GATEWAY_ETHERNET_W5500_POLL_PERIOD_MS=0
|
||||
CONFIG_GATEWAY_ETHERNET_W5500_CLOCK_MHZ=40
|
||||
CONFIG_GATEWAY_ETHERNET_W5500_CLOCK_MHZ=20
|
||||
CONFIG_GATEWAY_ETHERNET_PHY_RESET_GPIO=-1
|
||||
CONFIG_GATEWAY_ETHERNET_PHY_ADDR=1
|
||||
CONFIG_GATEWAY_ETHERNET_RX_TASK_STACK_SIZE=4096
|
||||
@@ -690,6 +693,7 @@ CONFIG_GATEWAY_KNX_UDP_PORT=3671
|
||||
CONFIG_GATEWAY_KNX_MULTICAST_ADDRESS="224.0.23.12"
|
||||
CONFIG_GATEWAY_KNX_IP_INTERFACE_INDIVIDUAL_ADDRESS=65281
|
||||
CONFIG_GATEWAY_KNX_INDIVIDUAL_ADDRESS=65534
|
||||
# CONFIG_GATEWAY_KNX_OAM_ROUTER_SUPPORTED is not set
|
||||
CONFIG_GATEWAY_KNX_PROGRAMMING_BUTTON_GPIO=0
|
||||
CONFIG_GATEWAY_KNX_PROGRAMMING_BUTTON_ACTIVE_LOW=y
|
||||
CONFIG_GATEWAY_KNX_PROGRAMMING_LED_GPIO=10
|
||||
|
||||
Reference in New Issue
Block a user