From 74916ff4f154dc442c60620fcc68f26eeab6f9cc Mon Sep 17 00:00:00 2001 From: Adriano Marto Reis Date: Fri, 19 Nov 2021 09:08:41 +1000 Subject: [PATCH 1/3] Using cmake to build the project --- .cproject | 82 + .project | 27 + CLI_Readme_DLEP.docx | Bin 19737 -> 0 bytes CLI_Readme_DLEP.md | 433 +++ CMakeLists.txt | 5 + Readme_DLEP.docx | Bin 383913 -> 0 bytes Readme_DLEP.md | 273 ++ dlep-rfc8175.tar | Bin 11827200 -> 0 bytes dlep_radio_ipv4/1fuzz_dlep_cli.c | 406 +++ dlep_radio_ipv4/1fuzz_encoder_tlv.c | 646 +++++ dlep_radio_ipv4/1fuzz_message_builder.c | 2383 ++++++++++++++++ dlep_radio_ipv4/CMakeLists.txt | 8 + dlep_radio_ipv4/cli.c | 936 +++++++ dlep_radio_ipv4/cli.h | 148 + .../config_examples/my_radio_discovery.cfg | 60 + .../config_examples/my_radio_discovery_2.cfg | 60 + dlep_radio_ipv4/config_examples/uut.cfg | 64 + dlep_radio_ipv4/dlep_buffers.c | 141 + dlep_radio_ipv4/dlep_buffers.h | 48 + dlep_radio_ipv4/dlep_client_message_parser.c | 377 +++ dlep_radio_ipv4/dlep_client_message_parser.h | 45 + dlep_radio_ipv4/dlep_client_metrics.c | 206 ++ dlep_radio_ipv4/dlep_client_metrics.h | 43 + .../dlep_client_neighbor_event_handlers.c | 1114 ++++++++ .../dlep_client_neighbor_event_handlers.h | 75 + dlep_radio_ipv4/dlep_client_neighbor_fsm.c | 491 ++++ dlep_radio_ipv4/dlep_client_neighbor_fsm.h | 103 + .../dlep_client_peer_event_handlers.c | 1634 +++++++++++ .../dlep_client_peer_event_handlers.h | 101 + dlep_radio_ipv4/dlep_client_peer_fsm.c | 568 ++++ dlep_radio_ipv4/dlep_client_peer_fsm.h | 103 + dlep_radio_ipv4/dlep_client_timer.c | 294 ++ dlep_radio_ipv4/dlep_client_timer.h | 64 + dlep_radio_ipv4/dlep_config.c | 596 ++++ dlep_radio_ipv4/dlep_config.h | 267 ++ dlep_radio_ipv4/dlep_context_neighbor.c | 293 ++ dlep_radio_ipv4/dlep_context_neighbor.h | 151 + .../dlep_context_neighbor_management.c | 470 ++++ .../dlep_context_neighbor_management.h | 63 + dlep_radio_ipv4/dlep_context_peer.c | 476 ++++ dlep_radio_ipv4/dlep_context_peer.h | 228 ++ .../dlep_context_peer_management.c | 465 ++++ .../dlep_context_peer_management.h | 61 + dlep_radio_ipv4/dlep_debug.c | 255 ++ dlep_radio_ipv4/dlep_debug.h | 103 + dlep_radio_ipv4/dlep_debug_cli.c | 334 +++ dlep_radio_ipv4/dlep_debug_cli.h | 40 + dlep_radio_ipv4/dlep_message_builder.c | 2373 ++++++++++++++++ dlep_radio_ipv4/dlep_message_builder.h | 133 + dlep_radio_ipv4/dlep_porter.c | 913 +++++++ dlep_radio_ipv4/dlep_porter.h | 103 + dlep_radio_ipv4/dlep_radio | Bin 0 -> 370735 bytes dlep_radio_ipv4/dlep_radio_sub | Bin 0 -> 386374 bytes dlep_radio_ipv4/dlep_server_neighbor_fsm.h | 102 + dlep_radio_ipv4/dlep_sim_options.h | 79 + dlep_radio_ipv4/dlep_source_cli.c | 143 + dlep_radio_ipv4/dlep_source_cli.h | 40 + dlep_radio_ipv4/dlep_tcp_sockfd | 259 ++ dlep_radio_ipv4/fsm.c | 788 ++++++ dlep_radio_ipv4/fsm.h | 340 +++ dlep_radio_ipv4/fuzz_dlep_cli.h | 40 + dlep_radio_ipv4/fuzz_encoder_tlv.h | 114 + dlep_radio_ipv4/fuzz_message_builder.h | 119 + dlep_radio_ipv4/fuzz_packet.c | 131 + dlep_radio_ipv4/fuzz_packet.h | 41 + dlep_radio_ipv4/ipv4_address.c | 160 ++ dlep_radio_ipv4/ipv4_address.h | 398 +++ dlep_radio_ipv4/ipv6_address.c | 158 ++ dlep_radio_ipv4/ipv6_address.h | 426 +++ dlep_radio_ipv4/mac_address.c | 169 ++ dlep_radio_ipv4/mac_address.h | 361 +++ dlep_radio_ipv4/mdr_present | 43 + dlep_radio_ipv4/network_order.h | 234 ++ dlep_radio_ipv4/packet_dump.c | 125 + dlep_radio_ipv4/packet_dump.h | 41 + dlep_radio_ipv4/rfc5444_api_rc.h | 69 + dlep_radio_ipv4/rfc5444_decoder.c | 570 ++++ dlep_radio_ipv4/rfc5444_decoder.h | 130 + dlep_radio_ipv4/rfc5444_decoder_tlv.c | 1526 +++++++++++ dlep_radio_ipv4/rfc5444_decoder_tlv.h | 47 + dlep_radio_ipv4/rfc5444_encoder.c | 743 +++++ dlep_radio_ipv4/rfc5444_encoder.h | 129 + dlep_radio_ipv4/rfc5444_encoder_tlv.c | 1466 ++++++++++ dlep_radio_ipv4/rfc5444_encoder_tlv.h | 193 ++ dlep_radio_ipv4/rfc5444_experimental_tlv.c | 261 ++ dlep_radio_ipv4/rfc5444_experimental_tlv.h | 56 + dlep_radio_ipv4/rfc5444_packet_header.c | 177 ++ dlep_radio_ipv4/rfc5444_packet_header.h | 49 + dlep_radio_ipv4/rfc5444_scratch_pad.c | 381 +++ dlep_radio_ipv4/rfc5444_scratch_pad.h | 165 ++ dlep_radio_ipv4/rfc5444_types.h | 292 ++ dlep_radio_ipv4/rfc5444_utils.c | 397 +++ dlep_radio_ipv4/rfc5444_utils.h | 45 + dlep_radio_ipv4/runtime_environment.h | 41 + dlep_radio_ipv4/safe_limits.h | 195 ++ dlep_radio_ipv4/safe_types.h | 139 + dlep_radio_ipv4/sim_dlep_radio.c | 466 ++++ dlep_radio_ipv4/sim_dlep_radio_cli.c | 2053 ++++++++++++++ dlep_radio_ipv4/sim_dlep_radio_cli.h | 43 + dlep_radio_ipv4/stw_system_timer.c | 339 +++ dlep_radio_ipv4/stw_system_timer.h | 102 + dlep_radio_ipv4/stw_timer.c | 761 ++++++ dlep_radio_ipv4/stw_timer.h | 234 ++ dlep_radio_ipv4/tags.lst | 88 + dlep_radio_ipv4/time_units.h | 173 ++ dlep_radio_ipv6/1fuzz_dlep_cli.c | 406 +++ dlep_radio_ipv6/1fuzz_encoder_tlv.c | 693 +++++ dlep_radio_ipv6/1fuzz_message_builder.c | 2411 ++++++++++++++++ dlep_radio_ipv6/CMakeLists.txt | 8 + dlep_radio_ipv6/cli.c | 936 +++++++ dlep_radio_ipv6/cli.h | 148 + .../config_examples/ipv6_radio1.cfg | 60 + .../config_examples/ipv6_radio2.cfg | 60 + .../config_examples/my_radio_discovery.cfg | 60 + .../config_examples/my_radio_discovery_2.cfg | 60 + dlep_radio_ipv6/config_examples/uut.cfg | 60 + dlep_radio_ipv6/dlep_buffers.c | 144 + dlep_radio_ipv6/dlep_buffers.h | 48 + dlep_radio_ipv6/dlep_client_message_parser.c | 379 +++ dlep_radio_ipv6/dlep_client_message_parser.h | 45 + dlep_radio_ipv6/dlep_client_metrics.c | 207 ++ dlep_radio_ipv6/dlep_client_metrics.h | 43 + .../dlep_client_neighbor_event_handlers.c | 1125 ++++++++ .../dlep_client_neighbor_event_handlers.h | 75 + dlep_radio_ipv6/dlep_client_neighbor_fsm.c | 498 ++++ dlep_radio_ipv6/dlep_client_neighbor_fsm.h | 103 + .../dlep_client_peer_event_handlers.c | 1634 +++++++++++ .../dlep_client_peer_event_handlers.h | 101 + dlep_radio_ipv6/dlep_client_peer_fsm.c | 568 ++++ dlep_radio_ipv6/dlep_client_peer_fsm.h | 103 + dlep_radio_ipv6/dlep_client_timer.c | 301 ++ dlep_radio_ipv6/dlep_client_timer.h | 64 + dlep_radio_ipv6/dlep_config.c | 670 +++++ dlep_radio_ipv6/dlep_config.h | 285 ++ dlep_radio_ipv6/dlep_context_neighbor.c | 316 +++ dlep_radio_ipv6/dlep_context_neighbor.h | 151 + .../dlep_context_neighbor_management.c | 476 ++++ .../dlep_context_neighbor_management.h | 63 + dlep_radio_ipv6/dlep_context_peer.c | 482 ++++ dlep_radio_ipv6/dlep_context_peer.h | 230 ++ .../dlep_context_peer_management.c | 499 ++++ .../dlep_context_peer_management.h | 64 + dlep_radio_ipv6/dlep_debug.c | 255 ++ dlep_radio_ipv6/dlep_debug.h | 103 + dlep_radio_ipv6/dlep_debug_cli.c | 334 +++ dlep_radio_ipv6/dlep_debug_cli.h | 40 + dlep_radio_ipv6/dlep_message_builder.c | 2419 +++++++++++++++++ dlep_radio_ipv6/dlep_message_builder.h | 133 + dlep_radio_ipv6/dlep_porter.c | 1149 ++++++++ dlep_radio_ipv6/dlep_porter.h | 117 + dlep_radio_ipv6/dlep_server_neighbor_fsm.h | 102 + dlep_radio_ipv6/dlep_sim_options.h | 79 + dlep_radio_ipv6/dlep_source_cli.c | 143 + dlep_radio_ipv6/dlep_source_cli.h | 40 + dlep_radio_ipv6/fsm.c | 790 ++++++ dlep_radio_ipv6/fsm.h | 340 +++ dlep_radio_ipv6/fuzz_dlep_cli.h | 40 + dlep_radio_ipv6/fuzz_encoder_tlv.h | 114 + dlep_radio_ipv6/fuzz_message_builder.h | 119 + dlep_radio_ipv6/fuzz_packet.c | 131 + dlep_radio_ipv6/fuzz_packet.h | 41 + dlep_radio_ipv6/ipv4_address.c | 160 ++ dlep_radio_ipv6/ipv4_address.h | 398 +++ dlep_radio_ipv6/ipv6_address.c | 211 ++ dlep_radio_ipv6/ipv6_address.h | 478 ++++ dlep_radio_ipv6/mac_address.c | 169 ++ dlep_radio_ipv6/mac_address.h | 361 +++ dlep_radio_ipv6/network_order.h | 235 ++ dlep_radio_ipv6/packet_dump.c | 125 + dlep_radio_ipv6/packet_dump.h | 41 + dlep_radio_ipv6/rfc5444_api_rc.h | 69 + dlep_radio_ipv6/rfc5444_decoder.c | 570 ++++ dlep_radio_ipv6/rfc5444_decoder.h | 130 + dlep_radio_ipv6/rfc5444_decoder_tlv.c | 1553 +++++++++++ dlep_radio_ipv6/rfc5444_decoder_tlv.h | 47 + dlep_radio_ipv6/rfc5444_encoder.c | 750 +++++ dlep_radio_ipv6/rfc5444_encoder.h | 129 + dlep_radio_ipv6/rfc5444_encoder_tlv.c | 1500 ++++++++++ dlep_radio_ipv6/rfc5444_encoder_tlv.h | 197 ++ dlep_radio_ipv6/rfc5444_experimental_tlv.c | 264 ++ dlep_radio_ipv6/rfc5444_experimental_tlv.h | 56 + dlep_radio_ipv6/rfc5444_packet_header.c | 179 ++ dlep_radio_ipv6/rfc5444_packet_header.h | 49 + dlep_radio_ipv6/rfc5444_scratch_pad.c | 384 +++ dlep_radio_ipv6/rfc5444_scratch_pad.h | 165 ++ dlep_radio_ipv6/rfc5444_types.h | 292 ++ dlep_radio_ipv6/rfc5444_utils.c | 400 +++ dlep_radio_ipv6/rfc5444_utils.h | 45 + dlep_radio_ipv6/runtime_environment.h | 41 + dlep_radio_ipv6/safe_limits.h | 195 ++ dlep_radio_ipv6/safe_types.h | 139 + dlep_radio_ipv6/sim_dlep_radio.c | 511 ++++ dlep_radio_ipv6/sim_dlep_radio_cli.c | 2062 ++++++++++++++ dlep_radio_ipv6/sim_dlep_radio_cli.h | 43 + dlep_radio_ipv6/stw_system_timer.c | 339 +++ dlep_radio_ipv6/stw_system_timer.h | 102 + dlep_radio_ipv6/stw_timer.c | 762 ++++++ dlep_radio_ipv6/stw_timer.h | 234 ++ dlep_radio_ipv6/tags | 450 +++ dlep_radio_ipv6/tags.lst | 88 + dlep_radio_ipv6/time_units.h | 173 ++ 201 files changed, 68064 insertions(+) create mode 100644 .cproject create mode 100644 .project delete mode 100644 CLI_Readme_DLEP.docx create mode 100644 CLI_Readme_DLEP.md create mode 100644 CMakeLists.txt delete mode 100644 Readme_DLEP.docx create mode 100644 Readme_DLEP.md delete mode 100644 dlep-rfc8175.tar create mode 100644 dlep_radio_ipv4/1fuzz_dlep_cli.c create mode 100644 dlep_radio_ipv4/1fuzz_encoder_tlv.c create mode 100644 dlep_radio_ipv4/1fuzz_message_builder.c create mode 100644 dlep_radio_ipv4/CMakeLists.txt create mode 100644 dlep_radio_ipv4/cli.c create mode 100644 dlep_radio_ipv4/cli.h create mode 100644 dlep_radio_ipv4/config_examples/my_radio_discovery.cfg create mode 100644 dlep_radio_ipv4/config_examples/my_radio_discovery_2.cfg create mode 100644 dlep_radio_ipv4/config_examples/uut.cfg create mode 100644 dlep_radio_ipv4/dlep_buffers.c create mode 100644 dlep_radio_ipv4/dlep_buffers.h create mode 100644 dlep_radio_ipv4/dlep_client_message_parser.c create mode 100644 dlep_radio_ipv4/dlep_client_message_parser.h create mode 100644 dlep_radio_ipv4/dlep_client_metrics.c create mode 100644 dlep_radio_ipv4/dlep_client_metrics.h create mode 100644 dlep_radio_ipv4/dlep_client_neighbor_event_handlers.c create mode 100644 dlep_radio_ipv4/dlep_client_neighbor_event_handlers.h create mode 100644 dlep_radio_ipv4/dlep_client_neighbor_fsm.c create mode 100644 dlep_radio_ipv4/dlep_client_neighbor_fsm.h create mode 100644 dlep_radio_ipv4/dlep_client_peer_event_handlers.c create mode 100644 dlep_radio_ipv4/dlep_client_peer_event_handlers.h create mode 100644 dlep_radio_ipv4/dlep_client_peer_fsm.c create mode 100644 dlep_radio_ipv4/dlep_client_peer_fsm.h create mode 100644 dlep_radio_ipv4/dlep_client_timer.c create mode 100644 dlep_radio_ipv4/dlep_client_timer.h create mode 100644 dlep_radio_ipv4/dlep_config.c create mode 100644 dlep_radio_ipv4/dlep_config.h create mode 100644 dlep_radio_ipv4/dlep_context_neighbor.c create mode 100644 dlep_radio_ipv4/dlep_context_neighbor.h create mode 100644 dlep_radio_ipv4/dlep_context_neighbor_management.c create mode 100644 dlep_radio_ipv4/dlep_context_neighbor_management.h create mode 100644 dlep_radio_ipv4/dlep_context_peer.c create mode 100644 dlep_radio_ipv4/dlep_context_peer.h create mode 100644 dlep_radio_ipv4/dlep_context_peer_management.c create mode 100644 dlep_radio_ipv4/dlep_context_peer_management.h create mode 100644 dlep_radio_ipv4/dlep_debug.c create mode 100644 dlep_radio_ipv4/dlep_debug.h create mode 100644 dlep_radio_ipv4/dlep_debug_cli.c create mode 100644 dlep_radio_ipv4/dlep_debug_cli.h create mode 100644 dlep_radio_ipv4/dlep_message_builder.c create mode 100644 dlep_radio_ipv4/dlep_message_builder.h create mode 100644 dlep_radio_ipv4/dlep_porter.c create mode 100644 dlep_radio_ipv4/dlep_porter.h create mode 100644 dlep_radio_ipv4/dlep_radio create mode 100644 dlep_radio_ipv4/dlep_radio_sub create mode 100644 dlep_radio_ipv4/dlep_server_neighbor_fsm.h create mode 100644 dlep_radio_ipv4/dlep_sim_options.h create mode 100644 dlep_radio_ipv4/dlep_source_cli.c create mode 100644 dlep_radio_ipv4/dlep_source_cli.h create mode 100644 dlep_radio_ipv4/dlep_tcp_sockfd create mode 100644 dlep_radio_ipv4/fsm.c create mode 100644 dlep_radio_ipv4/fsm.h create mode 100644 dlep_radio_ipv4/fuzz_dlep_cli.h create mode 100644 dlep_radio_ipv4/fuzz_encoder_tlv.h create mode 100644 dlep_radio_ipv4/fuzz_message_builder.h create mode 100644 dlep_radio_ipv4/fuzz_packet.c create mode 100644 dlep_radio_ipv4/fuzz_packet.h create mode 100644 dlep_radio_ipv4/ipv4_address.c create mode 100644 dlep_radio_ipv4/ipv4_address.h create mode 100644 dlep_radio_ipv4/ipv6_address.c create mode 100644 dlep_radio_ipv4/ipv6_address.h create mode 100644 dlep_radio_ipv4/mac_address.c create mode 100644 dlep_radio_ipv4/mac_address.h create mode 100644 dlep_radio_ipv4/mdr_present create mode 100644 dlep_radio_ipv4/network_order.h create mode 100644 dlep_radio_ipv4/packet_dump.c create mode 100644 dlep_radio_ipv4/packet_dump.h create mode 100644 dlep_radio_ipv4/rfc5444_api_rc.h create mode 100644 dlep_radio_ipv4/rfc5444_decoder.c create mode 100644 dlep_radio_ipv4/rfc5444_decoder.h create mode 100644 dlep_radio_ipv4/rfc5444_decoder_tlv.c create mode 100644 dlep_radio_ipv4/rfc5444_decoder_tlv.h create mode 100644 dlep_radio_ipv4/rfc5444_encoder.c create mode 100644 dlep_radio_ipv4/rfc5444_encoder.h create mode 100644 dlep_radio_ipv4/rfc5444_encoder_tlv.c create mode 100644 dlep_radio_ipv4/rfc5444_encoder_tlv.h create mode 100644 dlep_radio_ipv4/rfc5444_experimental_tlv.c create mode 100644 dlep_radio_ipv4/rfc5444_experimental_tlv.h create mode 100644 dlep_radio_ipv4/rfc5444_packet_header.c create mode 100644 dlep_radio_ipv4/rfc5444_packet_header.h create mode 100644 dlep_radio_ipv4/rfc5444_scratch_pad.c create mode 100644 dlep_radio_ipv4/rfc5444_scratch_pad.h create mode 100644 dlep_radio_ipv4/rfc5444_types.h create mode 100644 dlep_radio_ipv4/rfc5444_utils.c create mode 100644 dlep_radio_ipv4/rfc5444_utils.h create mode 100644 dlep_radio_ipv4/runtime_environment.h create mode 100644 dlep_radio_ipv4/safe_limits.h create mode 100644 dlep_radio_ipv4/safe_types.h create mode 100644 dlep_radio_ipv4/sim_dlep_radio.c create mode 100644 dlep_radio_ipv4/sim_dlep_radio_cli.c create mode 100644 dlep_radio_ipv4/sim_dlep_radio_cli.h create mode 100644 dlep_radio_ipv4/stw_system_timer.c create mode 100644 dlep_radio_ipv4/stw_system_timer.h create mode 100644 dlep_radio_ipv4/stw_timer.c create mode 100644 dlep_radio_ipv4/stw_timer.h create mode 100644 dlep_radio_ipv4/tags.lst create mode 100644 dlep_radio_ipv4/time_units.h create mode 100644 dlep_radio_ipv6/1fuzz_dlep_cli.c create mode 100644 dlep_radio_ipv6/1fuzz_encoder_tlv.c create mode 100644 dlep_radio_ipv6/1fuzz_message_builder.c create mode 100644 dlep_radio_ipv6/CMakeLists.txt create mode 100644 dlep_radio_ipv6/cli.c create mode 100644 dlep_radio_ipv6/cli.h create mode 100644 dlep_radio_ipv6/config_examples/ipv6_radio1.cfg create mode 100644 dlep_radio_ipv6/config_examples/ipv6_radio2.cfg create mode 100644 dlep_radio_ipv6/config_examples/my_radio_discovery.cfg create mode 100644 dlep_radio_ipv6/config_examples/my_radio_discovery_2.cfg create mode 100644 dlep_radio_ipv6/config_examples/uut.cfg create mode 100644 dlep_radio_ipv6/dlep_buffers.c create mode 100644 dlep_radio_ipv6/dlep_buffers.h create mode 100644 dlep_radio_ipv6/dlep_client_message_parser.c create mode 100644 dlep_radio_ipv6/dlep_client_message_parser.h create mode 100644 dlep_radio_ipv6/dlep_client_metrics.c create mode 100644 dlep_radio_ipv6/dlep_client_metrics.h create mode 100644 dlep_radio_ipv6/dlep_client_neighbor_event_handlers.c create mode 100644 dlep_radio_ipv6/dlep_client_neighbor_event_handlers.h create mode 100644 dlep_radio_ipv6/dlep_client_neighbor_fsm.c create mode 100644 dlep_radio_ipv6/dlep_client_neighbor_fsm.h create mode 100644 dlep_radio_ipv6/dlep_client_peer_event_handlers.c create mode 100644 dlep_radio_ipv6/dlep_client_peer_event_handlers.h create mode 100644 dlep_radio_ipv6/dlep_client_peer_fsm.c create mode 100644 dlep_radio_ipv6/dlep_client_peer_fsm.h create mode 100644 dlep_radio_ipv6/dlep_client_timer.c create mode 100644 dlep_radio_ipv6/dlep_client_timer.h create mode 100644 dlep_radio_ipv6/dlep_config.c create mode 100644 dlep_radio_ipv6/dlep_config.h create mode 100644 dlep_radio_ipv6/dlep_context_neighbor.c create mode 100644 dlep_radio_ipv6/dlep_context_neighbor.h create mode 100644 dlep_radio_ipv6/dlep_context_neighbor_management.c create mode 100644 dlep_radio_ipv6/dlep_context_neighbor_management.h create mode 100644 dlep_radio_ipv6/dlep_context_peer.c create mode 100644 dlep_radio_ipv6/dlep_context_peer.h create mode 100644 dlep_radio_ipv6/dlep_context_peer_management.c create mode 100644 dlep_radio_ipv6/dlep_context_peer_management.h create mode 100644 dlep_radio_ipv6/dlep_debug.c create mode 100644 dlep_radio_ipv6/dlep_debug.h create mode 100644 dlep_radio_ipv6/dlep_debug_cli.c create mode 100644 dlep_radio_ipv6/dlep_debug_cli.h create mode 100644 dlep_radio_ipv6/dlep_message_builder.c create mode 100644 dlep_radio_ipv6/dlep_message_builder.h create mode 100644 dlep_radio_ipv6/dlep_porter.c create mode 100644 dlep_radio_ipv6/dlep_porter.h create mode 100644 dlep_radio_ipv6/dlep_server_neighbor_fsm.h create mode 100644 dlep_radio_ipv6/dlep_sim_options.h create mode 100644 dlep_radio_ipv6/dlep_source_cli.c create mode 100644 dlep_radio_ipv6/dlep_source_cli.h create mode 100644 dlep_radio_ipv6/fsm.c create mode 100644 dlep_radio_ipv6/fsm.h create mode 100644 dlep_radio_ipv6/fuzz_dlep_cli.h create mode 100644 dlep_radio_ipv6/fuzz_encoder_tlv.h create mode 100644 dlep_radio_ipv6/fuzz_message_builder.h create mode 100644 dlep_radio_ipv6/fuzz_packet.c create mode 100644 dlep_radio_ipv6/fuzz_packet.h create mode 100644 dlep_radio_ipv6/ipv4_address.c create mode 100644 dlep_radio_ipv6/ipv4_address.h create mode 100644 dlep_radio_ipv6/ipv6_address.c create mode 100644 dlep_radio_ipv6/ipv6_address.h create mode 100644 dlep_radio_ipv6/mac_address.c create mode 100644 dlep_radio_ipv6/mac_address.h create mode 100644 dlep_radio_ipv6/network_order.h create mode 100644 dlep_radio_ipv6/packet_dump.c create mode 100644 dlep_radio_ipv6/packet_dump.h create mode 100644 dlep_radio_ipv6/rfc5444_api_rc.h create mode 100644 dlep_radio_ipv6/rfc5444_decoder.c create mode 100644 dlep_radio_ipv6/rfc5444_decoder.h create mode 100644 dlep_radio_ipv6/rfc5444_decoder_tlv.c create mode 100644 dlep_radio_ipv6/rfc5444_decoder_tlv.h create mode 100644 dlep_radio_ipv6/rfc5444_encoder.c create mode 100644 dlep_radio_ipv6/rfc5444_encoder.h create mode 100644 dlep_radio_ipv6/rfc5444_encoder_tlv.c create mode 100644 dlep_radio_ipv6/rfc5444_encoder_tlv.h create mode 100644 dlep_radio_ipv6/rfc5444_experimental_tlv.c create mode 100644 dlep_radio_ipv6/rfc5444_experimental_tlv.h create mode 100644 dlep_radio_ipv6/rfc5444_packet_header.c create mode 100644 dlep_radio_ipv6/rfc5444_packet_header.h create mode 100644 dlep_radio_ipv6/rfc5444_scratch_pad.c create mode 100644 dlep_radio_ipv6/rfc5444_scratch_pad.h create mode 100644 dlep_radio_ipv6/rfc5444_types.h create mode 100644 dlep_radio_ipv6/rfc5444_utils.c create mode 100644 dlep_radio_ipv6/rfc5444_utils.h create mode 100644 dlep_radio_ipv6/runtime_environment.h create mode 100644 dlep_radio_ipv6/safe_limits.h create mode 100644 dlep_radio_ipv6/safe_types.h create mode 100644 dlep_radio_ipv6/sim_dlep_radio.c create mode 100644 dlep_radio_ipv6/sim_dlep_radio_cli.c create mode 100644 dlep_radio_ipv6/sim_dlep_radio_cli.h create mode 100644 dlep_radio_ipv6/stw_system_timer.c create mode 100644 dlep_radio_ipv6/stw_system_timer.h create mode 100644 dlep_radio_ipv6/stw_timer.c create mode 100644 dlep_radio_ipv6/stw_timer.h create mode 100644 dlep_radio_ipv6/tags create mode 100644 dlep_radio_ipv6/tags.lst create mode 100644 dlep_radio_ipv6/time_units.h diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..4c20654 --- /dev/null +++ b/.cproject @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..47a285a --- /dev/null +++ b/.project @@ -0,0 +1,27 @@ + + + Cisco-DLEP-Radio-Simulator + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/CLI_Readme_DLEP.docx b/CLI_Readme_DLEP.docx deleted file mode 100644 index f8f47fd4872af8d6c6dc0e9953bd4c55cc146316..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19737 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
    7`+X|)(fR*GH$P&=_PkdkJev{*$VnP==)9F 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 diff --git a/CLI_Readme_DLEP.md b/CLI_Readme_DLEP.md new file mode 100644 index 0000000..00d38e8 --- /dev/null +++ b/CLI_Readme_DLEP.md @@ -0,0 +1,433 @@ +# RADIO CLI README + +This is a list of all the radio sim cli commands. parameters with a short description and the command directory hierarchy. + +Starting from the root: + +``` +Radio_RT-1 >ld +[show], [debug], [test] +[fuzz], start, stop +``` + +(Note: “~” is used to come back to main menu/root.) + +``` +Radio_RT-1 > start ? +start - starts the discovery process when MANUAL is defined in the config file. +``` +(Note: This is used for early versions of DLEP. In Latest Discovery Mode is enabled) + +``` +Radio_RT-1 > stop ? +``` +stop - immediately exits the simulation without sending any terminates. + +## SHOW COMMANDS: +``` +Radio_RT-1 >ld +[show], [debug], [test] +[fuzz], start, stop + +Radio_RT-1 >show + +Radio_RT-1 >ld +[system], [peer], [neighbor] + +Radio_RT-1 >system + +Radio_RT-1 >ld +system_show_timer + +Radio_RT-1 >system_show_timer ? +system_show_timer - lists timer stats +Radio_RT-1 > ~ + +Radio_RT-1 >show + +Radio_RT-1 >peer + +Radio_RT-1 >ld +peer_show_all, peer_show_fsm_history, peer_show_fsm_table + +Radio_RT-1 >peer_show_all ? +peer_show_all - lists all peers + +Radio_RT-1 >peer_show_fsm_history ? +peer_show_fsm_history - display peer state history + +Radio_RT-1 >peer_show_fsm_table ? +peer_show_fsm_table - displays peer state machine + +Radio_RT-1 > ~ + + +Radio_RT-1 >show + +Radio_RT-1 >neighbor + +Radio_RT-1 >ld +neighbor_show_mac, neighbor_show_all, neighbor_show_fsm_history +neighbor_show_fsm_table +Radio_RT-1 >neighbor_show_mac ? +neighbor_show_mac - display neighbor info for MAC address +where + - 11:22:33:44:55:66 +Radio_RT-1 >neighbor_show_all ? +neighbor_show_all - lists all client neighbors + +Radio_RT-1 >neighbor_show_fsm_history ? +neighbor_show_fsm_history - displays neighbor state history +where + - 11:22:33:44:55:66 + +Radio_RT-1 >neighbor_show_fsm_table ? +neighbor_show_fsm_table - displays neighbor state machine +where + - 11:22:33:44:55:66 + +Radio_RT-1 > ~ +``` + +## DEBUG COMMANDS: + +``` +Radio_RT-1 >ld +[show], [debug], [test] +[fuzz], start, stop + +Radio_RT-1 >debug + +Radio_RT-1 >ld +debug_show, debug_set, debug_clear +debug_enable, debug_disable + +Radio_RT-1 >debug_show ? +peer_debug_show - displays enabled debugging levels + +Radio_RT-1 >debug_set ? +debug_set [error|udp|incoming|outgoing|packet|peer|neighbor|metrics|scratch|decoder] +where + error - enables the error debug trace + udp - enables debug trace of the udp send-receive + incoming - enables debug trace of incoming packets + outgoing - enables debug trace of outgoing packets + packet - enables both incoming and outgoing packet trace + peer - enables peer specific debug trace + neighbor - enables neighbor specific debug trace + metrics - enables neighbor metrics trace + scratch - enables scratch pad trace + decoder - enables debug trace of TLV validation +Radio_RT-1 >debug_clear ? +debug_clear [error|udp|incoming|outgoing|packet|peer|neighbor|metrics|scratch|decoder] +where + error - disables the error debug trace + udp - disables debug trace for udp operations + incoming - disables debug trace of incoming packets + outgoing - disables debug trace of outgoing packets + packet - enables both incoming and outgoing packet trace + peer - disables peer specific debug trace + neighbor - disables neighbor specific debug trace + metrics - disables neighbor metrics trace + scratch - disables scratch pad trace + decoder - disables debug trace of TLV validation + +Radio_RT-1 >debug_enable ? +debug_enable - enables all debugs + +Radio_RT-1 >debug_disable ? +debug_disable - disables all debugs + +Radio_RT-1 > ~ +``` + +## TEST COMMANDS: + +``` +Radio_RT-1 >test + +Radio_RT-1 >ld +[peer], [neighbor] + +Radio_RT-1 >peer + +Radio_RT-1 >ld + +test_session_init, peer_test_terminate, peer_test_update +peer_test_offer, peer_test_init_ack, peer_test_update_res +peer_test_term_res, peer_test_heartbeat + + +Radio_RT-1 >test_session_init ? +session init enter 0 or 1 + + +Radio_RT-1 >peer_test_terminate ? +peer_test_terminate - sends a peer terminate + + +Radio_RT-1 >peer_test_update ? +peer_test_update - sends a peer update + + + +Radio_RT-1 >peer_test_offer ? +dlep_client_fsm_engine-436 normalized_event=2 p2peer=0x8d26468 peer_id=1 p2neighbor=(nil) + +OUTGOING- 0x44 0x4c 0x45 0x50 0x00 0x02 0x00 0x1e +OUTGOING- 0x00 0x04 0x00 0x0f 0x00 0x44 0x4c 0x45 +OUTGOING- 0x50 0x5f 0x52 0x61 0x64 0x69 0x6f 0x5f +OUTGOING- 0x52 0x54 0x32 0x00 0x02 0x00 0x07 0x00 +OUTGOING- 0x20 0x00 0x00 0x16 0x05 0xa7 + +Sending peer offer : + signal code=2 RFC5444_SIG_PEER_OFFER +sendto: udp failed : Invalid argument +dlep_send-806 Error: peer_id=1 send to 32.0.0.17 at port 1233 bytes=-1 + + +Radio_RT-1 >peer_test_init_ack ? +reaching here + +OUTGOING- 0x00 0x02 0x00 0x84 0x00 0x01 0x00 0x01 +OUTGOING- 0x00 0x00 0x04 0x00 0x0f 0x00 0x44 0x4c +OUTGOING- 0x45 0x50 0x5f 0x52 0x61 0x64 0x69 0x6f +OUTGOING- 0x5f 0x52 0x54 0x32 0x00 0x05 0x00 0x04 +OUTGOING- 0x00 0x00 0x13 0x88 0x00 0x0c 0x00 0x08 +OUTGOING- 0x00 0x00 0x00 0x00 0x05 0xf5 0xe1 0x00 +OUTGOING- 0x00 0x0d 0x00 0x08 0x00 0x00 0x00 0x00 +OUTGOING- 0x05 0xf5 0xe1 0x00 0x00 0x0e 0x00 0x08 +OUTGOING- 0x00 0x00 0x00 0x00 0x05 0xf5 0xe1 0x00 +OUTGOING- 0x00 0x0f 0x00 0x08 0x00 0x00 0x00 0x00 +OUTGOING- 0x05 0xf5 0xe1 0x00 0x00 0x10 0x00 0x08 +OUTGOING- 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfa +OUTGOING- 0x00 0x12 0x00 0x01 0x64 0x00 0x13 0x00 +OUTGOING- 0x01 0x64 0x00 0x11 0x00 0x01 0x64 0x00 +OUTGOING- 0x14 0x00 0x02 0x00 0x64 0x00 0x08 0x00 +OUTGOING- 0x05 0x01 0x20 0x00 0x00 0x16 0x00 0x0a +OUTGOING- 0x00 0x06 0x01 0xff 0xff 0xff 0x00 0x18 + +Sending Session initialization response : + Message code=2 RFC5444_MSG_PEER_INIT_RES +sendto: tcp failed : Socket operation on non-socket +dlep_tcp_send-882 Error: peer_id=1 send to 32.0.0.17 at port 3333 bytes=-1 + + +Radio_RT-1 >peer_test_update_res ? + +OUTGOING- 0x00 0x04 0x00 0x05 0x00 0x01 0x00 0x01 +OUTGOING- 0x00 + +Sending session update response : + Message code=4 RFC5444_MSG_PEER_UPDATE_RES +sendto: tcp failed : Socket operation on non-socket +dlep_tcp_send-882 Error: peer_id=1 send to 32.0.0.17 at port 3333 bytes=-1 + + + + +Radio_RT-1 >peer_test_term_res ? + +OUTGOING- 0x00 0x06 0x00 0x00 + +Sending session termination message : + Message code=5 RFC5444_MSG_PEER_TERM_RES +sendto: tcp failed : Socket operation on non-socket +dlep_tcp_send-882 Error: peer_id=1 send to 32.0.0.17 at port 3333 bytes=-1 + +Radio_RT-1 >peer_test_heartbeat ? + +OUTGOING- 0x00 0x10 0x00 0x00 + +Sending heartbeat message : + Message code=16 RFC5444_MSG_PEER_HEARTBEAT +sendto: tcp failed : Socket operation on non-socket +dlep_tcp_send-882 Error: peer_id=1 send to 32.0.0.17 at port 3333 bytes=-1 + +Radio_RT-1 > + + +Radio_RT-1 >~ + +Radio_RT-1 >test + +Radio_RT-1 >ld +[peer], [neighbor] + +Radio_RT-1 >neighbor + +Radio_RT-1 >ld + +neighbor_test_up, neighbor_test_credit_up, neighbor_test_metric_up +neighbor_test_ipv4, neighbor_test_ipv6, neighbor_test_down +neighbor_test_metrics, neighbor_test_rlq, neighbor_test_resources +neighbor_test_latency, neighbor_test_cdr, neighbor_test_mdr +neighbor_test_mtu, neighbor_test_update_msg +Radio_RT-1 >neighbor_test_up ? +neighbor_test_up - generate a neighbor up with Layer 3 addresse +where + - 11:22:33:44:55:66 + - 210.123.234.102 + + +Radio_RT-1 >neighbor_test_credit_up ? +neighbor_test_up - generate a neighbor up +where + - 11:22:33:44:55:66 + + + + + + + + +Radio_RT-1 >neighbor_test_metric_up ? +neighbor_test_metric_up - generate a neighbor up w/ metrics +where + - 11:22:33:44:55:66 + ipv4 addrss + - 0 - 100 + - 0 - 100 + - 64-bit millisecond value + - 64-bit bps value + - 64-bit bps value + - 16-bit + + +Radio_RT-1 >neighbor_test_ipv4 ? +neighbor_test_ipv4 - generate a neighbor address IPv4 update +where + - 11:22:33:44:55:66 + - add | drop + - 210.123.234.102 + +Radio_RT-1 >neighbor_test_ipv6 ? +neighbor_test_ipv6 - generate a neighbor address IPv6 update +where + - 11:22:33:44:55:66 + - add | drop + - 11223344:22334455:33445566:44556677 + +Radio_RT-1 >neighbor_test_down ? +neighbor_test_down - generate a neighbor down +where + - 11:22:33:44:55:66 + +Radio_RT-1 >neighbor_test_metrics ? +neighbor_test_metrics - generate a neighbor metrics update +where + - 11:22:33:44:55:66 + - 0 - 100 + - 0 - 100 + - 0 - 100 + - 16-bit millisecond value + - 64-bit bps value + - 64-bit bps value + - 64-bit bps value + - 64-bit bps value + - 16-bit + +Radio_RT-1 >neighbor_test_rlq ? +neighbor_test_rlq - generate a neighbor metrics update with a new RLQ +where + - 11:22:33:44:55:66 + - 0 - 100 + - 0 - 100 + +Radio_RT-1 >neighbor_test_resources ? +neighbor_test_resources - generate a neighbor metrics update with a new resource +where + - 11:22:33:44:55:66 + - 0 - 100 + - 0 - 100 + +Radio_RT-1 >neighbor_test_latency ? +neighbor_test_latency -generate a neighbor metrics update with a new latency +where + - 11:22:33:44:55:66 + 64-bit millisecond value + +Radio_RT-1 >neighbor_test_cdr ? +neighbor_test_cdr - generate a neighbor metrics update with a new CDR +where + - 11:22:33:44:55:66 + 64-bit bps value + 64-bit bps value + +Radio_RT-1 >neighbor_test_mdr ? +neighbor_test_mdr - generate a neighbor metrics update with a new MDR +where + - 11:22:33:44:55:66 + 64-bit bps value + 64-bit bps value +Radio_RT-1 >neighbor_test_mtu ? +neighbor_test_mdr - generate a neighbor metrics update with a new MDR +where + - 11:22:33:44:55:66 + 64-bit bps value + 64-bit bps value + + +Radio_RT-1 >neighbor_test_update_msg +neighbor_test_update_msg - generate a neighbor up +where + - 11:22:33:44:55:66 + +Radio_RT-1 > ~ +``` + +## FUZZ COMMANDS: + +``` +Radio_RT-1 >fuzz + +Radio_RT-1 >ld +[peer], [neighbor] + +Radio_RT-1 >peer + +Radio_RT-1 >ld +peer_fuzz_terminate, peer_fuzz_heartbeat + +Radio_RT-1 >peer_fuzz_terminate ? +peer_fuzz_terminate - sends a peer terminate + +Radio_RT-1 >peer_fuzz_heartbeat ? +peer_fuzz_heartbeat - sends a peer heartbeat + +Radio_RT-1 >~ + +Radio_RT-1 >fuzz + +Radio_RT-1 >ld +[peer], [neighbor] + +Radio_RT-1 >neighbor + +Radio_RT-1 >ld +neighbor_fuzz_up, neighbor_fuzz_term, neighbor_fuzz_metrics + +Radio_RT-1 >neighbor_fuzz_up ? +neighbor_fuzz_up - generate a neighbor up +where + - 11:22:33:44:55:66 + + +Radio_RT-1 >neighbor_fuzz_term ? +neighbor_fuzz_term - generate a neighbor terminate +where + - 11:22:33:44:55:66 +Radio_RT-1 >neighbor_fuzz_metrics ? +neighbor_fuzz_metrics +where + - 11:22:33:44:55:66 + - 0 - 100 + - 0 - 100 + - 16-bit millisecond value + - 64-bit bps value + - 64-bit bps value + + +Radio_RT-1 >~ +``` diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..84ff849 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.2.2) +project(Cisco-DLEP-Radio-Simulator) +add_subdirectory(dlep_radio_ipv4) +add_subdirectory(dlep_radio_ipv6) + diff --git a/Readme_DLEP.docx b/Readme_DLEP.docx deleted file mode 100644 index 8b0fc741b5f9f209eac8305bf3b69923d49f23c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 383913 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\*V@S(~CL>xz>Aa?>SA#;m@;WjiGt;u{;I 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�>j6BJx;zc-wb1$?JX=cnHKHlpaubaX~0}Ax(*p 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 diff --git a/Readme_DLEP.md b/Readme_DLEP.md new file mode 100644 index 0000000..c2f3d2c --- /dev/null +++ b/Readme_DLEP.md @@ -0,0 +1,273 @@ +# README + +The CISCO ESR DLEP (DLEP-rfc8175) is an implementation of the Dynamic Link Exchange Protocol, an IETF standards-track protocol (https://datatracker.ietf.org/doc/rfc8175/) that specifies a radio-to-router interface. An IP network protocol runs between a radio/modem and a router over a direct (single hop) connection. Its primary purpose is to enable the modem to tell the router about destinations (other computers/networks) that the modem can reach, and to provide metrics associated with those destinations. The router can then make routing decisions based on that information. + +## OS Requirement: + +This README describes how to build and run the Dlep implementation developed at CISCO ESR Laboratory. The radio simulator can be installed in a linux machine such as +* Red Hat Enterprise Linux Server release 6.9 +* Red Hat Enterprise Linux AS release 4 +* Ubuntu 16.04.3 LTS +* Ubuntu Linux version 14.04 LTS +* CentOS 7.0 + +## Build Procedure: + +``` +cmake . +make + +``` + +## Test Binary: + +The steps involved in testing or running the binary/ simulator are as follows: + +### Step 1 + +In the source directory there will be an example configuration file with the name “uut.cfg” + +You need to change the configuration file before launching the binary. + +Basic configuration changes need to be performed in “uut.cfg” file as follows: +1. The name of the simulator/Radio can be changed with name convention as SIM NAME. +2. IPv4 address or IPv6 address of the Radio, which is mention as LOCAL_IPV4 and LOCAL_IPV6 can be changed with new IPv4 and IPv6 respectively +3. IPv4 address or IPv6 address of the Router, which is mention as ROUTER_IPV4 and ROUTER_IPV6 can be changed with new IPv4 and IPv6 respectively +4. LOCAL_UDP_PORT should be 854, it should not be changed. +5. LOCAL_TCP_PORT, ROUTER_UDP_PORT and ROUTER_TCP_PORT can be changed to any value between <1-65534>. +6. DLEP_PEER_HEARTBEAT_INTERVAL can be set with default value or can be changed with respect to Router configuration. +7. DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD can be set with default value or changed if the rate of heartbeat is high or missing of heartbeat is observed frequently. + +#### IPV4 Configuration details: + +Sample of uut.cfg file inputs are as follows: + +``` +# +# DLEP Sim Radio Config File +# +SIM_NAME Radio_RT-1 + +DEBUG_FLAGS 0xFF +#DEBUG_FLAGS 0x00 + +# When the MANUAL_START is enabled, the user +# will need to enter "start" on the simulator +# cli to start the simulator. +MANUAL_START +DISCOVERY_START + +# String for the peer type TLV +TYPE_DESCRIPTION DLEP_Radio_RT2 + +LOCAL_UDP_PORT 854 +LOCAL_TCP_PORT 1447 +LOCAL_PORT 44444 +LOCAL_IPV4 a.b.c.d + +#Server pot values + +ROUTER_UDP_PORT 1233 +ROUTER_TCP_PORT 3333 +#ROUTER_PORT 7777 +ROUTER_IPV4 e.f.g.h + +LOCAL_ID 1015 + +### +### Add counters, timers, and thresholds +### + +# The node heartbeat interval is only used by the client. The +# server takes the clients value. Time units are seconds. +DLEP_PEER_HEARTBEAT_INTERVAL 5 +DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD 2 + + +# The heuristics to retry a lost session init ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_UP_ACK_TMO 2000 +DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD 4 + + +# The interval to send metrics. +# Time units are in milliseconds. +#DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 2000 +DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 0 + + +# The heuristics to retry a lost session term ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_DOWN_ACK_TMO 2000 +DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD 4 + +# +# end config +# +``` + +#### IPV6 Configuration details: + +Sample of uut.cfg file inputs are as follows: + +``` +# +# DLEP Sim Radio Config File +# +SIM_NAME ipv6_radio1 + +DEBUG_FLAGS 0xFF +#DEBUG_FLAGS 0x00 + +# When the MANUAL_START is enabled, the user +# will need to enter "start" on the simulator +# cli to start the simulator. +MANUAL_START +#DISCOVERY_START + +# string for the peer type TLV +TYPE_DESCRIPTION DLEP_Radio_Sim_1 + +LOCAL_UDP_PORT 854 +LOCAL_TCP_PORT 11115 +LOCAL_IPV6 A:B:C:D:E:F:G:H + +#Server pot values +ROUTER_UDP_PORT 11116 +ROUTER_TCP_PORT 11117 +ROUTER_IPV6 I:J:K:L:M:N:O:P + +LOCAL_ID 1111 + + + +### +### Add counters and timers and thresholds +### + +# The node heartbeat interval is only used by the client. The +# server takes the clients value. Time units are seconds. +DLEP_PEER_HEARTBEAT_INTERVAL 5 +DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD 2 + + +# The heuristics to retry a lost session init ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_UP_ACK_TMO 1000 +DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD 4 + + +# The interval to send metrics. +# Time units are in milliseconds. +#DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 2000 +DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 0 + + +# The heuristics to retry a lost session term ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_DOWN_ACK_TMO 1000 +DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD 4 + +# +# end config +# +``` + +### Step 2 + +Configure the ip-address of radio to the hardware interface through which the actual communication happens. + +Command to configure the ip-address to hardware interface in Linux prompt is as follows: + +IPv4: ifconfig netmask up + +Example: + +``` +ifconfig eth0 a.b.c.d netmask 255.255.255.0 up +``` + +IPv6: ifconfig inet6 add up + +Example: + +``` +ifconfig eth0 inet6 add a:b:c:d:e:f:g:h/64 up +``` + +### Step 3 + +To run the binary follow the following command: + +An example for IPv4 is shown below, binary execution is same for both IPv4 and IPv6. + +``` +./dlep_radio -f uut.cfg +``` + +### Step 4 + +Upon Successful launch, the simulator will appear as follows: + +``` +sim-radio-1 DLEP Configuration from uut.cfg + local udp port=854 + local tcp port=11111 + local ipv4=10.0.0.1 + router udp port=854 + router tcp port=11114 + router ipv4=10.0.0.2 + + Type Description: DLEP_Radio_RT2 + local ID=1025 + peer_offer_tmo=5 seconds + peer_heartbeat_interval=5 seconds + peer_heartbeat_missed_threshold=2 + peer_term_ack_tmo=1000 milliseconds + peer_term_missed_ack_threshold=3 + + neighbor_up_ack_tmo=2000 milliseconds + neighbor_up_missed_ack_threshold=4 + neighbor_update_interval_tmo=2000 milliseconds + neighbor_activity_timer=10 seconds + neighbor_down_ack_tmo=2000 milliseconds + neighbor_down_missed_ack_threshold=4 + +Adding multicast group...OK. + + waiting connect from router +start on launch +``` + +### Step 5 + +The simulator for DLEP is now up and running now, you can form the session using the router. + +If you enable the debug flags in the configuration file, you can observe the session establishment debugs. + +Example: + +``` +DEBUG_FLAGS 0xFF - Enables the debugs +#DEBUG_FLAGS 0x00 - Disables the debugs +``` + +As with the modem, you should see a "Peer up" message in both windows indicating that the DLEP session initialization successfully completed. + +### Step 6 + +To stop the simulator or to terminate the session completely you need to use “stop” as command, as shown below: + +``` +Radio_RT-1 >stop +``` + +By using this command, the radio simulator will be terminated and you will return to the Linux prompt. + +To relaunch the same radio you can follow from “Step 3”. In case, any modification in the source code you need to follow from “Step 1”. + +(Note: CLI options and the commands to use DLEP simulator is given in CLI_Readme file.) + +## MORE INFORMATION: + +For more information, please refer (https://datatracker.ietf.org/doc/rfc81s75/). diff --git a/dlep-rfc8175.tar b/dlep-rfc8175.tar deleted file mode 100644 index 4ebf70e7e4b7c60e2fddae4fa7f4beedacde8962..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11827200 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 z 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�(haRyL8oEN)53UL6h&qd~XXa8zG-fZ^aU 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%0D7{xN{fszLXMonvF8Di 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

    V580o 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%0AnmA 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


    6S_`S?Mo5%`II> z$O(VxIJcB~l}PzZcX3OpXNml0eOTqAR8e=HTaOx;7~!v%y2j8(jZ94Qmo9TlsiBF5 z{?fbMQfh1>?b!*Ij^S z(fB;3m1rH-hdbsXIM%!|W?s+2#B5fygw}R7rnFU%zP>HE?Fgjt;hGjy=0|b%^&ZFU z9IDcm7J{0bg&+hA zT6o7}-XcO$^ct@lMpeCH^AQ-+cDe;-6M}hAgZY&LgHNICzlJMh`23ryN}&FuZ99OF zSg-)q+6G(T1`^y88r%Q{4hwW58|8ZgZEJwKp(4ckjk^Au^Mwkp{vW}`ytYTJ`kS%- zN?rdxRUgN)g=+ts<8wf1Y?7YW5w1g(-jIKZ(kOqnlwQUy*lqk=R8q^R4YH9{u^t+nwBJd`oT#eB}_ldpoj3vh_ znGY1prHvSH>@w!H{i(0Vm;z+f@1aq+DK3l|mDa`lD`kvdh^pEQQot3J=oA`d0vBjI z+5!sE2I|LXpyL!!ybqp5%eDq`a#Mi7ikGg6$>`7)u%O`#LZH4_L;LDVL2*`AXwL&J zS9UR3c+gnJWf>7BK1gS%2!vk7SEH(POz83|1SY;}V^FQ_T$M{tQ-_7#K>ak0(&-AN z3(-XET(lV#L_vPxM~MTJ+aVwDIkXEsoR|a0oL(hAbopm}+*|~Fs74;Qy`gdir>&4t zKVReYa!lBSiwLsdbQdIIvFUCbCq7hlo^Ij9oXIv$%s8lK3wZj=e`RCEd}g=((!y$I zVzsDIS<7gJRd(SG^kc>0*yR)-e8OV}{`1$U>I{Z1Zg+yt& zM(Hm#T`=k*NY-K$M}8M2KKL2M93P{YaZuz|GHQg474wYZS(#X-hhE>?UXotNOZ)|V?>JHxAs85ACbYsacwL1SBT?HG;5;R=oHcDSt{4F-5_ zhkWoehdDmxFheuv6;Hxysw2$d+6Vv&R=X0b=^CrQ&J*U~=tvgkR721fbCNbzeDJ9k zGw`2>H#5MfS%+#$a2^XeWD>vFay@ZLED$tasT&V%s81@KILzXG)@m%lxaT@~L!XKi z>**C`yanbA<>uY+B}X8hgJ^R00h4)=-ZWIg8D9IGjclZ5J&-30JR5N4ctaj8W7!a> z2ud2OI{K@@@?{0=>og+>=5b#~$i&T!@kpV>#yEQ%4VDRF#ZFVObNNux5ODUmhPdMB zE>6JK3v+$paQ8EjprG8-FOLAz5@z%jeHwGM%SdXI%P^}SiwN4oQmUiy|=o>Xsr zgR3(62zbM6imlw;F}E}DF-R-WUxpNDRSwMAe@P*aogxk1$!93@UlmrivfC8^&xr!g z)Y=~$7-jL{uRs&6bMV303l74iesk6Z*f;RH6MOg5xYJFN3nAAsz!3CgcHs=Y%{(?a z-x$sT&TV9^OK>iN_Wy@RQ19*u8U}H6LC`7lQLM#TS5iEFTs=fCRDGwg$%6l>@a_P~ z5{XKY#Dw}Tvu(eL448qFBMk2d=9)8i{@vs5tbfXjnG=tnqQFs+OmSz&qYGL}7V$&NH>(ssx z5mhR2wl;`*`G^8^VVB!=mra$GG${3rj#jsPN2No!X|-~8w(?sRy6vag<=+4nb@o9I z{&bW}Hn6ET<>hy{?aSI0_l{VWMfuh!vl6X(TJxBlmO%*d;BBw51#O5?ay}{Jv>u0O$~F>GT?O z)Q!Hxy4Dvb253fKP*ntS9SsqTfj29{wi$aVxy>>OViNWuaq`I`xtsYZ5QvR*FObV2>t%So_y>zK<3^`Fpog=4ieB}F_J zjGc0$LTc04Dw(OAKDcbY$OYy}n=g&w#m%R?Ov$Fo&9Mzl#)9^yF2NSN-X3S6z*D?> zL0hA@2k%yJw$he}GQIomm7QkF++Az0>>*VqLOhtM^f6(Q4*O%%FT{xvUnLjMBjbR%>*?3`QW$5&I%TIhYW&^u`d*?jZ$ z7F$Lr%@7v7I*)8A0Hr;!g}s7g%lj|cY#9M&I16UeCy*@~5yh5ck=;F8UVPqT%POGr z)7Y|KmBkj$cc}62(m=AYKoR#IOzi?;GYI`w0a-97b*CXf0ipp%pOSVgj7Z*<}eCR{Z| z+=NjL-^vbE%a?6(8&SWx7F#&+qwpUAw}D|2$JKUH>=76E4yG_VyNKEDoN~09RVDEP zL=oHf{akQQ!XrYZG=~L*o&IzR2(f4Wj4K$O%%FzvX?&RDbCeE$9p+7b0Q7h z(Hhf2X()|pR)WbDX}op`Y8tnj&$^KKTv}JA#yrS5xb`Sd(l6=sZz{>ATb}O`n-Vy; z-96bg&w6Cv2=F~4`@KBCR%E})WNt%QJqN{x>`gV9c> zmXUHx{Q9qE<7nX5e`AVi`mc>BhyHuk;aBtfy#l@tM`kPQ`^FSx=)W>crT>ZvO8=o8 z(0|Osdf+(U`Hq#ZN9ExVm>xDn|1W_4FQ)!$Mr-{?cK3>KDQ-PvEvn_!KqtE*z)$I$ zE%<(Zs9H`Qt2gWQ5`wIdLE?_{{_jNeDL_pbjGSvO716gu-S@ z_OXTO>SP5^NwIpw^m^i-zg0jyPl$3^PlVKP99^v^R^X04 z(^WOVBi-tL#S*Xnj}eQX0GZqbPmJOTExg6xqz5AUlc&S~X{%3>^)1VE^?94^mHOzZ zil;tzUxYHAVX)PwgziM?1BX~6h2N{lR8+rAv^t39CBt0i9&!QFN5>K!EnzN(ULx{G}*J6e8ZK5paEAB~p^NXoC$2`*` z#W`oauw5&bm|qsf8B^~m&QSpGxe!|iM#);VH-vuf1zl}S<{nF~y-+lQy4q^yQO+n$ zliDFxcHN8v_=FRmNJrAD)Vg-A02c@M3l7GFg6&Qy8J6gQE;5o}UxB(OVZlcvrZkC* zXb1}>0u#?AJ9sr=_r~d;Om|0^X7X^mvYqr%u0_o$7)}{iCu!}bSUn;gpj?sDs$AUw zJxB9&mF`8BE-4{CS*+o~On`kKwzdT_Vh5wcgEf>CO%6i?2*d?VmbRZeTT$+6 z`(nE5%$V*y6~5B2v|rLO(iklqc6*P-|G#U%%s;P!vbev#N3v*Mr!eYT77L#6WN{C` z_e>Tt&Z&5}Q&|LjV76^U=hGR$!pLG1&BdFcQ(1V^sG@&SyA_JjlD-h~j0Ycmx<_Qc z@&zkjfy%=x(VZ+Jyvt~C%o&_U{~ghwMngq|UrtpF=$cIzBs?}%0-c_*X&X;v@orI9 zD%*5{#ioIpO*0{nENr@CuFB3(q4m}>-F1q^!oU4zk|pI&^@x9eK(G=I9*)W$|3-mp z&W0)AUm5wQ@l*VJ4B0@ko7v>gANTkd0Xn()2aLUY;t&fls>Tw!35)U+AHA?>{&eA7 z3OJo@(wB7<7j>xPsuD0QsU?e9IgltG&R&KS1_21?dB1ohlHcIUZW7NNjSx0+-^! zeV?!en{x~-`HYqOqVjOENgU7u8qkxc!GM}+K$_9YfXb20j=FY09lV=QINs!J1Ui|D z;J&sS!(|`Pwpj7Hc=0+FynXX`w8r}{iFN26BZ=zyn^Og5XC2T)Zes(-N@wbxfbPE3 z5k_>1iBKlUdo)ON*_nxVHV-_E6QfR_<4@U&kws%u2tcklYFXZ| zs7zcB5)R% zYK-*BiwD;}=2=DYh=}E(YRu(8aPe}N;_ch{#qU;E zaYfJ%?uH|X_xDu@xkVz2Yf(g`6189eUh}&H0P720w)F1P-{8zu+qq~h^^&UIpEK$; zqF&o!QjPcw4qfq2%x_}JXuQvJ(_R`I*hmI=h=~>rCSseXBZlXIvmX3w`x+2@t@2s4 znnkP9ix|5&&#-7|dJ%_ZXAz73qKZ@iz4=dzXV`HZb%a08l1~&g4 z82Q;(RfQTTsSGFZPzlguY4gOqbI0@#Q{ zQ21iOPC)#4Danw`GRDRKNyI}ib-zlDB;t?4%x%Qspb)VR1>!eLNe1Hm|I>&M&p`Zl zzXsypBHKn>O#hce{9P%@K)i&J^na4$T;B9^eA%yn_@QZt4x+%hc4nMbg126<)0q9iCKg4)8i~yCdLW>)ZU`PZ(aX_zM{F>!pUp@)3t8{vR>eRsqFt9oqs;)*| zH0O%Q0A9Z|uwe#(I4_|=dqu-lOfN%P`o$3c*9VcFFB2_@T4oRD;412P@U;ht4etUt z#DLRhOF6zQ0vvUF%ve4^Zf_eU%7$Q&)6Ut|8`A&4Vk3{p$(5&Tq zoMLs0mS#%J?fwUBxjAHymK%p^=RFU zE#YpOiM7DQT3i!5O^qJFT~@bfKDb!fGBG@*nV7aw7+A0SZ9&Pk#ad8wp7jx1Q0JXs z1ofHXyn_Q+mC3F%t;ru|)OA=o&rpi6yNlc>qb^Qi#EdQiW2A@$T~hJnP?dHJk=rh~)Ph z*~(XK`Fp5Fw?e>B4!Dl;3h5*=Q02Mqqu>?T@ioW8rX%rS!@b5U>?e{HC{nu)5~8INJ^@0zX*4(8l@cV>Hff2wk8sTe@v$ zqkr0jRtqM7ye&HL?1uUC`3n8~Hxj;{+xxl360+ZUKFsVHXlg6VkZ9Izf-<*{T zcV(bc1a#Oh1|?Dk2mj?O)Cb?!(Rck&TTJD6R6>xnADX}e@JUjVk7EoDPBhd?<^+c) z8eVo!G#n48hTG8|$E&|k9klAfv?uXu5(p)=hkN8twp{FZ^$Rkh#FopB6O3Gzid-&q z+fpt`@K?))Ni7#9wOp9ga$(ZQg=r%f>A&b7*|c*@%$5D<)Q%_1WfQ?fz0DXng*XW5 z*1M3N?<+nDE~}|{Ipdai@$$5=aaxx#i)QnWa{))+Wi#1!0jH3v5jK;ZJZQLMVuN_fM;KPDUS%<2G&C}ma|L;)pqW0=Qa5JsEr=scax z{@K^tKTVrISZFia*5)QsR$w#w*dq<2r>RbpIDHW&t(bN7nmT$}sG4hH@nEeB^k1sx z%~>VzX$GG69%1lI3OafJ9(0Oc&1Q8QGSJx;=zvMdXi&Tu4DF-kq6A5L#$E5oFuM0} zlX6a@o0v9|=mDeax!T6tZ7JJP*=Vc;)~7&;yWnwl)Ns$6tC5cql_`cUHsE|wS&34L z6y|EI29i^7RR5BwY&H<=ey&!WLCYP73+pkeXp9h*5lwrp_Ltj404eIR4tGw4Bg`^a zQ~My^Mii=>NK40GxN<_afC?Fzi7k5p(48Cm5K%)H@sDRKSd8oLSs%5)l**6+{-8mdGB}o5vMDIb~ z@M(^`WC<~KFsZwk2{@f`xlCB!Y#oz}O5?$sZ>5rP>0}?NQ?o!RL?=U+6as&>a&j1Q z>pNO4jay$V*mdGo`^78-B@#4jT&(fSx(%3%`>?5VpMm@crCaW6v-y%eiU6!RwI>cG z0ySMc0rku(Q~BZX;N7)?&_*67@498_oEbjAJVDCoA$nUeQj z%;zCMpN?uSVLsh0m*TZ2pf@5GGstA4Wr-3wBh2kF2Oo(BNS6#@!n10R!-pD`;`Q`B?%d;> z)hYEMnik>tLysY@n8Z{ zx%Ln>7$CId9kBS6a7j^`Ru*M9JI%?pWPWhd%r4icE~m50GP}!*RF}eqwYN(5lAZvL z2$8Px?EMTj*^Ady%~=yDABFF~TyN-dub9t&eJrk+U!(N&(u}S)(_LA<2_Xr+_WZ%~ zs5ZhMl`+K4hz9vW2VHnGUASB?a?&!-B^BwpFSIO@7G?Ou!#!vOJr>*Z*BSC$v1uNz zBw-Pohx;9zDK_Z|Rx!lz5$UULN$2UCOUYCDcw~7R8&@edIvKq+9b}-8F|@qvx`pz2 z29&u5N}6e3u_!(6=$flL{{XHw6hT3p{n2wgc;+87_!~hf%%TjVPJP(s?`vZ;#h^8c z`_!9)@5~!Yg;DZ!HT0@vcicQL1NKD*wx}7od04klF3fx1udY7ouq5C zo5;C8SG%0ch&khbNyoNp*$?;uvQIo}Q_@=~neqpl5^;^%#)ji$PJPO5@yY>4>&;+x zJ7Q&HJMc$^F0kx|w08!`OAJUbrvg#4atZ7PC(X@ZEfN$Vz#6K*zI)U^sZu9&R+9a*gIjsQN^xQlf>_oq|+-#Ad|G zQP{ZRb{+7MjdL{J-D|o7n|87(w`KfIZ(-AZ$c_g)uQsfweze4+`HApb7_UmTqdhmH z@o&%=OR&w-t!4wi?mTIg8ikI!mkP));|{1eJ|4W$?SLbOEZZH94&c##mjSxBfaX-V z$=L~4dg|?Xut&BW-o6&1KOTVlmmkIt@0R0R?xS4rqYe0J#GfCDZbm1uj81OfA5b=} zP5Z8`6~cS6uGk|Ue0{!Q&_0TtvT0RdOJY1BDzyk2t@xWQYABF$aH4XT0#OGWlB~*q z@+b|*K2bK|w7}Rz;0Rn*p2Q!Sa@5}dg2u}7# zHD#IX*!Ia~S?p-yyLu!?)L^qpYaN;!YR|KeKN$~CeN;a-iAmBoYmxc%)V{YBAVX-lF7{b@lp zWpr_abit+OCZ|6vOS(e(k2lcpRQ_&Q2x}iFwsrvSzrd_Wsly2A1#Y^N6d7A<&FEtv z^wHi&A0M(NK7JD`cj4}%c>5gzmDs#(+ZTY0iJ_E8AA_^9uC$EuD6j6C7^?Cg(8bOZ zSCYm)kt(H$Erg*xvG8bPVtcC2oYMf)GO;&fhGK1EhGK1EKS!upAF&aQ5K+&>%=(}j zJ3`f`UT>v0*LKk28oyd!$@cS$M`)mDsvi$PvznUg~{dc;R zp6#V8YmlzI@anz<1!q&KAKPy1E$pzso9-0&#)#@Jt()1&)_cfC>C#KPaCJAP*EV$x zt4&4Ex~cr@G5ma~bmOIScJn+0!0H~ede%+k%CFsSymZcP^kJJWy2&b=*@4sV;Q4YT zCpVqmjVl{<$}X@!-99p5LceEEvTj{VXqKm3K4dt_{OBVo$IA4(>em zSc*UKdGb@0#PGmx6P06Az|O)4f5#kBu~&lwXXN~4Z}UxqRZJD7kaw+{*Njx#)53ZS zLP25*s;O{Ig&ZSLuWmLoeLd-j?r$jdW_#m(bqW%dX|UGp1$Ky@)X6bB zmv0@NFS#5SmQ1x=Fk=;6=3Z@k6?+9gAM;)&DyU1&JWXvgG%O;e{qB>2;EBLA3=vYc zXmupe@G#3Rk_dN$$7^?PkoEpsZ|Z=1@bP^XFimM}Q>2fV%=eN5nN-50DF5a6=O!wK zvWI}vzCRE#@7PhT$i5p76zp0#*{)NWjSWfCUGRh|@n0j_c&M(Awuv!b`sC3Z>K0ta z5i}pV76$RzUQH9wk3n0!a?UN#f5z+C&A+1(t98}u0A2?cCU*C>E7Z$|egMP zcDC}9k8s;hv&+Asz#xQk4|mI_qg=9KCGP#Xy^eIt%k1*Wy8T>Tp6&kJ$KA4tXvzT8 zz4Fv~`X~iA+f}Kf-LjK(yDZ9gx8*wKXdaWG@P1U3Ntg6Ut1gD#60NSapXoE+?{RAM|eY1yw~LC(sb#cz{xoI$o|-<8#H8EUdU`tTf3`CJZ`4 zovTbYjZ?65Dbuw|`*JGNW}dQSRi?0~j8rC9S&gzi=C#kNOpCO#W>bn`ZkbUESD6y% zD&X7_Rm5exKlgFnxZC@4uTreE?$14`Q@MzG5<~@iMQOEc(DhNmlJq^0W<0p&cRf

    Oe%RSm{ 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⋁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 u;Ipu5>! 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

      mL+o?(sxb$j6Ot)EjPl7N5 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

      ^MoxwTs-zxU2`$ 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%0D-gxB;mh=Lm=>WK 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 z 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 z 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 z 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

      t1K`R%=XycOUv4;bna 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�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�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

      b>Lkj8KEs!O@y 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

      k)>ps>s1wRG;>ho1W3N5hr> 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 B}O2VkJnUTkW|R7+O}yEORt739!-x@Qm| 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 J*Mwu` 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

      #j8Ir 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

      w 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�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 z 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%0A|9sz?8c{ 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

      3FT0Q^@&a5w=CEO=^|KQ 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%0DL(BHN>Ad-^otT4|<3Ew<~1I6W@d5 zJJ|sY<9=`Na){akdH1_}#+IPz-g#dDz#u#!lpbgh+5@Iik7R&f@G}_O1}u4Ue10m; z6UxB0!^=LlstC#y^3TCW>G>C6bh3oi56`h}eL^yo09ePQaDX?(ZBTbmtFw3hxGUtT zpq!l#d;2;XGCqQn4!nID9AiJ6?R5o=dE^hseHJ?k`{V<31zai^8afi$b)NDdUkDk^ zwl^N^ypE8)thJqOZf(5QT5YaoFD`H6?-%c6ueWwy+1TC5Py^Q{cizl49%RewZ)UHy z)>n0mnr|S&WqUi@*veXuHrHBBl(*Jb)^=Bs`XjrKw(A=^*;?ySYX^XLHZpc<;9AXX zp$9-8HF1*|JuKgEt+jUEypug>?I4HTc7{;NY&kG_$$K`duwab>GCdU*%C}wHa6efLOkb=LU?6kZMBIn z_nSa;`Tkl{dj*{uk5ro*2$}t z4T(nFxdY0#c6|HSTieY$+45G4`B4;y2U{EHh`dHKGIO1c*P9B8;~+%%;X)O165)ib zt!xw&R-4PXBKr^nxSq6-VgIo7=)H-FpE4=TKFbXmTn(SgqQVywFYJq<_KT@!H}@s- z>b@95b8bW1+P;`Y0NporF&^Vv^ilM^dGC`}x)9igE$PdB$(>-tn3h(Fj~I?CYwH0; z?dKezJT;}KNH0PJ{D{1$`03G^9B+uvpLHrKIbXdQO+bI*@i~%FI^GVB&*3{2?;_47 zy&D+E@>%@jsylE|)%GyEeL6UbTi=@a;=~2~AH&1R7hTJWj(+~^MZAoNuDIA`w=bqS zI5_fT=e@&h@+b44voCtg`dzpp&ZKqrC2cam8nl0$P3BtN{hULbR^_b#V;`9ovaJUz zayo!O@b>b~PJ6T2+-k2PUVY=W=GL2^_WdbxI9z|RzQv1*5=q#DEAVY22Y(j2ldd)% zJZNr>>L%1If@e?UfMDtvzb%8BZR?eLv3Zf9&dnz24^ zoSi7h$DI@42A40Zv66u>_6)KvPLK9!8Rl?+>3GpU-^W=U?Ntr}Tej9Wv3_B##y}zy zEW&_gFk@yT>_dnIZKTOQiCDn^zMu^Z>jmZ$zFKn~6;~5>7OWtVg{WuL$&HM3)b*vA zj+e8A95i-e-9!UqZ7%kg15mV%3Eu1l%`o$faV z$4dlPjc5_k`r4@h^e5v2)cs|;RC|Fcjt2KLU^jkb)zI&eqK6C?77ML(_jBt17KZ~M zdfmRuY%$x`VT3E{e9|>7p-e~-OrkdF0t5)IA@vjxFV=TbkGk$xQ%y!^0^L`!iH24? zTf0pMnLH8ZYCwY=2O!FniUA2Lws`%kEthNB57w3+f^B4^;N&=}t3=FDesKd_vA9o0 zIO;0TMhLC%oOq0KsBo_};^m!$J8GP@5F1t}{d? z4*C@kBJ!+_g-qq`PPV?gwia>H%nK5H?>6X!@^#C(*ofHoV}p#HCd7ZgOJ3Z@Z3kAb zwM1U1!|j|=T{Sp~P^}_M(!#dzOF1G|`)CmO5l6Ifw(_mO57qKavNT2Wa72X!S-(21quU~|> z^oM&mkGxT*yPK=aJI(Q_y}USpCizh4^<8g|N3idDZ~^ZRLTm2StA&~oh7tE@e41e^ zoqi}3TeoA+>0;nUFV^Qy3>kvztPo!&${o=`)Uj1Ec^7ChIC&2}-KuETw7TJLun`B7pxv^!gFwe*5ilBFJjXC{X z5oomaTcwJ?Pdtd(m1Q+Ap=0Y2vt3k^#3*=Sul%K6k$70+>5=8tRi0`+HwDx@cy0=K z6Ys6RF{Xf@GMsW(p25&9*b5+nwOTWmPUR1E8m}V9Zn}R7X2x@KKJfp==jOa;M&-ug zZ;&}JTk5Ns^7ZpJYzoF(e{JIabui@BJ)U?npYOx{Y|1L9({uB?&ioD&hO8WW^_7YH zSF#Tm>!9GEWpe&D0=c%Hue#4I=gvXm+5DShIbU<~;@->KZ3Z~eiGFoY8WqJ=S7DjO zI1{v^F9v0F5X%~(P3ULEDd5@Y(?NeeW5+_#+Fi0l<`4S}0Yv#CM(js+)E68byWt$t z9seRSMdFvKV|!;BfMef6utOMxs(=CVX?GoAvk2{Mu7+bqg4dhP;@ggTu~UV}FKR{< zJ1eMQ??RN5jOcLg`6yt^7du=3GDjg^2&0)$bk#ne2sRNY%=Y6w4`a-Upljou#Z`~# z|GiK@vG&pEfvc(>RsZ#x=hbyMMJzZ7{2qhFemEkvqk*&%MG#_g_WPH6K2=X-_~(Lh z1fC1D0-#ZMlW6^pasMkyb+SJSWa0Z1eyZ<(P0dfw&gAZYHRh)mp5Ol}F!C><;KR88 z#RyEOBzTH6KnDY;6p7f}*dLxF#+O&P8l!J{HJ;z{dVb4`q9gy? zfeHQmmX}-_dw$F7uiq^%iAWE3h5Qw-q)0QKd@d=|q(X6-rYXVeZsB?oZZf>YD@LIt zubO#_>)yR>BqeOEMb*mEIswiEu8@d=?;(D5c;0`;I96nxAQc%i4q`*izY$H&KWqs& z=pp{xHPviGi2b!iz#t%PH9~zE72MmGwjPjMM|90-@1GtJ81J&6$!)i+#7hcsaiHY7 zN(utEY#FW3C)hJw=-tP=O>)->zdwHK3kau>eO#-hYk`$=J7&8DR$iJVU>yW?RWPt0cbo^I zo4qctk7(!aE)yBSABT6^k26JC!!C%qiUNl4h_k!&#Nl}iZx%M>!neZp3qaYyTd|Zt^a}1EOr5k)17EM+K}p}Zx0=lyn3 zXE9pl6hRt(84AY)-g2wFSLUP^s(^88n6LQ%kvGb6ttP8)acy;v5EF@O_#*AZJ~tOM zmdm_sVlIHn!_Gc(I}D%6JzXMHahoc-QuLwTI?Bbz zJ6plkMW{_EQ&YW6Dd5zej0x{b;HSTjSwi)D`Zg+0zNr1-jyW$Y;JL0;Gjnd`n?c9A zW^fUzt&a9mjXlIajvA|0UMtsUMWqxJHN8#zNZ9@oc0JEQIu39K)$jk4e37o%mHw^Y z|KpLC+3DQ=e`;Z&@qGV(B_?09@`thi|0p$TA|@=6(g)qW{$&S7BVJot3j2KjeI=LA zWoqdzJpzU8KC*bDk7eZJC?s_8ux^miMWEj-qlB z6%amGjoh^!KckBg;4`}LZzo`T?CgKW^@r4*Uji6jc=0BMF89+ zpNjyvNjet+aHDK40zvc4R3>v_otr0fA(VR`o%krW*oSA>PU1O+?d1o}wxsLXZnyEl zHkpMFABA}>h%O`JP#>9Uk)Mirq;;oshy+Z`Kh)VXn^t;)hUEXbhU?p{Yy}&|a5bOl z{^ZszZ`z7J1$GWM2`j&cv)|fBvx3!*YY6Y%W?9^wlQ7=OoZy7$+Ztva8+$gw0*WNd`Q7V3)pRED!st1lr zi7Q4glUWsj%?;3k1Skntqe4Nk*t{?*@J3*u9f2||EV7@;Y#NU`l`;sg+ab(I>W21F zp&^hprWXW&vB+v5Ig_|1{x5$1-#WnwmPmzs{~cwtQu8c1)u}0-MAQECh-L2A%0?f zS>03)r-Y7p01?U@!P#_Uc42mLW_~uoTPg;$$zs>G8f{l2#X2fwrw;2p<^gd$s*EX0 z)C1z7%p<-uJv}qCfLC7T7w2Xd7UmYG5(=z^rvVfMAk{R4I#KV~NIR6I`4S{bRCd9IfUWqaWGI&3WJzigTU9Q&=3iV ztP~1>z*%1;#}yhBRI8^5-4@_lz|~hp`1F6CDL6LMf0;t5s^>ui9Z04 z32{71iON7fY*9j3C`K0^P)u3^h!}?^0j0EDXe*gm0t$`9B4qNDoE>ZC?=>A0&zt>~ zaA36mPfiFd%j5M>s`vj*%_Gro-v2i@Kl9xGcRg-jt<{I&|Knbn?zvb}82+=$SH3dM zbj6d4!R3YI&Bc))5@g`P2%qBZdCKSKDW9LGeC8awp@UEkJg@5@lN_Vz1yE8Y1KieKXB9lq-3GB{66AcJqWePxZbAT>eaRhopHIC!J@=YuY=L zRe`I(KognX^TagQmyrwHr<7|W<2XE{>rDnO9l~*vRaS89u*^q{+0mbNn*lr#!_wSH zsDv7p!mdz@eS0|kqfmo6%6tt;SQdsxd)jF|3N`o#VQ|;%sV?CBB9chu2r>-ORqgUkLAGUuM) z<$|#26Bvcr20y@xuFJHMLS9l{ZX0v?4}2ML7KSh^nGuqoC(4nT)Sr5a7ld!6$nLIg zmRDy7XuvS8v;~suZ(!5;u%wx^fWtR!fGClNaMo5ffX_VFg(Q&iaPwv# zSADn#^NqJ*n6IyHw|6#h)U>vSr?BL2n)8UH!9twflKMEUL2NnRvg_b>M7DQ+$*Y;% zt{t79A0T5z2m3kARPVNb4qa@I+MCNOuQqphB}VrN2$dn+LRDOzDOPRF8Wx4>fcyxF zA@Lg6SfESl&cy^$zAlij2QRR=@F~2(j14Mo_UOZL9Fu_d<}1tF+s)6f?>=(7AKCL^ z3n!`lktzSYj~#Np$XL6-_Oq?E&&y+>TV1^llMa*P6|^^=hS*x+!;7ZPP0es1GdxqGkC~oc;JzCk zdV+?C4&8E!%K;S`c(nX;NY0Ok*0%YwA|x>Oq@^`m>uF7dTM1#J>RvzY>WihE!jI+3 zQidp1EHH2lyGx*WT=faAZyy|Fc)p3xKT*hNFp?*9J@4;hH5v+ISUi>O;ej~N((iY0 ze@o0j!e=uIC1JB(4>7h+@y1NQ!{=e|US6Q?)ZM$iGkJ&WPS&`~Xh-=&PQzrqOtByQh+(0YT9TA@rQiN2zx!GD%oytTZ(OpNbM)XWn0 zjl{^!t=Ay;=}%$eup)`6qn=96ZPHZBCd1Jl3y}P-IC}CyE%h^0GlF6ks zH)_QA(eg^$vP#Ezyqql*Aqyvpm0!+sio|oGtZq)Fcn;&~!sV4$nybM2{(6)16r+*T zF9C2_WsF^cJb3+IZ9iH?K(1uqZ*OS`FF==!UcT~@ARD+kCW11Oc( zaAdN+@}}XunAE1O-~!Ud%e&rO)cUAx6A%_4^c-{-)tY#&_bz)U2N~Y8hStZcfQX*P3)py^ zSRVS|k;~(S?5x{`Exy;qQ^!;o1RBe_sp%pUIZKMArK}YR8n-T4R#CV400D0zla5vR zw^(;&tGSBTj9!QNwDEdSTa^_b@;T&jAeyb>Rnc`KfSYDkJYi!6HkuZVG5=!(< zO?5x|k%o#*fZ@sGc-4PEi&mC=v!WmqcawMtP=~M_v z+1ef8P$(-Jnp&vnvYIj0q1XVSBZq7CKv+BHKFIZ3-CuE668BooP}qubMTemMTg}jN zmFLi%%w$K6S#n)D%q>jtjop?ZJ=x&jYKBSitA`;7w%eYrHqEA`M0y^v^HgL$s%X>ELn83!QB~ z4$5uF&9g2!eIhr$YqP%L>_3l6?iVpHAirFcavL?>qQ$O$2e$b}i+;g}1YX{OfQ9}p zirDJb#%6gNhncf@=yP&>v!1i9^Gifs-redP^v<(K`T(-JoFX@rJ8l@m6;{ zd%@SF<3#{z1z_7tNP+3+e1y`l8YnW}w3yUAKtvxCFfqUc&cqp01EB?!@PM zzAcwd2G~xxTW_Sue`c6Q*FM>?GQTb2O2}=o_Ikti#gLh-T{HQl2$g=Bwr|>c+d++2N@4z!4!X6oMuyMB}ty6|Td5yHEJRFaZ|y5w_Y0h^tHyxSZ?39s>&gj_6ouFk~m{0AEmz~~P(B`-Pe z?i#t;{r&cE!u{c3T2r_Ua8>9RFHziWYp%6P;Q}dj@xC*T27fni0LYc zZeuy9rKCcY;M%K+wV;$;le;NWVZ0sH#45V59aqrsKd7`6ZBWv|A}%*-ry{ZsREAHjd;=I5X9|4W(qAs4!dr2#1YHm1c(`=91A z+r^r`jG)cvZ!AqW0q3L)hdeu5yUlAr>mfovMlSyQhTyJ(9JzWum@8N%tLV^?MgQR{u;L?>hTP%75{!4eiadlgU!BNZ;Tp;Hgjh1Ixsf$HarV z3emlb$FnJtpDe{v>KPq)nZW-EC3$7>@r}WgJg!$ITVRDChnGXZ!<9J*Q1fmiJ_NMp z+gC4v7Abu>XBWKYqC~{cLQD z>~-lU2%-N+)c*-KVrTo$fWG~9WhPj=n=%3#^8B*D-yNtp`aiFXk8k7QHf%Yi(G4S|jRx-v7Owl`%;_izYg@ZT#V!L)j4 z%73oh_O$;5P4V9=x9m$x{P)T&_n+K&z1~0S18w~G>Yd{jCmefx2mXdqe7r}lS!8H^ggbNgtsY z-F(Q~i|63}J?Fsa{r_P2q|J9GuXFOR#MkftadonhfB$)EuJQc+r@s=(`LNFaBPr3; zul|y~+~nNGkq+*G?of_0+!O7d;Pi$EJn}$P-(HBC4lhL6=au~XP;+=6YHF$QKGdD8 zb+*qFq4GDP_<{esL1Gv-zgb=wLbzsH7&e8~IPCZKxmaBJEoipCNm3ZLzkW^_w&p?J zbyLD9_WtM}f3oCe2mgd{!*nnXkDDcfAtE=-1w#a-E18*3&%186lAao>0XVR8%GhBE@XK`zKTJS!!?s7qob;GSB&G&z|;vNw2+H zwvw!Sy4U4ZSV9tGf)}GS6kq^t*3F(AcNrCcPI8|KlIdoTaQg@_@$0!m+Jne?Lsshy z2Iu=dsm8b|E(h#yHA(owlI@H0x4XErzntOZ7D*V$2d+#5C^;NF<7Vd53%t4d5-KP* zz^;1&4SF`fOBUccu9-zhY4oL!GJ0m?t|f% z{kOUO$TDAFtBf;W3>aHCrcMzH=zeCG7G7#(2c2iGKYo}_sw^$dzBC;Hn2Wzo&o0ir zG>5NR;k0*h(i`A{Epr?ZYe3H4l4MA?Gu)}O|4h$*L7N~=Q)$fkip zs2xP+lZ6h64aUstU3=bGwqlK;(2JJH(7|iyoCVzyvRv~Ir#zhPIyc`Qc? z<_~~iwn)AXDhEuz0hCI5JDR$Z`KW|N!U&RySBK=~H-BqIsv*QXUu|}3iMQ9R&v>4p z=Z;N%;Q2P^S|UXfw;FD7Iy@qd8y@jBK8HrWmdlo_tfwJ;(mQ)wWk2XHQ`YeDP#Z#3 zNiH6Y1}l4PsUAh@JF1f~0ITO%3%Yk%4eZBE(A+BB!^7S_IsdFQkjkUc9=0v2%0jG? zFSq&E83aJzC$FpmN6X{SK-QwhQ3`TZIj_qoZ@YED6BtE@McSBDG8F9XE}sC0n#00( zjznK47tn}!D-lKb3hBaKIY8LwGMA1RXKc7fg)leC2hG4VESt7I8R`4Soqncb*gor= zcHhc4m@$AaC<7P=At3-bfI~j)_ONq=b1naK4?6%{bQ*M^v!7-A$6d%4u;Ta7QluT8 zpI@>^-@_MK6Y#D>j8IfO(3XZJPhabh=KM0%XeaAhcAp&>s1}&rfi<2qKRPMU1fa zy7eryX1_tRiei9}X-eFcN1F zs#bs#bJ3?^P7hCUJSI~!ozqUwKtD2T)Bn%jyZ5(s-0H&p_vllsC_Am}O4h};-0f5Q z{Ah`ec_K?Xl$_KjJ3k(Zq%1ZRsq$h+>CXGv-{%1avu0g+5$)J5*~TK*nhOSl!C(Lk z@IZ=)ROhb8T}$MoKVj{Ha!ig=ISBXXEOLlcYu?;I>eC(H3rB3Rz)vy+UwBR$AIL24 zBnYU=5tS+XzTH8r|ClH+-=GVLuLtffFNFwzo%BQ^h&)*T06sD>gS$phw>cRPws_VB znxpPz^c)eOTwMvFqRrjEob+4jfyoEq8xYsEp93O24!uc2( zM2mtThhS5X0x1R&t3nNeQ!rD?a&gV;379FWjjo`0-|BCTAk>Yq*WO1Wg#MOz0fF3; z6Cj{&2;XEwaOQ0Nd~bs@Arunb$Dd6d(0vX?{Jh*2C8Y>gV>s#e(X`BZy?XwpejG`7 zxRJO{5O1+4P03gmgAjsq=<~tP*D{T!fDr%!I+p&y&jFkq9ilg5$wO?3{0f2=G z970=O%8neVI}ct55b+Yg;yNgX)lqu=BS%= zhUUUqF;Of)ge(L_16j=YgUWJlRVlQja=awvDA%;N@z$YhvG{dzEym@D4Ns?NmIud1 z>mn{-UAZL~)2xxq;0E*;WpLvc*tYrG<_>;v~8VmDKi&01#xQkUt8d%&cB-JUVE@~HY1Mr3+`AtHkl)kzXy1Enkh29BO zb{b?0u*`o4M>T|i)F2a8#Ns(`yh7f*BLr?v7?EZy9@v&HN7uYF>aV^*6n}a48i$HC zWbeYmzR)9^psQz7xlbURWmQ5K^BfrK-1P{fQzAlGUN2Zx~L0OTH>=A20BM$P#DZK z-kFCxz8*}O1sUxO?a5$gm6h&tSY|ZhK>S&fxX9iu|Bovuo0qzp5v1+%E1>Aq96eDfTNP;<_6}LB)U}kP@hQ*O-YYi%~#^BOj zpdJo@{8{j|N*K6=L)T~2#Ej>EdX_Kj0XpsczxU`#>im!Ve~(t@|4%_COF#b`rSPm@ zIjw0{DP-b>6M>{+f&!W6G#=AFdeA315T25uiv&O)A-Wk|+=_M+-Uyp;N9c&70hO8W zaN!>2f@c4grYR)HlKQI?K1`+b9_>OUO$Vmn#J(vyYTyj`x`v@c(I!Th4_AY0!CzRO zGjIvtqwWaeKXKiLb!M=Mq*fPyr$-5%u=wSmhwKN~fu#XD?yRCdot#HUOz(w6DCZ~9 zIh;;^sH{%-|7s_ENp+KS3ANLF@G3sJ{}r~)?%=`I^TeYemQMOvyVt!)KI?bJ?bIWL zz3oeDVRN^mZ5KK!(F-0cOV6|lM~?A!x1W689NskXuruc4xcT*@TWcJ(N|nij{$&?K zfodZAW{jhci0BE`h3Ej*q_%EFs(!RlIuGN9rwGf;b8iJ(`D+$8Tm+GJXWJrq zxPV{}T62R`e*TB8|MBDW`G4=p!`1nJZbUCoVHxLtp5-%C;^IF?kC9Q+!CvmtCcc9jnv;8)Fjyb(6 zD?cn9Y3+yH_Y(B*IDU5W@*GFqO;BwCcXWWvdQ>|GdZNmKq+iCc7?-$? zpPSHr)X$@nx?bA+0U7SUP#pl~943DCl6}z};kKrnfF>Fqc|bSSYxtovOEMPWHFD1z z8|8&aQcROsMwG#7VcxIOz_k7|31S&>p<~FI(i-4Y$`b8ekaf zbc1c-RK=o&pW+D78dKW(dhpo zmOFcUd~$kLJ1eMzHO8>`?(Kb>dE3{+CdJtX$?9CNgzDKry(T%aU1g0hf$Me>NB{;r zyLc@366wIrJ5Ap8O>ca;x~@Ox==~lM5t_J*jH^=>C#OUg6Z-E-^oHIDwpSSbaDh<+ zMF3xH+S~=rI;f4dwNbVOdn1g7IwrQ{I`=XWPBQH_t%*z<0TV9@8(;47}6hE_5eHXTI?U zAAoM!Y}&2E8^pU%E2!9!;l@{~M(#!bBw@G@ zOE_5Z!awHQ1Y6u#|7NuH%_OQ0hlAl$TpsoG3IBeLWf}olp%KQqKn7LtRnIU}CJ!m4 zCCDlrw)yn87)qsyXoEE3O8h3SiZo$?Z(bu@2E8^ws)*3aRb}_)TDE-MvSp+ZM}Fer zX)K=d^@}&m0*RiHfAx_h^(Gj|t`g%tE++AZ`Cf569){>!9IKAmOh+oao{reKR55ZT zH%6LB909R@F7o*T&au}`M5!5puhAo7XbeubZNV?gaeV-VlBVWspk_zN?6`XV!%6+S z#z~zygutI(ygjdOuJ3+6RKeIDUjd#{Ib6Nlm6Dy~5EH2TE5gZYu}8q(JX$ za1|@R%+x8U0eEwVl`NhfU8eP$y;#zo1)7}F0p=Kp$>EH0oGgHg3GTn*7*mWsW%&kb zQdU##1MK}eS`kAx)}_X?onOA$`6W^wn;BTpC{~WtwpE)di`U?sbI5c#$1s2=&T%H- z@i(W(b~i~&lYC^`n4`m-MvQWq%g(-J2z6-287=p-HdVmQS%k5;J57>RsV6C(CM8Q_ zK)A?c*e2s|oSxK>zprj$oZAlBUTRjM$dn_Z^2)ECMS0AUeG0!L60n`Q^<@VTVa#r8 zW{Di2^h8~)*G~eNw9TX#7x!c15&6p`W1ANvbO_57h&^!ZUO&^twpbp{t8YCS1?c7o zaasDx$W>>rV2;QlHxPYtrFMhXui#{NnaK*;i;^N6SukZb0grMOBN!&RoUk|ExMHuF zrrqLFLO@{f(^r+Vv+Dmje)F1prPRrp*pu((-t3?y0|<%D&2cB&h`9J!gmBt3+ngMj zRJFMhEag7w!bLmT+-i>IC9XYCD-qjXsFI)}0XNnm7GE%oqXP(QK0c4TwE`||LSVR& zIUWyouf{)&1JXXZf3O`O3`qM{_Xq^w8aXd^>`>>JU&L2NgeC38_3xxEY-H>b=3EAt z!GC}r+KncH;ZVsTn;dGe(r2{CeYU$%oRug`is|hK(>MnyPTfR6?D3}IKgOxfvVJo1k_c1bw9 z)H;dW3Nc>jk0}|Z81maKMI_-$eKOS?laiCD)+#FEyLPiFpclsqA)$h=bLtv-k!@*VOq62?lp3s z$8k41LOJ$mE3<5u5p|6#A56AYH4ad?zqp>~IOGfw4GsBxg-geZsZ=Oq2NCxMTXzD& z1J~cD;NyC>AcES~?E*ZT8&WV#>_^ff$V@h*k8_~NvTz}jA`NdwV|=ef-e*h7r2P`k zQ3}gD5>yU(=LzmAcaa|yts3x{P$^0~IfGHT5OO26 zASBxo!&Ww#uA_pIh07+1#+0KC`6Vy{< zp44C@3<6G(nmJD&og9Cg)`fW!4xAD5% z;XnyKCLl!>IS3l%%W8P`O?!PaRZHrW;3x&Op7a&y%vf*stZ|(JFJER#2Do$>$P_7P z${7k4LYNtyGJOT$l#DlrKIhRuBnJf132J4>Ky0t!Z%&A<!A~fkW%Z+;-@XRIHK60cPs%f^oV} z&hpLOUZgl{EoYCpi_+Ex{OLKogF3@07h~~m5@aeeP1+z+d&Z7aE`3@~KTX*T`kcwO znjBP)A%>iu|J|AO=d_)_5rCp?Uzw&t$Uk|Y0WT}2Efg3EM>EHM5Exb+vb-I_8CcjL zKHjow#ip26um9CetBSe6LvR5V$nRuCow_WRy}4xQbk^M^XIaI2O^L!=c-%5iI_iFw zJ&vgQPc3GDOj%ByOYpt4?bKF~uv$7B^ar@yL)RA5MsvaCY?QesR6o=l_rhFlu}#Jo zX+SmL?`R~|qf=lb4cL{lk-22|wu*#4Om>|Tg;;Wl=GaT60g{PR zf6aVI$v2w@Elt~&?#;Q&#D-Hug|%cq+baWCka4*M%mak9B)o0R;K$V$9OGbDukjLTj6g$*9olQzV1PdBeM6m&l zcS9UdR1@h}YPAFcRF-6X+%P2D*(^-Tk5RukO%HhAJGh9!$&~t7=ORljudOlNom^$x zm}Wf&+II~4pSKzvTFWOjtCZ3q;FoOp1%w%vn+ zNUxn|&%AF@5v_;D?WuS`dsF>axeBv;xZbz$B0ZfS0g=;xvC3~qR|jj>KNG@0&fbtc zrfF?G7`RsE#)X|GgZ`%?qv%8$I`a}X%p}6ELaMkTL$c{osCCRq322@{=eLs6f+Z_f zc86dnwSx*Gd^nSy?Zq7PtS4P)4>+E0kP6XnKv=)IZn$?995xoC?EjTSERmJ-S=aTo z9zBiL-Tt_KFY=gSjrc@sSG0H)Dk<8x|EAd1b9|a zGUz0}uvP|2iR}<{&NQ*MDF?U1J<(@c4w)=`qLa*p3?e-5N9hB9giOb?>8fK)-R-oW zXy;B6;><#y-2$-d;Bv7ZJ}sW!K1Vt3OB9Cgazv*|kLxad=vD^w$%UD(=F_Eulrnl$ zP`X>ecUPc-GdNFqVGf~7y*sobbU;f|$#P3Emng^7x?@B|yYxK7v$_m337FX|T7`Hm zyC!oq3baMzlj$l`_n8~WGzEZPwWf$Ld0%renJ+c|wg`aque~+_&2Cw0M z@W*G-|CikmY%|W0alG1Kf%uFcyUO(VpO=$ge~qIDO}ae^8Z!@Ec!83HkOkt`UvWPP$?Hx{`N%t>)NriQ zf*>zO2lpzvqBe`uV}9t4uYgFfe#BcvD2HKJV)AUFV5>KgQ;!wtb&-xkve3!SHbnF~ zT;JuvfPp>Pz$)=)pJ!jhI*mqGydsB-)5MG75~K<2^RXp9K}4R(1-60yxXXKY2#tbh zC##U42rI&~e8u0y`fpm#yw_%()$Z^(XN(YrL6o=+$0itpq<((6^-d8Sey@r7w)Lc+59p z3c1Uv*l9rBIvpGh<#+5tuFgSgMz@X0O<6A~0|5_G@=2iFw z+=XVBMzy_e|K|o%@hyX5W`e31ww?koeb^MyNbE(A?7NVcPtM zqrN*;0-Tx10&w|2Z;PHDSM|Ph43Jc2%m3m+0xvM&Df*v>dpnu@FFPy!&jN^Epvp4! zKjwtwD20k2e(jEtPjxsztccqisDN-<;JNUlYkAnoD(}lG@5@TbQ%AUM#IQcE9lSZJ z)T7fk_0y9x=xmM;RYh}ra$GxpS+5;`TYX(UK1YBlWM4TxiK^e@S9JEOvQqLev5(lZ zXIA8t6{Nz1IRY;G?an3iH)a8Qb6z_-ODK2p-UUjXMDkR+95}5BMQCKj^tS}|G`+xv z_k|m_!jo*WIBkf$^%z!?K%e%axT(G7pSld`Hzy8@fuGhl>VH9s63+sg{3BtZD%C}A{E8T z(lN=79gNM}$ZVP>j?2X5X z8s^kkCf?2V4pf{F0=*P?SUotQkuNs!HDWO^epw_22G5Nt`&>{t??$a*bKJT@KESq^ z`_%YiG0nLcB`u+5CBy;Vr~kQb_F?>!YqV(c$B$ zdRUX&ER5*?&g~No_%3fs-Hv??lOeESCqk+NAQA|&!(r#TiR?pYCI~1W$GG4c-h#0+>e9<8zUUb#yLeg9T!?TJELX zFL0L%d_~-9=7r{T6%&*7&IDzypdw*R7RYTnSw!6k)BW6!eFYh>E7eK-GOqnwdY5mg zTO9K9Ffa!vgKmUQ1c+L2pV-p7hCn&;$RM{8y)2*$df#QFDBY1Qusi>}ZBk#WuyQ-Y$|*1@c(=G27PCZ=VFq*^Wqrvhabmqu3Q z_>7&6tvrdi7$tG})II-_DvCz$&OpY2^@y9d?+_I`KvXD!g36|m1rqpJlZWFgJv*FI!H8di4%iPPdyc`HX|ygx z(~wXaWa&Jw2~w88Fp`DqS{H2r0iE=%4+rX>;MC@U-4w650TU?-W0BC*3ydS~C3hsD zNzcY0%qI>rYgkc25M;>if?P-31M3qulM$38Wj4N?Nc8Y1jr5oaXwBBi;1Oqi1eI|8_oh!tT^)?O~L zG1;IG-fKM?vk?-yz6mr;D+N=rVqm)dhb5rULk1W)j(ML2mHw`A+4DiGxOII~uK(HF z-`jhV^8bFk_h@&e|Cxr@WxQX8{)gus?wr#p<&zozS^;{0`VJK7!%s3l20M}lx%w;6AD`^o3c z;Y||{wRqf4GSN8HV7}M&>t?Iryf~pAO1$dcynj^kZa?`hXwzgnua=6tvsccAWIf2F zzAoEKyK^ylmrOsN*mme|T=LrFml=vQ0ue_>zP3i8w%dxubmpq=HM(uYI)4lyN7W#@ z_3(a3|J_s3Q+Jugl%kSe$U&YI(Q&(!+9TdH5qDPHRYSjf8twQBxA`RlYxpaMG{8h{i|{F*41GDQhk*sW*Cnzp$MD zWJnRDd=bV|16~tUze9r3K7~O)e3$mwE*snPKmS=(WsKhNl|2mOde}27=rT^&6-s-J zGebdIO@Rk$CdnDz7(rhIWj{bC`YgIDzvC0rSb|=RATqP9werhaChq(4+BacBAgW?5VE?vx#Joqhac@ zIqBinm}qoy?aWC8wrI#b$5Mc4l&p}QMTPIT`|I!SxK^PzXk>tUL#K7)M@hk!81 zbxzuKt4Yh$WfQAjGU||VZ0i!s9Jj`61+*4TAvQrr_Md!0i{l~X6LuU1sbF1DAJrQF z;#B9d?r-)u&*7@KvlX)nX=H=tR84v8IZs~y(Vwia8~6#YIj$Y2O<6a3-1 z?yap1pm7+F&8_G5sKKgASc>t~E2)xP zEP`;6a2gts>W^|kx^Y~^eaaUn^~QO$sut#s+A$J-I5sxf~9BQfny&!^%x>f>_UVv6RPTkt#jM7mm>iP4jc?IdLRPi?7q0pegUv-t?J-! z1~36Zw>|R93+5RaVus!^@y(XlR%UbG@;+IntMO3pSTok_8PcCfL?bNmCL zr9b!}X(xr1D)Yd~wgN8UA;rJ|jlr~l;3&H)C9+m7W!i!(CQnukDA+B~qPhHVMfHHv z2?@i)I}7z_R|Zn13zJ1MF9HOxi96B~oA}qDCypebDgMkS8@?$c9lpOnT-KihOy`Ci z1=)UR_B4v2@TP!b*$DW9BOsg1m_GGA2-;rd%rndI^PA9>{%dqyCYI^>KsV&Z#ciw< z!fwe;b1Cv!(RRfS@X@nz5hROBZ*19pcw834yz!lxqa=3F*D2G!g3&bN5RYgX0BOLrV zb$CiEt`O3_g<3PX(&&;6(#i<8Ow(AP5V2MMF&L7tI#4=0z-DIBD9 z&q-M_doJM4!Nis`XyFGX#DZ5v^fHA_2OxZWPVI-GQb3Yls_^f5m9R^F7V{P!%G2C3 zk5_6vB8;q(V`NO+<`BV})WVXhQcchvgY>RxjvGU~WphEQn}e%P>t~)7Nt;fs%CASY zv-9=fjK->dNQLY-2G_W+#}pgLVZMp?F@C1-Ua9q)8&xoxV`Slhq)j7PYCM$6Z9Fz< z#;i*Xm?p9yjLoQXzayHMwW1 zug@}En^$ejfC0{HdHgT9`RzA`jQYCwpmq6fhBnhhcJO)f7%{%~AMQMP`0x+>z4LHa z|L*MUJ$n2w<^R9C`|#1q|38h#kMaBKwXZb@`&suo(%8NSgZ^drUG$RX2DpMoYiG6B z4XPKSm=t!`)|>_iz6fWs^ml%F`Eu>+?9-hcIB`ZlTp`o39#D_pRE`=*msLNfYgDI? zJ)zS^ECg_W-abR&4_y%#RUU+ABesNf>>b1LI(G{e9CfcJ@F*FubgS3Z9RmfDFR^{R zt_0lyyxQ5p$@kUzTL%C^)7Us(C#yRUZ#wfb>)QF-(<8djsLgYg1ToM&TwILk+pe}?p*!h=Y zoJennyKxU#B?%^ux7Q%vZW3JYzw_p_0l%ll`Rfx8rG422K|~61SlodtwL*{|QTL}1 zd$dz*VzM9?`7>3t2(#04R|keK|}j8Zjy{};(mS7&_v?{aiK{obGLSD>1b{r};^C%ftRPY)j> zBxtl_4SdYM2ugr6X!M8o@FGU6%A2CTI{igNpQ6@2o9D~F|0jGtMJWshr6lAJe%N+t zM1;N(=_e)i2G3?6Ju0Z2HCGn{R~G|U7Xw!p1HY7ufx+E5ZoF5CYjJjEZppXla0Hy; zlH3eMQa7uDv8ZI>A`9@?Rni(?r(4Q2mD+lcqozM@;1(S^8jkWB*9vmb;p=G)8uIM| zU4Jmd1(PllnWc9(=^J;b5b39T!`OA)c(&~Zp+XkCMbwkHv4*~;vb6K#Pth}|@c#Kv zuO;N^gUK2i2&uDvY)Mky-0((4ROOJ@e-pRbxQb>ZX^gK2xs`YvDXIvUr4F+HNiva! zoiwDC8c%zOwu3A{^0vH*9Dvz$DbUh4E9L<1D^CTUR!rO(7^R1R9K zCJibln3p2i&>?bXL~rmas_WI2vL+H!CN=AD0K;^*%W7qCCpC+w+tPVt@#ZTQV=YWZ zks9g|vU9+i3voGjs4vf;CW2pVL*hm^YKNQR8t_~68>~L?Q=xnp6M0$?3>HJUQbbCG zRm`uWE z?eq9|vSp7J%@Ci97To$p48ARzd2oowbw)7fstR_XNr$n?46dmg`fk4mn?UkZaa2T@Ge=M-l!9pN0vU=#0bC2 zy@)XL@Uq|wrp!mdkwxv>@}!$uJ= zG~LZcJqj6zNeemrso^Tv!yGwe7BpqWpc})^#l;3Y#-8h-o}{dP^QtX(|H?r zY=5ckxt(-*Z3dg`-5X7BvrB3*9eZ%0NfFqVHYMpT`tBpm?Ar@8DH}DnR0O$DB&F81 zTXOPlo)uky@dZ}!+%3(vP8}oxvyplx@CHk_7-p%V6q3Mwf|I0sK>7I^*A+Zh2Pw`r zZ3IP2x&TMcOOPV=4Km_lv8BhD;hv@IJl%~f6?ZK>Xq#<#`76zyrGxac&ue(D2IpA) zML1q$-50f0zT#c2L?Pa+4@T@8p1STsWG`#+hizskBza;@PHB-7ss1DfK{yr$%NBBQO%=LW+kEB6V$yUSzKpv#=G`_IbhXStNCai(llK+i3j|FG z#)+tDo#AjWq|*a1ga5YI{Jcz`k(9%>4G1UN;PNgmeWqMDOQ|K+tQa7Qa;G&>^gqjv zE1^{}NJ7m@l9u9d0l{q#7E#6bX7oqti5JF*#>}k=_+dLelDknH-u;a>T;)<{DiP5$(H~&|L{W$W|_w{+;s6$Ue{#W(i+c z$Sm&pg$P7e1$ZUi8htHJ?XICRO6PKRYi7!RVc;x<+*3pRqUqhnl62WOf=aXh*{RyK zJ1a%YO0XIKcmxgNFTOCGN78V5qH~Us&qCC!ZN#Z3V-t{ShAG|_Nka)G zUxg$@VJIE1lBlz5cLo)BM@(r!-eF0O^sBEoA|<<$ju zF=wDS`A!ItOwTqGt^mw$q@I^@J%vhw4G>)IwEOC0}7uX;OZ;$fL1j)SjiUamQ(p!;P`SrZSZ%K@XEr_dn^*6rJ0~zS7c33Tz=NuyJ<`1{~oEwWvH>$b7 zo#ATW{7c{q3@&2^bXc8YXiJnz1?zP7LKZQxg5Mdrfq&h=ZDv9t|6>i_`m)vh`y)Vz zbbcdoP5=|{j-w2fF)wA)P@{3)3{RQb5)*NnduNCz--c{6KWxE_&QqG(9%ELVE5)XC zK%^ahGC+V8<$M&Bf;QrwC1nn)llBPUvjRr@QRy_8G2RMBvc6pFw+?g4{Dp-|gUYef zz}z345^TcI)HZG`H~XzlFL|9kxF_TEAKVJG>-6nfyS;3yFgDFAv$W?f$SDptgbZi+ zaF&#JxD!ogt`c_qz(oPjw+En@G5oE0!CD|pHu9C9@RRSBILA3L-vUky{|YWtRfpJ- zdf4JKuGoBvo;UtbQ8TGUT2xHZrN@vst{y5%%wZy5tLUedD;~~F2)yp5cMd#M(!bF2KaYkPZRC6PGvgm|~ zX=)+PA`Bpo)}|h2bL!4UE7rpt>&}7pZ?Np#NN2@l*|O87;#HSAm2d|xS%^kHEM}X0 z%x7{5&?3_*`I!W#V9Y_s1-s1pndUEX4tKBhW>n!0=*cr-Z5w6eP>wGlDauZ(%2U|U z0#S!Q{3k71POTtfyay`i1j`m5;>^h^DKW#nWFaZB;CX=6vu6S)Xc$~R?q4i&tb5MI z7UB<6AIa6UGFfDr{23e|lwZc}hw7I&Hen8Jq=XL_7SNHbqhc2faQQNDbD@x2^7w_X#Ss@(ThR!0;)D9Cg7U`r1?Oa zkgIXD(Yhx^w)S>*cbVAw0R0T2vs)xFzJ?b2=U8dcy=FEyydlZXRQ;wFWMl$%@4bq{6IXmC0Hz=#D@A|f}@pw)%Y(Z<=UHSsyX*aEYCjiL>1`Riw{ z()vBb!C>ko22oIJy}goLDZmx0VlcdN!)ry%d)?|y+C0-Sn+i%GCe?Kp8c$w2V(ShA zXcx`^qBbYM$ci#(BdQhtc82fZWO6f+*i4%d%xh@`(*&&ZsSR#ONU)dnd2a+-b!2tpXi|f=Gtv30YIJt;^8ANNy&Azk z1gh!pp$9#T)+=ZDjjjBL+W9MJ!6THYSB}r$Mkg<$%JJLiyV~)gOilG~rwB}O7M;|i z+UwJ!S{1iwYR3mhZw{&8eu1jTC+7&A__}tEcF#{D_UT%yRnLeGH2Jz(KX`@qD=%tC zwez=|(aYNTF`Ipfb}P|orG8#Jcym;#N2hPtP;^Wfz4Z5{b(&RL%kHL7_2q6!!*FOI6(BSv^|RH?n* zj1DWWE8kY7;t3k6OECqK^?!I(m8a;ng8xg72oC7rX)*gB7V@_U37-}E6a4%ds@b-IRq z$X>7owKmZ2N46E`h0OKa9*nn;6ugV8nGO^zcwvX0`4=iLWC+k)=wEaL!;tjk^UEb* zMoG&$<2Y3a40Bj{3qM` zhV*K85sbG`ohi(vj4N?yOtuOh*6rU+#>I?C%-)^}K@LHvE=iE7JSbp1lreNs# z)@b)X_a5x-|K-8%gI&sQWHGqLFuXMxqJT9iQf)Xh@g0mx#*-~v8MV4yg;|52P2p6T z&P@gD^Y`Vjy>h*5RQ+28@{LL?G6QaF@l%$|5ukwq0uh$qZ!t;Oaw_fN27LsK&sAwx zD$P}8$5(OC)pFcZHOw8-cDcg?q5rY_lY}_ikuwV_yCh>evdlV)rjmMsmX+nZZDKqO zoJ+q-qAq0Yw!%3vE_SFC{4-^U4rQPtpmiX14g ztYOt|yZwejhHpA&QXdl8pxyCc(%X>UXd@fLQntI}Y--%I?&DDeb<>|7{Hbtw+9L{D z7UCpYayl1^vd*Q`Pu8{2b6=QS5wWW9yI^3t{!i4g&amAO z<9wWQe6|>HJNOjq|Mng~K`hwahYueS0UcY6@0|goiu#Xz+F^)(!k<6KB;~eC7&CB*Ye44V&!gnK56ETioO_> zKr6I>s!!UvqpnZdSX9}k+Mv6r`?Q6-DEzdAyQuuMg*z$zw23KdKcadz#om-sXlJ_K zZwN*AgRAGU+V8K(hS2L?q@LZ5wqafPxid~a?{{cV8E<#{$>+`CO%o5bc-%J4oF>vE z1{%;2pU6cLc4z9Gcl*hDLB)?0lWyGkW$Yu1=EZYMUxNuG6@+(-2bS2WDASZQmKJ#g zM;6cO2(}XFAX``Pe5dz2*`B6yDpuK=)qftp5<0ga2h zA(6d`5o$_!f}OO+lVQh>{v4IzFKC7RIQ{ zWRwSNHl3n$=eXpG2qsI9iL|weg2c@tLeKY*76x(ep>j83Q*$i`xUI=n66cVyOBI)( zPf?F}&ZJ8W1iBAp8EaXe>sSpwL;SevYl8mB1?h7;X;9gk3E4w z0?T(}gn*HQ%cKL83}JlFJlv?ez=a6S!GhttPoaCuF(cL6eHGFNmkryrNpMJBoeg{z?Y~#gt9~%7go~OGn7m<^V#R=1k%a~< z(boezBX>oIufp9(=6(w%|CE_ho+tNPD|R#-|-U@oC;&Hz!I0!3r@3N zb7G(*;Q<%7`d34{kZs?6N6+J~ZbOK(jHh~+o7N)8JJvMw_C9M;aJCyEo0fxw{6yD2 zubUVg*Q*@9=- z_$fn>Ac~G>GD7af+*U7B7qZM_@sDgaGLSl)Nd)g3M&mD7Ia|MW;4E52MV9rM;CI?vaMu= zz>4K8wqvt5aIxB^?_BwW@DmGo+3Fuz!;Dqo&<(If2^Fi4$U{^wHNs)Q zrP33?Y=A{lx^o{S)^hj)h4AUabto_842B?x@MI9GpKJ?LLG@AwAuB4F`mATmd@34D z`m%TlSpXC;TnpiXw`E0)IBkVL@RCy*^AQFUuUZ*seELsuo_M2Yuj~@qk81?)M;3U! zERj)}#0rq;kAIZT{Bn?99pj2sA+at56_iut)-YuV8J>L)5x`2*IbJ*>V|WP|bNF52 zeT=vgb|*DL(F7q2WVgV)U{1j5R9BZGvVG7b2eG{k++s;lSwosM$n@#JNdB* z(vCNm*tA0L3o%-$oR_N^OLip*MP_w_^@=cvzC7+gX#*vf>`}Hii1a&}x_bs&)?&L_ z)@5GA4`Bhx5k_u^CHsYNp;FP4qjj=p%(ABNdh#BAZuVF^KAL%QFFR{j>-Cd*BVPl| zMoSOc%hUbm+)-ukiA5SFO$krdWxPK|Vlm%$2WtL_RnFSE$9!TJR&FSJLaF{4A^3)4 zQJH=8#g^=UP!Z5hjr#yMS)iMqb{@L*k)g5 zLjN%V__@>tn3kA`7k=X9t^K;lpsE~o0vgN34d+vq$`N*nBaSE#5KsBpiIYIOG1MEE zwnX?C->Jk0X-c_sDsb5p5BxoUjRmp0 zGkX{aWZP7qB=W60gnrMnjJF2Z#r9eBL-?xa*T+muDAoKJc=B)_B!u ztbL8*60v>e8i7~zsCkJTp0_t0=E@HJz!9O34$}C*mWia#78Z6KttEnwdC5l8cZtMF zOSkL+sl2pMoXpi26DTdMK}*%Q^adA#QXNpdW4k3bwd8|y16k0XxxQl0kVJiVZa2)# zx0J>fZ6uK}i%IV0Zpeba!&@ny2g~-g+}36xk+rWoxczkb39ivjm;bMuKX)2(2pBfo z-N6Ea=M?!Lw>}@I&BpL*R;#!v(Rl@z zaPpeD?7qu3aE*|8&3B!~#iZM7=k}n-E{R2+t?rKR)(ULPh=zw^X}nK4=4ZjxUS(LR zgI-ZtFC$Q>C@LfkmKAV`x3dlCC5S9p?OslP{k35T$U~!+==ABUJZy}6@00k^*FsZD zvoQfm(>F*uiMw^-i0l@ezG_@`n(3*t5(t6VOVX&laquKzNxjSh>kIsX_5O zg^NzjaqFsa(`@JWgFrq+O6kjN^Xd5uFB*nu5|0NboFwo^yS%wTBwnN^U^GUmISKyQ z$SwfB%szE<(w}d8NNqbt>`~CK~Tef)Ez%S%~kM@xwp|TwgO4}?)u+W>G(_KzulcjkDfeC z$$!xQ?yTg$Qlu{F<)_yFN?2eOGvWjjB05BxuN1d}sDPtxb`>dP6)B`V9I#ViuOfxW zMqd~eSkSbJ6mrM#z`~cN1qddpld9YWf0+hY57-eyfOH3p=uxDw4W3inZQ#Dhn2Ox6 zf}IOY$s5$MS9%mlRulP`2lv5^#J^6dhvl^%*|SkL+`&Bi0w-o3b+a$hhqN46?6hr% z$(&ZwMZ(j2wofZ9$M^ErsfGd+3Le}MT2CA~Ev3w(PPLx)4+_rJu0%mUb`Z`(QmU)e z0i88+9Z<_u`rMZJU)sOPr(WSpe9GD=Ri~mpn<%)pkq{IZJHFe0KlmAL+#jww8tmRE zg7>0uB1dq0QJff9j6TuobYTLH+7rgvky~0Jw3_XT_ZL{Fz=h74G=fMQxTri3g}sHW zCnfpoU+`apTMXc3pc1*#?EoUK@WDk88HoXuNQP#xpxn(KR5v*B6^9q`<98IzYfg9X zy38Gy^uW>N+%j=gaq^uTt@|Bjs1s_!>+Q9egu?0Y`Z-ud8l2E_>WR|@l{FGO`00`r zPNbnifHrWYQnz2uY)%2gytZS%>~7j+>+z#U2%IijqDG)`k>Wp(!$;bLxh=ltYjYS1>bT zg((GpSS4q~K;zdK#f}V;!?EUvNO+;QB@yN|1;*BM|27hu#4L8jH={imI9Za8(@+i0e(#y3Nx+d3W3 z+zci*Ug}ym_JEJh;AtZKF0yGwI+pK<>Hrn2<#Qh(!adTZkDyP+lyIvyQ7c;qw?K9% z4&e@it0WO(AO%Q^_$Tk;ph0&gc!O|-pfc{-scRA#&G61@D=4az227e@p;9OoD|Q~2x*hPM&oxarb&D<-B$-ug@n2{!dx&pR-MwUCG_ z7APqpQlxB*ItclPyw2F33NdSg^?$RYcCBzl`ew@L!`9VY7rL_ak;^3+)$`dmJA1!8 zE&7Le^I-Z>MbSF)uQ^o33R-uVLX{jcm`Ze|)Ha>WVt%#tJg_1DxbqXkz{N8hzDwtJ zkpUJJM&g*lhSJ$sN*j7q($HgOkBJ2-7pH;E&AV^kfu^$j#%*s*hq*Y(WC&&0dS4*- zE_YYXyNOsd%U>S3$ns>|4pK?l#@!f=2R9515HA4x*6^Hdd_4pQmipT`r1KNx&%=GS zTdF&7iBRH9z*PV#0b7yiuBel+%ZAXR(94`T8l?%{rm=~W6m0?f-ktlQxi8Y+EtFE^ z0DmuMIDn&IJlPh9DLym{5O=Qf$D}mjkOFMu1d5{`2AT%TDJ$;9v*b3!-^9O{$V{#N zlkZSM;}@u=?YQ!~>eMG?Dh*;8(}PLAn{sZdccSZKSqeHgG~r;mM+-l zyGe71WRB2n4^4UJYLj|HgbJA=YIm^4L%;^P4hH!i3AlhNx)D8T6o&DB$^(6tZ8ATWT#i7cWPTw!Q7oN&khE zg~w;e3mToBSL){p%8jK{Rd;fLcHoMcNPJ!whD?kGU;b_GSOidPX3-?v4;ZY7=K>Ku%$AdaB^lev!_)nkTc5OAn@U`NKw*aGB7%CNelLl*>BL{ZRqt6889N=jbK z)#IetLa?=QZ;LT40}sYr{afw4+|nugoDI1^GiO@4-~{TrOu^+PLvJZ7ynJQXo9=8Z zvxc&JER19;gW0#oC-tgc!!t6m4dgR0m~oB89Bm~t5Fd$;alNIe_{oAZI>FY5QJ!YM ztQ_X)W##Cs8ms2xIfVXe_#r}xOaplCY&SN-fKgG(NNVw)MhC-AyE~35P}$!=D_US{ zSw9dTlIV5)hv=JLZvyRWT@0@AlYH3$P^7@#%mvyl8v?ES%4}dC!}Rl-cNSmBF1*)nY7-~bz%SU!e*UKaGtwLMqw}Nhz1=l7jWGh>?|)Vm2uPd3 zCwo-=WVVAWI0=>?r^WjMEltYq;NB^RwL4Ly5>C-!1Tht<{F^~bZD$D{ik!aDyhzys zKIQ@Feuf&|P%joXRIWr^o-Zl;q)&qbZ83GVt4wXR3II+|?Y%i$li?6fAPn};aNmPI zzA-?t6V|@vUMIR%B8%o`q_sn%YA+s}50^Odq2UUxr! zA}5wyowZR;Lh+oXq1?J^wy_q96vqkm8jdzcu*waa@BDp<<~5VFI+F&YAs=_T@2)Pe zcfxha>5=Ny&f(igJ}XgG20`dh$D+^-~~voq0~^Z^z}*RAAm5 zdfShpl}V{y@;Yd|JbMl8H(%m2rJ-^OfK9NSJb#K#G}nD65;2U)>Wt!GQ*VhYcvZlu zuM1TT3c$sui4@_y`qUgFh&iH z$8pvq&p`GZI$1L+<>6bL`fCS`*VXfS?cl6YJ+8bssxlQGKI&?tH&9(W(9jx7Vd{qP zDoPH|k1KJQp@Xj5k?zjw(*Y6h%<|I>ep=S=dUu@PqCARAow?JkSorV4!qaqdS5}^G zFU!(b=K0r+GXJj6z&u~L!zlw@ZE>+T)Ljkq>03d%amM#`^RA`(x1kNROvyCmx>r`g z)O1Y(ED_a479XO{* z`g*r78=U83lVwVl%H^C+UZZeVwhTVH$E)y7LJ@odE27&QVFcAE*U`$J7$7PZ!IO9C z$~{~Y+P8UbtfY^kVZ?AzGf-HaSHBWAGEKr}`+2Grs5}aFD-%RVrvYvlL4BxUMKNZv zwoygmC#$2wl*+SStA4;m$2N)RtpU#(p9avS(JH$W}9 z#XBEQK~;{Xi*uImy(l#ny0|M>C7bV>-Tr8-Q*?S}+60VaYaxUtwNx_tW zJda&TmL!D+{*6gbDNnwSWm$kdwS4_fG53V`#T$BT zg;PGe5;K=4X0CLUj=Ry&tK_bc*HZgGN?C!Gj&j5}lYt)DYxzDKJ+g-=XBz)?b(G2; zjiBXkprVv5)~h9R%B~`6IW6vwv*{%*L{c{LAyLg!N9p-$wrl7jw)nGA!4>pmp<(BG z@V?{w4uUnA4}%Cs*jBT$9Pgg1ImON%Dn-$Cq98tylg2XH5Fti}XAdU@n{?)W7F8}6 z1@Cynf}lpNtLCtY(0oIL@mmC-|Z1{ZdUZ{(gJSWdar%JR_= z1>nZ|HzFHt0Oxvvdob%gg7J`vqyGE zH(A|9UET41^#mi zgcb`+Hf#8sb}^z%u}b`bWYwWSy2ONj>1zy}iW#XWd$jk5|0M0@WzjI>(X`|rrfnz7 zQ{tU9s+rWx?b_$*oL$5sT4s`yvIVC)P_attxRBavQpn29!olHsFRge6UDZ_k-s(ORZ>$iCQI;!+~krbw-4wod~ciIm`=I6^(nk5w$Sn{qq!wwpfBmzv2bvf*G7(J3M ziSIg_yzbrX-@?OsI0EpjKe!mCGCUg?b%0*9(#05L?48IUm2$)x@C7&=+7MiD5Pi5B zTuXI=W#ws0y_^jD=o*MZsWt)-4y0!$li(8;zZ~>>gAW|04gdiRIsVa8`ORnNDAl}x ztE~)A2?g2V0lmzI%#XmN6YpM)u8;sVy3q5W;!@%xMtp1|L}V&R-!+b%YZ2%JKQz=;UQo zIer^`S35q`Ija8cv|c?si%#lM?e*zVt%~QhgTnCH%FCvbo!=#dU93; z7>8;=Jw7?E9lxxjyXtFrt2~I%KRS)XcO^P|RXIA6PAhLPmbyTCaB}*#Uioc4-w9voF_uQ#K^%InIv02Z*E0RFlZbAU<DG;u_V6%wtwQu4+@92N{H)E)*dq z-vAT%s%R7t4y%i#qLB?K86Vc3kP$XXM$zPpd0vX+cK?zxGZ+bzk}jF^bn zu-YCYQSDIj14yuv+V;ytYY+F(n$&D`+i`1W9nJPk3{FOXz6}mL1b5~H^qSa#ZRd^# z;F+>*3538twg5zurDMK?lErZ7QKXxpujOtIgJ-yEnGs6QB3$AwgCS_dMu(kV)cnxA z6<`b#QGarM0YuM&Jxg8hCos;1ZOy48mB)9s1{G1F=AF4lIv$@lrcLdu#1I!ad=c2c zU^ZcH3$l{Dt{gNfhllmXQT4b{J8ryqdtN>JNvnlx7!|{xzJOoKTEPGGv|`h4Q|kl6 zx7#4#5vb)B)ABHK!v{564ZTc~Q$RwAg3w0YYoiYNYa?{GPy}92ejZ}amH=^B(gENA z&$hMSNVR1}(9eDY8+^YrW?rq!?k~PCkB&rN{^`_mu2m13;wBE}P=D#;t9nd`Cxlx! z1|rV4y?@~9w0>aL*x9-n3=l$LcV}no-CzJ-qv_a#3Z2nlGHi85s3sLq^qT~45Ke>X zkxM1gILcjjdyoPbP?qDTTay;a%VqR!yo7)k&-EZWL)sV&e9&{xus znxk{IGMEt&b%T~l8iHEj2AloNKtb}STzI**_9d&v{w-i9b(HIWFDJkL+E60ubsw}A zzzWs9#roeTJNtXk4JY)!__epv|1N;)xvMNg|I34Uib|;SxQud0Aodft_umwMgbUC%3O%2+A-*U=c3)(2P56OWMQ_g(r~yVt!)K4ZQn zK8dRq>UrTApVZ<8I;7-_P)n3~<24`2H@S-6SnqoS0Uly-dvbk)dgUtNxRz;)C*y8U zwAR5eMG}z;ZUtd`S)yGI~5F!D=C#_b`i22jcN=QN*FZ zKu6mFGm@oN+?7&g>l%9Tyh3cTAtWFN!NPI^w+9NR^%+a{9x~72jDF+HN&2q>*c<+ z61PxXv_TDls94}%(ApF~gXliKzyI;4duwrA&2+`sVbwR#r%{K>w*+rcqD`5fe4QSg zSjJbeVn}QX7n94&&hW>*okxFx@j#m71tI}z_owKOe{=xi`?F`!pZ?dM!h|T6<}nR$ z^jCU0^pTeHdGuGOK6oB&iM?n9n;ww@LzePGwLh^!JWh_x8qa?kcCn?70%!qWkkpWh z6UIK)$J&<|7mJz-K!l;({nF|V#)}Tsb{OZFcYd5}STU69G^VI_R}wH|xZc03&u%0l z2!6}-QB@>UcX6wKp(#Rf*9)fu+3r{%5BIhH4O~CqEi)KCRfC^|1dPxfq65O&A^N$` zu;2iDGm2X!><&uR!Z|R5$q#!|+5x};JvVxTX4@!bGg3+d&_YCP-?z2*Q`ipXFyj>vLpcozIKM@m-l!9}FB)|v&}URj*A(#+ z!kj0kJ2|n0$)32VY}k74Bg{7TB!Xib6L%zN#ocZr+(9N>vB|BEOm$`kkyAGY)35hA zc!Zy+nU{PF0wLE_81Vv^vBxiB;D|9pee$W{ktI?~MhSG@HIrR30h=d@X}9XPu4XH%CWs_lvy;TE9J8?N)|>v`8!WbBk3HtDAw+h#B}@5&uKb6pCd#f^nXj-Of=zIiy`zyoI-NAk=z z9L``tW?CaJcgeKh`QWW$aOK3#(1*t;okTC25M| z<&y!Y)&YD0T#7k5(NyZE+i>*rR(?4y{Ms1~JhcRYO1GYeS^>i%-6l$Fcx{1AAS|jQ z=Xqpk_5KfL0gY#1>p9N>5)KJ=dTm;q{Ywftc^}ic_c*T+A94wO=qINqHJPK0 zu#mtLZzeV(FlA4BF|-b8woI5A52xr*638-WIU(MG!At#^-;{CraDKs^!=Jhh;EA73 zE#QA@fiHTqP)sLT`d@3O?;qjdf}A-9R6rmiTWXnR{q zBbERby5S`&z+@2-FXMJKi_~>vPs8z zeFO{67{GF56Oym43A&Q=%E@%mVl&F4YN4sp1_F{xQ;~qM5mab2Q@%@yU$6JbeZ6xTHgD@(F!k{S(pg;#%4b{lmB% zMZ(Kj0|#%cR76?WhIusx*?$)27!M8ctXf&=2S8XS7e-RFS*AP%rP1h z`KW@8jBtw{yp+fb1P?+JVqvE89xrTqf9nD_*vy@DfYa6cW^Yoe6%cH0Mf;DWDm`YW zR&l7Gu}Tu#wyZhUC5uzPt1!j!toG=SwMPpx0=W>&%9yxCm!9SQtqUiZ$(~$V!|%zc z;klnMzocwT28ok3E@X`dlb#w9_I}!oR9m&X69|vwpHlpJRDXFOcge8)8>hJA$Z*<$ zD8rF~Nub@Fg0VE3k(c9o%D4HOABQX}uUO*?V|NJy0((vv4&w5q3pOcT=OG4xE0%y5 z+vpZUPf+_#Nb>D0f~rS}gGe5#m^G-JhIaQKKYW~~npj^XuOSOSc(k3M`HT0|SE@*v zllU-h;4av)R_4GBwjNBV>A3un?QsHATF5Onx7r?OF*PHhv$Z)O#7>t7;eG-_EtG_C ze_;sO+8hv;9Te=^S||pUYAwMAa&(DaE>qQ}|Cv+Nh~SwKRZba9fi{FMIj=E(eT^@8 zEsXeM>MXG@Jc8HHKkjgHuqI+j$0YPXQKQrhlb=4meNWRVx$OZjr5gw5`!uu&2A zwD9gPDXQub8py32Q9RF-<&Y4GdPlFi6iCJ&RW=U>u*F-U(SJwn;h@OOMvl3lo-(En zHd4B=!Y~#H2Va8le6zYbt!S>ag^ zTV?C|W@8;|4IVUJ!iJyLPDu6f;I^LIML05Rzg`1ru==;!**St;@M^hSFGs|XSZWrk zE7r$_jXR!{uh-+e=IlkT4tJ3WJZSQbX+nvPEV(!g31l_P!op$w6|Ms@KPvZ(zCa=uC!+*lv*E_c8fj)iI zcE&KSgoFg<)TVyzuIyLJHA5wY2-!*5G|worvR}Dt4J-Qr?A1?@{Crdgs64NWdG@W;Jg2rTC72wY(=s-Se8!$(!P6PAvHrWTVQVAi1I8vl5i>Rb zJ|auDE;5YSUOfLjtRHizD&ooEx=OIN^g(mQq(6e?{WE9MM#fOglUD}}ILFt}lO0Om ziC_C(@8~OcH?D0^q&?$45(l^LoLHY0r9E=z=jP_PH*2V$oV&kz;)t2Wr{m;_D=$KS z>^qjNvs`M%_&{Ff5>>Y0C?#OK$G-~~_kDYZUl$F3+SQMEnpQl0vkYd|-^t-TZ>37!ab}{N#Z2HS%)1N@%t^iLqwP34bTXj%M`te(U+R;w-HMik%Ob-%Ihls;v*U~wWcGmKGUh;1>c>$ zJw7=-L(XYeP=X8>)!De`Y8_V34(hej^V-R=t5@&5LmF_TJQqh1_9T5W{I!d+KhijN z^do`#()zn>wz@s!ij%C!Y^!#BirmY{GY#O+kqp|k-yiflu5;vOo>rt@J%3X_j=rxP zy)g{92H5ZRnv61wlSnhI1u@mLW#WZhKWHFP5$^vCTPg>-Je~KWgJB2C1VjY4YzIs- zU}z8qsksh^Eo{KlKTJzhi_wHrO9AEgfv=pzNZAB<1FpcEeb(u}&;P9WqfFa4DMeQY#+q=A36acBrJO;DCpcZsQJk5o}zg-j--++UMC@r54UQNw~ zg)hjU7X`)Y&x#q|vMK^ZE;-%-5UC#nk|ML|NaDK5g-sSz9^txG>L<@F~v!x%+7M;eIOr=N_`rtnz=(iROihFC+iw7Cw~ib0~#*K!*e5 zaqA<~HC)j(Wtki-D91sPh6_48(ZzYh9SSOwcN1h!+1uIO*^FKcq8FXv@YcOMz%A4v zJcGv3M(dswi7sxVgYKv`h|X?tYPlY5MzwzH0pY3idXW?!!Pg3>wD+C1oK3I|tP+Is zJ})vt43MUoe>=l>IKSRZE_&V3m1IDIcl^a*#j0JsL0%XEKLqzeBb>-tP93&zr-WCLU_>xSeEz(I|Kkco-)$P0Gp1 z1u4nA@zDX2Z*mig2Ax@M&`}Hdd|FqHn`T=QQ^uJ#Z5u*7>15OPB9V{?MR-TX5L&I* zPwI`c^EyKy9aWFNJ%1HN8_~nP=pIU~Q7?2qIuztP{aAC{jGzM)zU8*JCOAu*I4-d>)l3^eiw0)qS_&Iyja#c z;dE3=Mz!si1c8Sj@5U$E6Q&N7$7qf8g%(Es4wx^>eH*Gx%QNVoL+3%wXxK=v+yB|P zwC4GlV0Or2Wn(uNC!2swq;CU8{sO_>erwoaVpE`1QfhRXtt-(1$>{7bifwB&YQF1$ z|MP>iYr|%LgdKZe#A?+8xh7(HSzxPDauB z(f62nNEo=hh~!9}p^yS6rfD-vp-!M;Pt3VHhSbMTW{Q|=XEH(vleSHJ>#8{vdTMZi zA~y%vN%w{n`=dn-1_a7)&)=R_8?P&WbL`;HyFXbpO{XOW;mIU+al5kJ22>+}dDpE?K2WP(`cNp0)w!z#kqn#v`$}(l9;s3ezHBviuFLPc`+BXd?!a;iim#X7d z_%7tbP;yHNK2sNS>Z>dsQ1EsimxXwJkpDUc#a)CWgw-Ls9=(%F+D5j(K1*o3T0|Q{ z3rO&YZdjk~HSp7|#T1y~&s<1Dz|n+s5LQAj`g1%6`{=YAkYur~p)E1dgw?euz)ctR zco!#V#Vxg6Tz%u~fxB<%d1G9FwsCYR<*q;zSA(8$-DK&jPIEZEfRzDQ#lnVDs1CNM zlxujLYBWiU(944JLh4m|jH%7Sg!R%niew9+ls)QFK<6i1N6Zlz2l@#@2RaO-@E#U* zFt|zPu#$}h!Fb}vLW+zV^G|KMJ(6roz`*_7BhEpEYkFdjUedvO%*I(MzX`>R4XW3vuII;>xlN(8u-flRx zY>EKnR$^oLi?A7z8!*4Kbu$=1pN8u%Tki&gHb~GnF3E~{lM!wobJp=nPw9>QL|f?M zo1Er-QR!r+qT@A}Q2 z5t*(^PwiH`p`}tR)4ydyjV{ze*)6*gT_OV`Nfp~0dF6+}@Ml8uzB%kRFM1uM?Byrq zg7GGxavm2Vq-01IlRozqd_07*2x8_wwWt^BQYEF;7+q9xfV+&Tb1^Q0jM^jYrAQwM z8Wee1G#wN(9=Jh7FF~4M?Ke>6fQ4+TE(C%TP7_$#sK-VhM3D+|R;xd`z5s#}eS!5U z+9*XLqgl^4=4&DJZWDev17Pvmw;5?;6pkR>H<66_1NbTgL#y^qM5bnR)r1~sXplR3 z+s+P&!y7iG`-X%D2jF;2jILmQaZJ79nfVG7*2C$HADdiy5k&VdN7oH~>)PRAbbJj* zGi7OR(ytLtU4c%$4`#ctOgzn6MBs?w{Xs=scpG%E&9waq2e`gz4k1x&Mo0jw=g2<3 zK-*^M)AtdR*8=CH6In*6i4Cle>J&)qlqMu^H4QWBL8Yf1%w7wUENTopFw}6*Q#G7b z(nUj#*BU^eZ;hei9r;Oa%7^o2?!MMc-&nNPE;R1PJ2i5Ge?|qZ^Unf)BcyB6lg!GD*fNh z{-im)g{f}mKc`yrcK&k|oF1Hi)y^J7@$U6(I}uu+yO&L(LCO zUD(W;{aftoG)=Mk;9}ea--ZC##Ey1zt41x#IL@jil4&4lwFj*Ub(Es$WDA!_+dV>> zD(t-LX4+c6CtbBWkZf@@ua*k0hZpdQ`ibRMnz&d19Vn{5N zkb)-{kX`!YE~bPhRNy>g!Gs*6aJ;HUXD2Vuf2h=}5nO9e>nGpW4y%XJdgTni;g9k| z?fezoSR<6ESB}r$Mkg<$%JJLiyV~)gOilG~r*-5|h)(KJ?e*zVt$GLx_3^>cn?slw zq8F%od~zNg)n3=m(eC+4L{pS&tyUGMSv2_?iOyc3{mP5lQSJQgX7sXle#~ZHqTLFe zY;$aQ#KZB)aqaje%^B6#$dpED{1^|T>i75+oxQ3Y9Z8RsHyB4NdSdz!LR2yhI%E|e1(idLLT|)K(a=6i8GK3=m@$EpyYX=D5L#Gde zs&eU@fhcn$f`Q3#vlr>?83YCX@yLm|m1yi@LZcFRm9~lMu2+uU#)UdoK+kCgFA5pF zn-S8QViKX*P#j=c<@@Lh461i+OK1Ei#}z+1bwIg3C9I^-iQDW#q>OOn!_Iqs%3r1pZ#g>J`t&Q!9J0BFs!NC z05$L_(t+?Ip1`ws0Z*`nT0k}dQwSOfm;xq|1o{87_b%{N6<6E%AtV?fl2p;6qDDcA ziW(3Q6*XKAqJkcgC{`2@h?^9FVuDyf4+NBB#A53O@2F_0x1yqAy+x%26b9@ArNGpMhl0nl-a#&6>5=T=vXtAs_S)Gc%lqv1PUF z6!4l~y|UUh#u`E2P&&)(bb_Cvd$86C(=x^qv<-2qqGcX~=U;%%8m2;PX~|UtE0pd5 zf(5kZ2Ed^hyzy|BQ|tU#6T?SK2X<&49^+udxDLzy&Ug;P%nmw@K)VN>Mv%RfhQA{0 zHT+uatlKyx8g?5V#qIlzma}fxakQLuyPl)vtlM=REoa@X?`S#e_i-M`vP)DEoJn64&_&xBdEDB;;{R1j+Db>V9W5>Fm`R$uKvlsKep=SmIm3sW?FH{MKfmL6$SV97;ngW2g&Rb z6`nkWZ_qdwgg=qV8Wx-;7W(QN)NL?AUjCQ;EOxzdOQIB=!L1gK8C?>EU%woSg;rF< z2am*p#gW)Br%}kA>T(0(O%?3-*XF`r!hspI8>Obh4(TqPFq|zEiPt`g{?i6RY3Pr) zmxgM-y)@MJ?WLj8Z!ZmXU(=ww0ka<0b`Hqau=O^dyh~3Ml1{63gR|jy5j!O?gV7fC zMj=#4{ItP#Qb>i(#~W4h^qEj3)zqJsmp~*}+t)y(QiWK93XWrBA%Ug;4;dJ0L*4SK znm!mJ%C5N}sqMRh3mxRIr4dmZE!E6MVXxRc%q=M*Z{KFi{dnNEW4I};nqs?NT{9jk zgg{zo(Uc*UN2X9_F@cd(`k<>-+xG~`2<*hLt-~Mm?CBX)sHx6ZKalDgT1>7kA(R|Z zEhbm*5K4}y7L%)^2qi~Ui^|DMELzYj?Zw*eC-B}ZG}QrnOd&BIZuk!|y2PAg^?hxTwgu|y!$GZ@rVmAE$?`)pg{{9cyCO>Q9 zTQs15q^NHnfIsa2*a=bZaF*^J zyXz6Kv$5@eG+ViF=#1&uvQ{`8yBRQa?OxdN>{CaL=LJ+eO@RwYL=`%A92Ol?a?1GO zBM0N9Dt|aF=-53ywx|fF>k4IGBbUKP4L+k}@JO7n!y9WJ+?g_+du_2ngGg*=n1#f0 z@MroI-L1$|V6zGj!FYLA`5}ckQpSYX$y$M3i8GiQTl2YyAqm1roc0bC2lh@qd+3?x zL`R=z7$9rr%_(;>$~rxF1oKpooI&a+r+|^H5UvgTSrwmNc9yY;w z2BwG9#-J6r!5ABD%=s0(=tN#{&1Ri3o#zv|eKd4{LN}&T=vvS6i9f@rnqt=j7ME(R znGB`#_>}H(MS3|-aa2bUzn+7QLWPDz2amy^Q#iS6tcrAdA7&7!<6 zE3jL1{CG~WMh_l#>X~v6ZSaPdOgQh@k=%Z3&J*G8S#v*eU_oKLPHuv$6DfJ*s1g^Z z@DAjMb31M7GyngTX#3+o8T(D1a#6*_M@`zfnzugw>(jUYfYkM$qW;Gg{V@L9Ice`$ zu3a_$3u*}mf1)sjrPC%}Y{z_ZIG&SDdQki?Y-#i-gO;J*{cXMEqQ9bny?5riKbFJa z?{PLr@_)a>K|*3DPX|ffAI5-O{rTaxzt#>4iK6W6Ng*Bj{4fR_{l7N`gjiL-7AD66MT;(_fYs5#?#MUs$T%&x?qOGHi5+4p2!SffUeQLV`dmX zDfj4U$ImoQ|NgnVi0n)zd1RP?U z`j@N!9%E?OSa|o1^bHWcc+ub_2&65#rLH63|1|h)>*8}88*n&WNdflV#sLwugRCK(&#<#v? zM{@V_vlq_AiEmj=GvsiEF1j@Q9^KJv?!u0l84DOgK2mwz|)0*QF!E9(%VqC4YL@YVaOxyGJ{qdomZXU z&@!kErUe3;kSeb>j2*&RFhrKu-MUK!S0Cv96?>gm`cR=QBZVE+64R(HjHI^$|NVVA8A27FjbMcQ)WLxCR$XD7A4rSZ$T;MC(XG8 z>#OsS4BE3}3$*{ksoCSTe*agXPuz*UA7sDv_5Y&2#|}6)b^m9-WBUBC{{KJR^g@1D ztpD?MC@nKpQ~dV;+@gsKCCg`UUnPbz*lHPk6L99F@)^8l^oLLWm|Ig)uLzUz(+@8J zes~G6z1zY>QGR#{@I9{$``>#BU|eTlFNpo*k4{neRpQ`okjz+bKS=5n3Vv6<5Un3W z&a}a!js3rD?c3S@sI~sTPyYeO;^0S0|6g>>u|J&u*jaJ!P`<08BZs$Z*Urn66=@$K z^l(*nZa+M4T--r$_#9(ow@9x@kI2Ch#t_#pjx_k)f-rw`@SBa__W11rB3j*+67@p(0Q{22gYnxPzlY;@5Bwg5 zU;cE{hxa!Zp&s}>(8NGQkwfsi8-5SNFM0YAes|=DZO5JN(iV8Ke)cCH0W^jD>}j5S zsD@}nS3LH{@Ba8@oAbxYjp0K6!Owp9-B&`9NKZUFoA5q(b~53gm}l@|RdpuXmpsff z$T@ft-XHP&VciKIVc?$|SX(Xg&k(@R zgC_ms3Px=Gs|{?+JKW|s>CZIq-;s{=t}yV21|Dc&>Id;xo48H9x28BXqQH? zvWmqbobHO?_3^A3vm*S8!;DFiiI=^RRyh`#Bl_7uq@PAIrKQsPO-ebOZ}^$8{&@B->MVN*VXk>xXfhFYP@NILam ze&+_f8YZSiF2Pq_r;yYvpV=DWzJNvh_~d^ zBjd5TR=63@V`)fAF&dd(f}5WsydgSr%E(iP3?1M1s6JkZEt8e;U;B))!L;cq*t^;k zY;O8j#?X(`NATxIQ>Vi1w~xf3Jd7(4I4g3kQKrr4^E#j-pif2|ElXw>0DDP)gb%F1b-)O59-+CaVRe#Fl3XP)TfiwKyjvW zB)L@JY{Er^;{vl~oPmUA3d|OAiV05;m@VauARH5zE#|}s7YodmbH)-b5|}OMOdwn+ za3Nty3(S^xmJwbh zFg3tgPI$S%#e`Q9UMlb~!m9|!1*T>=YY5L2m>S|#6P_S2HN{y^I3_SP#@R@?SYT?7 zvx#t#z||FOnFxaqkDRlR2Rv>cz{8x6{J1a7}s>!6>gP+SJ@{k;@uI_Un-A9tDP(2how*zrXs5 zWRTV9$%Faqen?Nf*@W}i{*+2^cMC88^Nkr=_ z=hc^%m-Fvco$z;Z`GLvjgo}D7f8jz6&CXw#Kqz@1{w#?$HfJiKvM#%YG4q8`ot8E|q~hcZPaNw{T7xuDWqk?Z!>8rPoZzQa&mURlH)OA2+l&RWW4 zf70AXX)5|SL1%-2a|n>l{psV~555tOGzrr~M2ToaErf~MB&iBj(LBUdMH`G@bKR#F z(1}6H=bk;kZYJC_G)bDVvN|9CUvjfw+LC?P+L}eZ>YJNUpGeK3-d?E3XBxNUre&Wt zH?N5U4GG1{BBR~ELcbs$D#9myb8_9cj%ybI?9M4|7jd8IjX&35FoZgmMI1`bz4s)5 zNYLr$aIH--T8zrY+|F8$8Ua6mNl^tXwyd+;`D(WjB-2xh|GG%XRNce~lvr97Zvg$$ z#DZ!(g3;SF`sHABRXh)cB^Im=MuNm3#DWC5-l(da*>L=V$w z`tl&{;TrvBO7sYgek&#VG>zsQ$0Je|9|5&U49TlnL}Anv=K>3l&`=Zag}%Q409E@^ z3iXQrS``4k(v8R5P4h&X09M84f=+Q_5lw}y+=a^1wUMgzgys`#d!`T+mpo51YWm`# z#QMadr3fY(6N|2+WdRwCF za#c?9VfB~JG8X)$a8#f)64AQS{HH|DrHMs7;jos--_n-~bAh;NUr;bHyTd)!RYtN( zE1ze&=8B%QiHbUB9jV@}RK?BIxi9nsvug{I)o2bxscz)tL1Hm?0@f6O^P>wTdZk9+ zBi+Q7Y;=wXKnoi|w0c?%`KBz(!ut=!UX@uFMM-lzs25WJXaFr!+h{Px6TLwfbjBM`CrfK4oD!!~KUfR@-6qL!q$&^4%R)dlp$$dW_t zr#H&Ek<~+>c@?v{Pkkxvo~We$Ai8o51Ch(62l$HR_R|!=RmF+(wUbal<-8QeY-(~u zTgir>*YeD~={!F}tr8`V(56*8>&MTj1 zROG4wmhz$_*f~IX_hYJZlL~r4sgN`nH3lqTg|KsYi3`O zR-t;k`+{ELW$CK2oBMMT>umOYh5P6iB4M{%tR<#|$9Yz^n0BlR%yl%*Qv&oy|cAjHK zjIa{F$fJXjIYcDGY~wYXCyp~cGS`(xbl|xiGGj@mYYLfMLnfLox6zZV+(cfKR&zz8 z`@jnlUAvcf_a3CI^p5G4=wfye-4=86E$?-e^XeiMKZeKzp+dV(3DjQhGqjS6Hm5tLa0%6sYG!WMKrQBtSGib-r=L+p1#YzwK> zM7Q!G#JZ#r>jGlsme`g=$yOycfy6dweDWe8wn>R?_K0;&Bi0qfeqxDjN|bC?Vpoya zRfZVW6u}bb;dpR@t(6wFiB9w0J86PG5U>y*UbN#b5Zf^QpZ zqN_bddXdI{K^nb4Bik~vx~in{+UQq{7oZc2NO;@g1@O}v{&MkxGKNPrRz=;alDfqF zX#f*9@YS_MZmBBSnwURVBI7o4Q&q|4#QbuJ#P~~7ZmcSKD={DQMr2=XBiC1zY)H(% zP9m2wvZS%JD!L9!Ez1Vo;+ibCGR0o~>I`kJCnk&{fSG?6+v9Y;g zb92R}=8CP&6%-E8G=8l1j5ji>D>7O?JTQQeVad?((ifN^2!_BnUZ|ae_?{P7@}q`Q z6qMYGar9l7`sS6jbN@Tm_`iCSA9HK>Pa{pF4wcw{>*%K59k1(-nDEIcN{ZObB2G6& zybpx}=_(|sE{wUmqeS#IHl|0+eT50QmQuH_c*10POw`9TK5B|5bDuy>v7?%ah?$Z1 zzRam9F83nlXvAC_5ns#@6UDD%2tTA0k256E3mL)>qS5P2-<*RgN!!=E*_D<4qWpaig@)T-M?!gfFJ0FU65EgBE&4)#se(%F`nEpW@UQYNn z9~N!9R^jAiI6a?}@E{mtv$w~kD%V*i;}JHabZpaLdP}04u$Y2rCOS5B?~NZAj-gGP zuv#$!3sW)ovI(C0Y7CKX=ZRh{Kq&Po0WIGYbNv(WKR|ih8s^twLhf6~iJ-2qt1eFb@f(Scr)W*@TG;8IHzf zvI&F9U_^rP4dzMK+eoC7b+CEO60MdaqBF)53NxoMp|_oY3Dsp+!ivggSI*0$EltN7 z1~jI$3ajW@He8%lni%3k*?_V=Tn9iMJSZ1Xt_O7l)X{_T0Ofg5XF#2I*pCmS5>0sD z=&`Z9m=BBP75lJQR*}NV%~mNh`|&Hz^Hsi)D!*Z@M5ua;AOGk*DLMHos_!G`1pIg( zJJb*Q@!d{Qjr5(h=f`gunu^ME#E(~+B90bj)rk+2cW_uK1qfYj=YjtxJvg|DuX&h` zwR~Uk_DdPYPfh$r4Mb{x>><9xYd#+#(aTJ#n)n?iP8A%)sEtnbWM> zG-o2Zta9G6$+J7Ii@rX2UG%ldwcV?t%N9ppm%p!RZC;_ocQ-{{XZul^P8}7b%jwjR zFkMVHUzMpEXuhh{wvgJh@2YH00=1fGHB=3cwR}kHWu9H_qnQ%X>O{#}B_>m~>4w;U z;1p`2SYYAfIeo0shd+^!xz?Z{+nj4XyIJ@#ljguog~+=sa#f;awU(RR1C`jO@yW}j z+?86A*nCZNxk4-WkSfWvEL1M1WkW6Lm5GvvgG>?G(;}BAN>*sO2eI5MO}X5Gi)q$f zrUaR*g{E1Yt39TPG0nP5Nt{R$Cm0e~p;h)|jwZu_vBd9h@Su&^%!X^DuP+`lQ39_m z9x_1!uPz=kt!mVUs%Ujp$=bx=$%(TZ0oPQOJeL?eCvnzX0asO(tWFG`nK-Llz?D@c z4=3iwK{j#2LJ}v1A(HES}#>z z*p%HkMb1-1F5M)^Mb#BW=*ZR;_iHC48!*;J2R$(6a;7A8v2&abGbN&ST#(l9No!at zEoINA)hm_O@3D;>#Py9$HEG0@S#N$*j^!{J&2_{qr>Z2cYR`n7F^>=ir0KRZ$EhRb zZOR>0ROUDz`LHO_Uwv4VXq^ww?TP$P`LJ|i4=9|ZQ}j6rD-k-e|6r#!t0>kg1FuU= z#vGebl*sF|M2RqK8EchDW;jrq8-nU6GnDRz(zBk@%(heNwUzVM29>7qZ>j`b@bJ2^ zwQipir2*iiE9X_4^rAHDO?phIw06>gcub=6SQ1^29U7|0LUBDcyY8$&b=OdCR~kzD zSW41ebPKvqF2+5r$reXHQ&DYU-XSLMJDF7X?YFJ!o(i|Nu6R&8?NqBPtBYf9t-Sh! z?AAk-5f#Ix6OF1WslGP)+2SE5g6rmr>gI~IZr@8(4=d7idS+@Nrsvi|u1+uH(iRJO zV_K@RPx`CWz&J%;pYs=fWGkF41HAl2Z_{+3y174rSdP$qo+|I}!=lQaeE2b@|3)jp z^sf=F^zB!iRPIr*QJX?4ap* z%9U;2kv)ZV6LmdYG2-}7BLcQ`u%Yx8Ms27b+-A9%IrD9BL!^SMMb1-XV%u9HY*AHu z%m%mL@zNk65BoBX{JQfUpJSL-HnFWDMF0h6Nqj0h-F?k|LjfSAQAP~&1Dh(6hrK5xQ#Zi zo8N1R`RnGg2>-RlC%Mt5&FkhRmYBb8E{pJw7-Dpd8Aii0HajTj-nf3AYl-=zVOfNq zV2JGnVi+A_geQWR1@zG9kPGOq{8?m$(cuf)hB7)lz>wI;Rx7C&--gj20-wt04}n@4 z{nb}Rw{Yp)jQ#-1qPZFU0hHx(Gx`Il3*~W;wWB{oR&)Fq8vWH{^!I{}{@_pRX<6@I zES3c!V8#3e7~5KLw3*kA}c88rc@L7{>JNED>c2z!;)l_tK@0A+9l0?*!EhueYV4LcIj-_x;y} z74v#qgfBho@k*@r>`X0lfI$wZ8U_FC@{Or@c)xwlzR0u>4h!%drSlvG_@Ne--azRt zb~DpIsp-82y5EPTfo=-Gy^(%V3S8mC(qK~*PTtjegRR2O_HcvsHW{&R#n{qSgIZ{? zcD78kx-WvLi%+D&ax0~ottHgX$fPJAYo^-KzM=$1b-ud%_`(!*Swqsl z)!e?iY-a4QHP%-byh4k9r|zD^r*y|6S~JcPGg>p!hec}!`LJkBZyy$|>E^?tHF*jr z^$=X<AMvFZ3pwZ zOR)b3-1;i-HS$Thoy6a6qsWfUUZ?t zEth#{YK~bY+sW}oKS_XX`4B(L_{W){9KJgUtlC0HX{UB)ifoTBV+D&}F>Pd)?u!(z zJtt^BSTJ%gQv?ns;N)ziJQsi4VUNp!sp-ztboVXCF$7(AUd(bfy)5NeK?v))?q78r zZ(>KldYm;#ElZy_dz=Yabc(2{%Y*&yS+AqYI9ynbLY(3k@n<~?`E0PHNkrEY8F|nm z|3u`QA!Mh37FqYJ0eUgffA!JT9{PwofxeCCr+swfQJeckq8}xCnU5~^(4E!+{UXtq`{>B; zZ0>PH|B2|I`slcq`!1s2C;9{*UG1Sa68#m?-F$ShM?8xa>sSQzx7r&@dlM~cbju2$ z4qPwgF`e>qG^wGs0`l1JcK85JzK05B9kNX|a0R1V^D}8j_Lw{Bcbfgc^2_IeUp$~io=sk%p3!uFw8F??z zJ%~QtLz{D0-2Ai`Uze5dQ8fxL%lJ~VQ&s}^5b%^1v3m0oAMJ`#(4%70Ma+x7qdPk&wH+ZHsPqk z$!BB?pKA_?w!;BY9#flxB(=LCa0LQ95post{K(R<$+I+hqfOqZ$s3&|O#c3Jb_5VO zehTUhHhF_4Z*Xp9@+VT0^G*jOueZtTHF>@BAd@dlOumBmOTrCNI|HTW#{KntZGCcP9Vp*_5ir7Yg+)Hu)A!zQsv0`TB73LnCMe zrN7x`*sK{gJO5>dTWp3rM_TV1g-z>I70qk*;6A30?Fi2F{5i?D5yKH=USH50>eHM= z_!u9aM!35VFC)B{4{s#g-iLFK0sO`9Jq;@+{DBY03ID~1R}p^2hh4%?_;A;Lfba9+ zV#2@nVUaXM`ENdFS!5vUYmOL%$}8O@0n}`&oXWSw2`3 z%95p7+LV~BJK5xGT)FB~HB0T4e$^h)^fSEl@}y=N6wX4^(Jbeh zETQ9M&m)t2p4NS5tz{Ew?5#9tJz_0Jo`n1L2mVWCi|_=(ANuf(gx~hz4TS&T!(uH@ z`f&CD;P3b0euQuG;c0{y`S2ZtD|~o8;VC{W)>5Kyl2;1)GBwuXJ{f9hV=X=Of{5g% zkUkk}c`}^ESj&GJRXOetWii&WAe_bM@e3x)tWXwXEoX+a7)7r#Suo}b)Wuj!H!n-j zTE=RYfVB)aM7|E`v9XrFtquvqSj%1}i@!lMU@a@cS&X%8`AP+HW2h8kEkF0N1g+%} z%~Fdq7UI=m7sgr!d+AfGz=f2**i4be%jRm!wW!nB>p6Bsu} zI9u!e2F7j+nC6$qm|`Zp&_%&e(qEwtFwvuA9+F)rs@K{ z>8Gq6j$>S|bxu_BstfGYs$9cB9fna@$6)7&PEW9xyuX_(cIFSIHNk^3J#1iu$mRWS6d_Io~?;W6P0fw1;)1b z@an(Bf=z(#nJmH03_23r!r(LsZbgusck>EFz}(~U!sAkXu5aMFfy=Qdkmn2~t2Zek zFiyqoF_xd0T-T-*8_U!eYibq5wFE$CDKVogCbtZ?*VtmOc`R5g57*^6zhm<6RtbWH zvfRPQTXjK`*QCf_6YqhICumb#DJJd94Qr`V#~myY=S7fnHj?IRT9|3#AC+aHiEmc6 z5|zAK2XrgfFc7(1Zc*Y=tLCp~{%bYAR_+l1spVl!&!q2m9Mb>PPmfs$E@1@6F_hX) z>d$iAzezOVCRE{mv6dJGU?CvK@n}bAc9yEa|GV+^SAjO|;8Y zN9s_i{94r+n64@;Kjw`0q%)S)9OP9KHZz_8=W4k*xs;M~J(8e#K7Q1zcNY(d%ajiD zMRTKw#uMQ^q+RW0^V41D#g(;lKVv2c`~{|dT!kCZFgbDqr@{MQJxS-~xU7f!g-MP> zI5lxb(MWNe54R}9Uj_)eG51O>4U+yhqPWEq$*bb)0pLhxeK3w!VIl7GVB7|cYY4{i zl?u{r3&wGG4B{GtalHNtanirqa^KQ8z5?)g`K!i#hX+OR2}SW6D{IwG3l9<09fdDT!41j9mNHRS-sl?m{sRgz; zRmVi9i?d?Ra9~uho5}5bNm8iy4DxcOfNvIe>^0kcX$^TpTN?5bmRE3sZO9*~U~NO5 z(PBg5_Mz=GWa)z`4f!D>QW|o;BuZ(>riYlbARs(x$SRLjX~bS3(Uby3&7hcGH$``d_i!cHJ-WrSPzK9x(A8X{Mo zPZMo`m6F&rj~GWl6?nx0pAGw$3%$-D#V$oNE^oVh_x-Jw8r{MocZGbXqjPnJc=BCis$~jDmG604{;rX4 zo<}T$d_Q|&SIJk0{5V{ZlYC5EO#y=sh+{BACfku8uC-^+oYs+7L*QaUAO1!-`+ue* z&(-1m3K$YLmy2!}`2E+UY_NmCw+;FWctrpo#t;XrXFIKSL?Cq(79m z)t`xM_oSyk{gl_1^@n{z%)LO81@-4=9-TqtpiWr}i0A@@YvLjCixd4eV(HU2I?<8|W$lxt}4LyRMiwmf)g~$sIw>yRifjb0V+Z zc0x_@TvLj**1`afYIt+ ztl;h^qJkga9jxHv((7~mtg?E)m{Z6Ux8lSe>V~+|s^T6P7;e&FPXyo5U@rtWYw&Oc z|Ea;=2yW5fQ3$@T!6F2=YOpVYA3@qYujd@ivYy0h@^7S~gM#-El17(d9wc-MGydmJztz2| zCskBN4qglwM$B}E3WJlV5qBTWY9{s--8qVw=M;geGl8UUR=k~h{*pv>1K7j*+6yCo zh%!sy#=yN?aRR%!^@$pf4;o;mVic@9>Hv z%Y)ks+}?vZuE2|J55|fu;2grnXgbzoc1m&%KnpgPfsuG}Bcvg!|#3engwG@0|sNkgnaVV+<*CL2- zG#H}M#@g$RSn&=u&zVfl56~X_-}6$u^Yv#9fUn2tWuyhxBxE<)nY7(wFkNcZ9@iPiv`^Bf^^A1Bs#O z*o%=~=ATl_)ccKaH6%v)C`qbOi%r$oYm;|vb^$-Q3RQ;MomkwjGuZi!N=eGd6*#P(Tcu)r-WuxF^i<3ojT2PhQ;`-0qT zeMf8*wyE}gDo!IQY+WWS!;6}4ujpd7C)q7C1XA_ zB60IoCUJA~cP8c=8}qFVG#kpz%`Awynm@CFe`(-bTj)1_q3AJ068Q_eVnSi&lzSiu zoqz-qLkh6)>UIzhPX7lFE~DE#@0vP<%&3@18SygEm8!$Qem2leJipU~<^ZO$`oNfb zlC}!Kb#WYrwWU_Y$AW{zfuw<8A5c4nkQ@K{1?oA^x}nZxUNgvhxrQ zb90pIZ_rzUYuKXf`_|C_x(kfkvYnrJL$+vXP1`vJX85JOs%3>IU87kcYYO+ zM)N9q6sMkum%<1-4X5j1AXbJEF(QhI_+=O|h6sm<*yq z6=y3EM_5Fjv&Rs?`&*dJpZ`>x*XqWcu0%yrP^E%8f~XH~2vi!m$^=zR)N2+c6QETy zfoWbf4S$_;iGC=IjthD&(d9&67e>z!bUD#i6Mab-%>|X_RSSu}mFP3V=%s?bj_8Mo zKH8$Cu20980TXjxAgYU^{QkTvKYUiw1+&fXO0lUqFr%4?l|XmcQV~FCMsty~9;BSj zq_CQK4Db_!Z;mGtKNp)zHP6Iq~FjvoOkDP>l$g%`^d^4gaeD8S$l~-v{hbjMLjPYHedTn|y;vcTG82WlhB|zIU}}Q9 zDZH{$rzRA&EsHB!fwEq`K3LW_3i)NFPD*Yxu8;i+wasXn;YiM%l^{LsY=}T>u@Aq%YOS4Du;+`^I+;k168$4lqkqGY6l#fCMK45R zH$^ofN>7M>R{`RLse*u;GH~*UXjwgu`5S)d12_tboY3l2;Cr#HD`&fwZ3?bjCren^ zkjYZ=demF1!)swtA$+5QmBR{GR_O^tvMQ!}a5ms<%%&~A1Kfkvgnp~Jv(0o)EziucBzL@( z-1v@|%+L>OcHh*+m<>IS~MD8l##eB|#T9F(M-f{bkSCtz18Xrplhc)q$ zNYCYc0XQe}08WSaR!lIQQMrHw;AG0faE|0*I6d+(oEfoCmOPvk@qL8=oDX?0Ikx>HPW!IrhFVp=zm`>^SRN|URFBrY)Fxsf5g&vRR1{|w z5wC?2R2s)6;;}G-3gi?-fmjwsP??;8L|kPNhW!~9Ci~5+sA$dvCOjvMpwcBdD0pFd{y`IwT1ysWX#^zgvXi@>PXJd-2&<3V`PKJEY~r z>@+Pv?^%je@H_{ioz*0Dy=F~LhhgBgJlbCM)Rph3E?MMa_6?7rsTSb_kH;cm{CP&x zNdBV1?g*}Dk()u&X8J%gB^Iqg;+jQU@t1A`15`e6-(B`q$IFKZH5+z|K4x+(ypvhb z_g6kAnORc)5~0A|Kn?hmaCPPLOvAC-NG$EZws2}^3oHC2v#e8=xjv;&)@qjQ2!w5HOEDoj+IoBMYyGDK9nviGnyNunbR(R^pPPjr??G+k2L z6o;D9uO)N6{O9=j`?iw*DK9@=VRC(wR;rUz>gWG_fvptI{|6++zBT4%XQ-6+v{zvC z$G%if2ymRSit%oHC6}lqlsv~Pah6|V+?JTXh>JO)QpHKT*DK#4jP~F+W5cjlD*7VE zqVSkoHD9U$Q87xn0v;!k75_62&nORHZ1Jaict&}6egatNAK~E{<>7}}d?ydjC=Wl} z;%noUKSp`@5f=Zthi8f8o$u)trYqj z#U(1)_eh}(w7X0TWf=c`L~j1oH=_tClt{c%jU*SELicgr^$UIUDrsDZYg}4Q``SX; zu}h&0OfrQsJXs5!zlOl#z3|cHs}Hp0+NflnDYv`R;FmkVD>q%jzgJwMlH&#`mjNqb zhCK-r$jQI@x0rEAWd&wsZ{ZvS67K4B9pUu?FJ0MkWuvxGjzOeQ25e;+_9{!D_zqUK zk1f|mB@Z&?9_sY-%RSXAH@&iNC@xXSA&!*GfUPXUUS$cOvd>|HB$XAIm3@#?CRFxd zXPjT?Tk~vXr=_**SX(HEPf{oY`1bDvrCqs(u&q49UgZgBOZT&U*r?k9M2N-o;uP}C{5oVpALJaG?pL4rk)|R=p>4b z*_Ootpp?acts}!;9SLY1W42ryl|0Fm`x9r4U#{boo8G{6ic3_M+j1GO4a~6Dzywg) ze|%{gSYTH6RmAAP%efh8oLeyna<-s+_b8>F{0&mDE5p|-Ptd6FK08#HOGrrKDokl}~&gu8HSZhJ=#}>meF05SSIj58GuX4>>gzU22H066(MU|AY z8gK`8j`+~2*b)QCEQ9dA1>WcbdUyf5Pb^6Hc%>UgVN}k=!p?t@x{J7)+!abQSmm+g z?5$sDDt*mzdka-|-%fZH-IEo)XNgx)Q=tM|A3)x7OvK|Ol={+k6snYdOh_*G|RUJenOe4p!Y?;l>iTOk%I9x@p#6xzq-w*JIzbWS3&%tnNKFkW^{{M{JQv5AaUuM z!JL4rPc6m?VTRu2WB5YK&+|$k58q-D6SAQ?Yg(dWGi{3qbiiUE+Xi3JIa?GiqY6E^ zQItbH8(83wniZX{)Pu_OF_r1A*+FGm(~>gXy~tB0F}a_?4k4Y&6PN$CLvFi@-O+y7 z7||_@l4ZE6xEpTY5hE*8aixmlJ-tLuqkZK&+C~Qz>QCx=+N69d)#@ef_LR>FC{#&tv0|wBF@_p^;{l$~pnuFTfGI(B8*@!B-u&tsRfRR-OQC&*Lw$1WHRp8vnn5`O< zQB*57nAFmAvy_9N?XM+;dksw;F`U|x?cX=wt89B#c81Cuf{Cvwf(ErK=ZixPM`S)s z-Rei(LIAJknMhngLI+2PHQS47he^(X0V)hfDte3R=H_sP!B8PWs2r%>mQZ0NwjuE) zU-K&VM$N0(JCV)Xtg0)L-H*PgCvt)3W+dkvLDB^fc~)THz=MH;q|Fm~lGi&*PWC9e zxq!%SH=35G6SSKWh#0EgL%pNj<3PmH6a@W%)biaB!t4}aj>FZt813quG0fwgP+6OHe*0EQ4 zx`vk{O>X{S0=)rI`rf3qxyK9N1XFra zSWk|xobE{>$8i}mO=B`jq4)Zr6uwptf>P)@5)=+MG*t>MI@u%Uc~a;=UHD3y)im-k zs%Qq<0*SS)vVX>?(NF1Bb|4wM;gUdQCotwJjmcQqlWT&N-6OrS*OS7DmS&!FKj9+{ ztd)<$>6$I76)pMS?sGjk>_$0!rX`6sVAJV-;x10n0U0)5RL&{Xul+ELqfy$Kch<=S z#ATx0-B>i1%F(Z*lgq;%;U1BS5gO_lsW?ePy&@I;G<0~R;&2W1j#LzC=%`4=J{l^* z9S$1m%eONFP>}Pa)PI_h65KHO>0$UePx&!%?qDuMt<4rsj`eN-Bnd0LQD?js30sHD zg))dg_NO(V)jX4DSD0ssorkm7=9xU}!sxi2<7qU{#xQ!aoz22;=jA_DJWXVJz3n7S z>;#D&X8RQrJ5gfShtl$_3+Y~I(~3pLZNmw4B%0M%#MbQdz{X%oPi0@Hc>h`EsqAi! z%a{!slTl@_TN_l_pDG7xpVY^!S`OrOM^eyge>@6w%S}nDxX(fSMsXiQ5ZTg4NoALN ziYr?h2Ed?E~mF|;p+X)4wmxba|X35hkO}`R18;buEfXQROJSV!VJ-& zBck}tH^rP7O7Uw|DWLGpI34=HV8S-B!j9EN%Tugrftk8-&=fG3aUmn~4CYMhH^K&U zjGelM4CaCqGg8xdBqdhO=-W`NHJDM>Y{f**v=SAl3G!~6!F+;ucz#OHU}9|NM=tgZ zW)EjBV{X@&jJk9FOF`W^3G=yG z7gm@nwG&6%#OL(03ezuA@e`{s1C2WL6NMR|BOerEhSZWVsA*otu%>MaWb{YTX{t2F z&SkXytsgxqvs!esx)oB3;a0Um9`j}!t4g|p{(RMP{)H{&$Bk&DkrewxS0k?K~r_2R%ccM$VeD`MOxG zF)cnxbk$AK4s{P^p;c>-A%1~fIO<~+L|T2Q6_P;p5MkSN;63bNLCTCeFz@-G4xC;g zDWz5IvC}3t>n|pSn$_uXGB89J&IUIn|Ask*Ho;YDo6DViZ?ZjQ1u( z_EBj{BIZ6wt1dL_c@z<$26|dy-;l%HTRAYsS7}R z!v%0WN*>=)#mqG7Yjj^$>o7<&>T7gw$)u%??zMJeq{^$KzD9StxE~_Jyf^R?Qdl-&@^pV)9U*|Z!)Ph-df1} zA~_^1@1Z(=YScQ2lJ`Xo?gPK~)w07bRWdrHYweRR`XMOQrf^8 zjk&;+5^mvO%n*&qD5b2YgHqb490Ugxz0L%Mh@q)clJl1;rENhex$UNTqUlUMc|(OB z7R{mBqu@|cr)U?viS7mGsn1%4qZXno4E#lJCTxYRQScS>}l= zpLM@Wr5_g8HtVLfZ$eiQSadkadY(+kp4K3>x3NR!Z#)UZTlp&zpN2?zBd9lnb7gNu zqDfmsIYq2ar5>LzGW23~Ts0sRYbRKBHdfl{Q(JR^ZvRgbAh8%+Pj}7aJv)cvUqx9f)nC1HR zufgq%jZpA}wR(+LgEuxrn*4>Z<_NbhVUK6!ygI3FT~_(NwWoQiiyMr)OEV`ca`3bo zo#k%QXy!JTb4O7fXD;jX+Bs5YatN|$f(KBLBMBa6g5R112TOvI?-C{a>R*@qYu?C4 zh4Hn|?3+fMja`UayaKb`iwz&2Ac+^dzXqdo-Q!I3i^1sK-9t?D%3yRSx08v! zAsC(KHmJ@de<9K6(HknO_mI)}z-Og~_8XVDBac`(#62;s;`2x5Szw;|=Goai_rOz5 zY5viZ%qB|amn9@zl;oX-sHJ=^uMsB^h90D?@L7At2U&SU2iukv`KEWT(I7QUNaWzX!Y2HX?9ysEY|;2+OcDe-KDFO}Wg1qY~9j!I*tZq2S@rB|4hp@x-b z5$&^r`v%}u;1ZH@XL3lFChjs;_~nj(RMw1Esqjs_&q_yknqj3Y;?+}(_A)M}eqALQ z>CBupgl8yhyyJWj!^ol0-TMQPp=`8NI_HP!9GgPtCz)?}ti*#pk*;ua?rk9=aa*ZkB_dU9a9>;`t!BFua_~GeUtlxm z+71NAb=}=jfh3Q*f-{-dp>Jx;$%FF2Q81`GQ0rtkqhI#yZ~7443TDrBb4A2ij$)k6 zEbBipslBDo6PQ)ey7-(t^d$?B6aZf1b&OQV*F-yyL6#RZOD%4B&2tW8%)=UEs`bk6 zj6iXnU4!`6oYfLzxZx>t-13UyRvjki9j)8E+hc45X^s_|h5ALxa>fkTQUY~~c~1Hu z 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�mdugExRHIvmp}`hQ;w}#2thMsIpx?l;vgUw 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%0AHe%7M!y+>euLYG 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

      ZwUt~85iqS-Y@#<}-Bv`S6cr9QFH5>3g#nn1Tj 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 z

      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

      GfhF& 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ɖ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 +#include +#include +#include + +#include "safe_types.h" +#include "cli.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" +#include "stw_system_timer.h" +#include "packet_dump.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_debug_cli.h" +#include "dlep_client_neighbor_fsm.h" +#include "dlep_client_peer_fsm.h" +#include "dlep_porter.h" + +#include "fuzz_message_builder.h" +#include "fuzz_packet.h" + +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" + +#include "fuzz_dlep_cli.h" + + + + +/* + * directory record + */ +static cli_record_t cli_fuzz_dir; +static cli_record_t fuzz_peer_dir; +static cli_record_t fuzz_neighbor_dir; + + +/* + * test command records + */ +static cli_record_t test_peer_hbt_cmd; +static cli_record_t test_peer_term_cmd; +static cli_record_t fuzz_neighbor_up_cmd; + +static cli_record_t fuzz_neighbor_term_cmd; +static cli_record_t fuzz_neighbor_metrics_cmd; + + +/** + ** test peer commands + **/ +static void +peer_fuzz_peer_term (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + if (argv[1] && *argv[1] == '?') { + printf("peer_fuzz_terminate - sends a peer terminate \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (p2peer) { + send_fuzz_peer_terminate(p2peer); + + } else { + printf("Input error: local peer id %u not known \n", nid); + } + return; +} + +static void +peer_fuzz_heartbeat (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + if (argv[1] && *argv[1] == '?') { + printf("peer_fuzz_heartbeat - sends a peer heartbeat \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (p2peer) { + send_fuzz_peer_heartbeat(p2peer); + + } else { + printf("Input error: local peer id %u not known \n", nid); + } + return; +} + + + + +/** + ** test neighbor commands + **/ +static void +cli_fuzz_neighbor_up (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_fuzz_up - generate a neighbor up \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2config = dlep_get_config_ptr(); + p2peer = dlep_get_peer_by_peer_id(1); + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + p2neighbor = dlep_neighbor_allocate(p2peer, mac_address); + } + + if (!p2neighbor) { + printf("Error: new neighbor instaniation failed \n"); + return; + } + + /* don't send the layer 3 addresses, force router to ARP/ND */ + ipv4_zero_address(&p2neighbor->ipv4_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + + /* set the neighbor metrics */ + p2neighbor->rlq_tx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->latency = 250; + p2neighbor->cdr_tx = 100000000; + p2neighbor->mdr_tx = 100000000; + + send_fuzz_neighbor_up(p2peer, p2neighbor); + return; +} + + +static void +cli_fuzz_neighbor_metrics (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + uint8_t rlq; + uint8_t resources; + uint16_t latency; + uint64_t cdr; + uint64_t mdr; + uint32_t temp; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_fuzz_metrics " + " \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" - 0 - 100 \n"); + printf(" - 0 - 100 \n"); + printf(" - 16-bit millisecond value \n"); + printf(" - 64-bit bps value \n"); + printf(" - 64-bit bps value \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + if (argv[2]) { + temp = strtoul(argv[2], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + rlq = RFC5444_100_PERCENT; + } else { + rlq = temp; + } + } else { + printf("Input error: rlq missing \n"); + return; + } + + if (argv[3]) { + temp = strtoul(argv[3], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + resources = RFC5444_100_PERCENT; + } else { + resources = temp; + } + } else { + printf("Input error: resources missing \n"); + return; + } + + if (argv[4]) { + temp = strtoul(argv[4], NULL, 10); + if (temp > 16535) { + latency = 16535; /* 16-bit max */ + } else { + latency = temp; + } + } else { + printf("Input error: latency missing \n"); + return; + } + + cdr = 0; + if (argv[5]) { + cdr = strtoul(argv[5], NULL, 10); + } else { + printf("Input error: cdr missing \n"); + return; + } + + mdr = 0; + if (argv[6]) { + mdr = strtoul(argv[6], NULL, 10); + } else { + printf("Input error: mdr missing \n"); + return; + } + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->rlq_tx = rlq; + p2neighbor->resources_tx = resources; + p2neighbor->latency = latency; + p2neighbor->cdr_tx = cdr; + p2neighbor->mdr_tx = mdr; + + send_fuzz_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: RLQ=%u Resources=%u Latency=%u \n" + " CDR=%llu MDR=%llu \n", + rlq, + resources, + latency, + cdr, + mdr); + return; +} + + +static void +cli_fuzz_neighbor_term (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_fuzz_term - generate a " + "neighbor terminate \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + send_fuzz_neighbor_down(p2peer, p2neighbor); + + //dlep_client_neighbor_fsm_engine(neighbor_term_user_req_e, + // p2peer, p2neighbor); + return; +} + + +/** + * NAME + * fuzz_dlep_cli_init + * + * SYNOPSIS + * void + * fuzz_dlep_cli_init() + * + * DESCRIPTION + * Registers the dlep fuzzing commands with the cli + * facility. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +fuzz_dlep_cli_init (void) +{ + RC_CLI_t rc; + + /* + * Create directory and commands + */ + rc = cli_mkdir("fuzz", NULL, &cli_fuzz_dir); + + rc = cli_mkdir("peer", &cli_fuzz_dir, &fuzz_peer_dir); + rc = cli_mkdir("neighbor", &cli_fuzz_dir, &fuzz_neighbor_dir); + + + /* + * test peer + */ + rc = cli_mkcmd("peer_fuzz_terminate", peer_fuzz_peer_term, + &fuzz_peer_dir, &test_peer_term_cmd); + + rc = cli_mkcmd("peer_fuzz_heartbeat", peer_fuzz_heartbeat, + &fuzz_peer_dir, &test_peer_hbt_cmd); + + /* + * test neighbor + */ + rc = cli_mkcmd("neighbor_fuzz_up", cli_fuzz_neighbor_up, + &fuzz_neighbor_dir, &fuzz_neighbor_up_cmd); + + rc = cli_mkcmd("neighbor_fuzz_term", cli_fuzz_neighbor_term, + &fuzz_neighbor_dir, &fuzz_neighbor_term_cmd); + rc = cli_mkcmd("neighbor_fuzz_metrics", cli_fuzz_neighbor_metrics, + &fuzz_neighbor_dir, &fuzz_neighbor_metrics_cmd); + + return; +} + diff --git a/dlep_radio_ipv4/1fuzz_encoder_tlv.c b/dlep_radio_ipv4/1fuzz_encoder_tlv.c new file mode 100644 index 0000000..180fa0e --- /dev/null +++ b/dlep_radio_ipv4/1fuzz_encoder_tlv.c @@ -0,0 +1,646 @@ +/*---------------------------------------------------------------------- + * fuzz_encoder_tlv.c -- routines to encode TLVs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "network_order.h" + +#include "rfc5444_types.h" +#include "rfc5444_encoder.h" +#include "rfc5444_encoder_tlv.h" + + + +/** + * NAME + * rfc5444_mac_address_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_mac_address_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t mac_address[]) + * + * DESCRIPTION + * Call this function to insert the remote MAC address TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * mac_address - the remote router MAC address. The MAC + * is used to uniquely address all neighbor messages. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | MAC Addr | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | Remote Router MAC Continued (32-bit) | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | MAC Addr | + * +-+-+-+-+-+-+-+-+ + * + */ + uint8_t +*fuzz_mac_address_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t mac_address[]) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MAC_ADDRESS); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_MAC_ADDRESS_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MAC_ADDRESS_LENGTH); + dest += sizeof(uint16_t); + + dest = mac_put_address(dest, mac_address); + + /*** FUZZ the pointer ***/ + p2encoder_state->buildit_ptr = dest + 1; + return (dest); +} + + +/** + * NAME + * rfc5444_ipv4_address_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_ipv4_address_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t operation, + * ipv4_address_t ipv4) + * + * DESCRIPTION + * Call this function to insert the IPv4 TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * operation - indicates the operation to be applied + * on the IPv4 address + * RFC5444_EXISTING_NEW_ADDRESS + * RFC5444_WITHDRAW_ADDRESS + * + * ipv4 - the address + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | operation | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | IPv4 Address | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ +uint8_t +*fuzz_ipv4_address_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv4_address_t *ipv4) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_IPV4_ADDRESS); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV4_ADDRESS_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, (RFC5444_TLV_IPV4_ADDRESS_LENGTH)); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, operation); + dest += sizeof(uint8_t); + + dest = ipv4_put_address(dest, ipv4); + + /* NETWORK_ORDER_PUTBYTE(dest, 24); + dest += sizeof(uint8_t); */ + + /*** FUZZ the pointer to short***/ + p2encoder_state->buildit_ptr = dest - 2; + return (dest); +} + + + +/** + * NAME + * rfc5444_link_metric_mdr_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_mdr_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint64_t mdr) + * + * DESCRIPTION + * Call this function to insert the maximum datarate TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * mdr - the maximum theoretical data rate, in bits per + * second (bps), achieved on the link. When + * metrics are reported, the maximum data rate + * MUST be reported. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | MDR | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | MDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | MDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + */ + uint8_t +*fuzz_link_metric_mdr_tx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t mdr) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_MDR_METRIC_TX); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_MDR_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_MDR_LENGTH); + /*** FUZZ over write length ***/ + //dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, mdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + uint8_t +*fuzz_link_metric_mdr_rx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t mdr) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_MDR_METRIC_RX); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_MDR_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_MDR_LENGTH); + /*** FUZZ over write length ***/ + //dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, mdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + + +/** + * NAME + * rfc5444_link_metric_cdr_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_cdr_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint64_t cdr) + * + * DESCRIPTION + * Call this function to insert the current datarate TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * cdr - the current data rate, in bits per second + * (bps), achieved on the link. If there is no + * distinction between maximum and current + * data rate, current data rate SHOULD be set + * equal to the maximum data rate. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | CDR | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | CDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | CDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + */ +uint8_t +*fuzz_link_metric_cdr_tx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t cdr) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + /*** FUZZ the tlv type ***/ + //NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_CDR_METRIC_TX); + //dest += sizeof(uint16_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_CDR_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_CDR_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, cdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +uint8_t +*fuzz_link_metric_cdr_rx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t cdr) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + /*** FUZZ the tlv type ***/ + //NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_CDR_METRIC_RX); + //dest += sizeof(uint16_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_CDR_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_CDR_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, cdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} +/** + * NAME + * rfc5444_link_metric_latency_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_latency_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint64_t latency) + * + * DESCRIPTION + * Call this function to insert the latency TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * latency - the transmission delay that a packet + * encounters as it is transmitted over the link. + * This is reported in absolute delay, in + * milliseconds. If latency cannot be calculated, + * a value of 0 should be reported. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | Latency | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | Latency | + * +-+-+-+-+-+-+-+-+ + * + */ +uint8_t +*fuzz_link_metric_latency_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t latency) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_LATENCY_METRIC); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_LATENCY_FLAGS); + dest += sizeof(uint8_t); +#endif + /*** FUZZ the length***/ + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_LATENCY_LENGTH + 2); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLONG(dest, latency); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +uint8_t +*fuzz_link_metric_resources_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_RESOURCES_METRIC); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, resources); + dest += sizeof(uint8_t); + + /*** FUZZ the pointer ***/ + p2encoder_state->buildit_ptr = dest + 1; + return (dest); +} +/** + * NAME + * rfc5444_link_metric_rlq_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_rq_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t rlq) + * + * DESCRIPTION + * Call this function to insert the RLQ TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * rlq - a non-dimensional number, 0-100, representing + * the relative link quality. A value of 100 + * represents a link of the highest quality. If + * the RLQ cannot be calculated, a value of 100 + * should be reported. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | RLQ | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + */ +uint8_t +*fuzz_link_metric_rlq_tx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t rlq) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_RLQ_METRIC_TX); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RLQ_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_RLQ_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, rlq); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +uint8_t +*fuzz_link_metric_rlq_rx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t rlq) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_RLQ_METRIC_RX); + dest += sizeof(uint16_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RLQ_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_RLQ_LENGTH); + dest += sizeof(uint16_t); + + /*** FUZZ the rlq value ***/ + //NETWORK_ORDER_PUTBYTE(dest, rlq); + //dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} +/* + * MTU + */ +uint8_t +*fuzz_mtu_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint16_t mtu) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MTU); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MTU_LENGTH); + dest += sizeof(uint16_t); + + /*** FUZZ the mtu value ***/ + + //NETWORK_ORDER_PUTBYTE(dest, mtu); + //dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/** + * NAME + * rfc5444_status_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_status_tlv(rfc5444_encoder_state_t *p2encoder_state, + * uint8_t status_code) + * + * DESCRIPTION + * Call this function to insert the peer status TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * status_code - protocol status code reflecting success + * of previous request + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | Status Code | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ +uint8_t +*fuzz_status_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t status_code) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_STATUS); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_STATUS_FLAGS); + dest += sizeof(uint8_t); +#endif + + /*** FUZZ the length ***/ + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_STATUS_LENGTH+2); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, status_code); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + diff --git a/dlep_radio_ipv4/1fuzz_message_builder.c b/dlep_radio_ipv4/1fuzz_message_builder.c new file mode 100644 index 0000000..0c8f3a7 --- /dev/null +++ b/dlep_radio_ipv4/1fuzz_message_builder.c @@ -0,0 +1,2383 @@ +/*---------------------------------------------------------------------- + * dlep_message_builder.c -- Routines to build the DLEP messages + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" +#include "packet_dump.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" +#include "rfc5444_encoder_tlv.h" +#include "rfc5444_encoder.h" + +#include "dlep_sim_options.h" +#include "dlep_debug.h" +#include "dlep_porter.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" +#include "rfc5444_experimental_tlv.h" + +#include "dlep_message_builder.h" +#include "dlep_client_timer.h" +#include "fuzz_encoder_tlv.h" + +#include "fuzz_message_builder.h" + +extern int TCP_READY; + + +/* + * Local API to increment a sequence number. Sequence numbers + * are simply request-response correlators. They are not + * checked for 'sequencing' or lost messages. The originator + * determines the sequence number so it can correlate the + * response. + */ +static uint16_t +dlep_get_next_sequence_number (uint16_t sequence_number) +{ + sequence_number++; + if (!sequence_number) { + sequence_number++; + } + return (sequence_number); +} + + +/** + * NAME + * send_fuzz_attached_peer_discovery + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_attached_peer_discovery( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a attached peer discovery message + * from the radio to the router to initiate the discovery process. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_attached_peer_discovery (dlep_context_peer_t *p2peer) +{ + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + TCP_READY = 0; +// printf("\n INSIDE send_fuzz_attached_peer_discovery "); + p2es = rfc5444_encoder_packet_start(); + + /* Adding message header */ + rfc5444_encoder_message_block_start(p2es, + RFC5444_SIG_ATT_PEER_DISCOVERY); + + packet_dump("OUTGOING-", + p2es->packet_ptr, + 1); + /* required */ + rfc5444_version_tlv(p2es, + RFC5444_DLEP_MAJOR_VERSION, + RFC5444_DLEP_MINOR_VERSION); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_detached_peer_discovery + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_detached_peer_discovery( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a detached peer discovery message + * from the radio to the router to initiate the discovery process. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_detached_peer_discovery (dlep_context_peer_t *p2peer) +{ + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + /* + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); +*/ + +// added for D5 + +rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_DET_PEER_DISCOVERY); + +/* This function call to add message lenth */ + +#if 0 +rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_REQ); +#endif +#if 0 + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +/* + // added for testing, will remove it +// rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_DET_PEER_DISCOVERY); + */ + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2peer->sequence = + dlep_get_next_sequence_number(p2peer->sequence); + p2peer->expected_peer_offer_sequence = p2peer->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + +#endif + /* required */ + rfc5444_version_tlv(p2es, + RFC5444_DLEP_MAJOR_VERSION, + RFC5444_DLEP_MINOR_VERSION); + + /* optional */ + rfc5444_peer_tlv(p2es, p2config->local_type_description); +#if 0 + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); +#if 0 + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } +#endif + + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_peer_offer + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_offer(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer offer message + * from the router to the radio in response to the + * peer attached/detached discovery message. This + * confirms discovery. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_peer_offer (dlep_context_peer_t *p2peer) +{ + + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + p2es = rfc5444_encoder_packet_start(); + + /* Adding Message header */ + + rfc5444_encoder_signal_block_start(p2es, + RFC5444_SIG_PEER_OFFER, + DLEP_SIGNAL_FLAGS); + + rfc5444_peer_tlv(p2es, p2config->local_type_description); + + rfc5444_ipv4_connection_point_tlv(p2es, p2config->local_tcp_port, + &p2config->local_ipv4); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending peer offer : \n"); + printf(" signal code=%u RFC5444_SIG_PEER_OFFER \n", + RFC5444_SIG_PEER_OFFER); + } + + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + + /* Oppening TCP socket */ +// dlep_tcp_porter_open(p2config); + + rfc5444_encoder_free(p2es); + + return; +} + + + /** + * NAME + * send_fuzz_peer_init + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_init( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer init message + * from the radio to the router to initiate the TCP synchronization process. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ + void + send_fuzz_peer_init (dlep_context_peer_t *p2peer) + { + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_INIT_REQ); + + /* required */ + rfc5444_version_tlv(p2es, + RFC5444_DLEP_MAJOR_VERSION, + RFC5444_DLEP_MINOR_VERSION); + + rfc5444_heartbeat_interval_tlv(p2es, p2config->peer_heartbeat_interval); + + rfc5444_link_metric_mdr_rx_tlv(p2es, 100000000); + p2peer->mdr_rx=100000000; + + rfc5444_link_metric_mdr_tx_tlv(p2es, 100000000); + p2peer->mdr_tx=100000000; + + rfc5444_link_metric_cdr_rx_tlv(p2es, 100000000); + p2peer->cdr_rx=100000000; + rfc5444_link_metric_cdr_tx_tlv(p2es, 250); + p2peer->cdr_tx =250; + + rfc5444_link_metric_latency_tlv(p2es, 250); + p2peer->latency = 250; + + rfc5444_link_metric_resources_tx_tlv(p2es, 100); + p2peer->resources_tx = 100; + rfc5444_link_metric_resources_rx_tlv(p2es, 100); + p2peer->resources_rx = 100; + + rfc5444_link_metric_rlq_rx_tlv(p2es, 100); + p2peer->rlq_rx = 100; + rfc5444_link_metric_rlq_tx_tlv(p2es, 100); + p2peer->rlq_tx = 100; + + + + /* optional */ + rfc5444_peer_tlv(p2es, p2config->local_type_description); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } +#if 0 + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + + + printf("\n CALLING dlep_tcp_connect"); +#endif + +#if 0 + dlep_tcp_connect(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); +#endif + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + /* Setting this flag inorder for dlep_tcp_receive to get called after tcp connect + * and first dlep_tcp_send is called inorder to avoid infinite call in loop. + */ + TCP_READY = 1; + + rfc5444_encoder_free(p2es); +// printf("\n PEER INIT REQUEST Sent"); + + return; +} + + /** + * NAME + * send_fuzz_peer_init_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_init( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer init message response + * from the radio to the router. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ + void + send_fuzz_peer_init_ack (dlep_context_peer_t *p2peer) + { + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_INIT_RES); + rfc5444_status_tlv(p2es, p2peer->status_code); + + rfc5444_peer_tlv(p2es, p2config->local_type_description); + + rfc5444_heartbeat_interval_tlv(p2es, p2config->peer_heartbeat_interval); + + rfc5444_link_metric_mdr_rx_tlv(p2es, 100000000); + p2peer->mdr_rx=100000000; + + rfc5444_link_metric_mdr_tx_tlv(p2es, 100000000); + p2peer->mdr_tx=100000000; + + rfc5444_link_metric_cdr_rx_tlv(p2es, 100000000); + p2peer->cdr_rx=100000000; + + rfc5444_link_metric_cdr_tx_tlv(p2es, 250); + p2peer->cdr_tx = 100000000; + + rfc5444_link_metric_latency_tlv(p2es, 250); + p2peer->latency = 250; + + rfc5444_link_metric_rlq_rx_tlv(p2es, 100); + p2peer->rlq_rx = 100; + + rfc5444_link_metric_rlq_tx_tlv(p2es, 100); + p2peer->rlq_tx = 100; + + rfc5444_link_metric_resources_tlv(p2es, 100); + p2peer->resources = 100; + + rfc5444_mtu_tlv(p2es, 100); + p2peer->mtu = 100; + + rfc5444_ipv4_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2config->local_ipv4); + ipv4_zero_address(&p2peer->ipv4_address); + + rfc5444_ipv4_attached_subnet_tlv(p2es, RFC5444_EXISTING_ADD_ADDRESS); + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } +#if 0 + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + + + printf("\n CALLING dlep_tcp_connect"); +#endif + +#if 0 + dlep_tcp_connect(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); +#endif + + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Session initialization response : \n"); + printf(" Message code=%u RFC5444_MSG_PEER_INIT_RES\n",RFC5444_MSG_PEER_INIT_RES); + + } + + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + /* Setting this flag inorder for dlep_tcp_receive to get called after tcp connect + * and first dlep_tcp_send is called inorder to avoid infinite call in loop. + */ + TCP_READY = 1; + + rfc5444_encoder_free(p2es); + + return; +} + + +/** + * NAME + * send_fuzz_peer_heartbeat + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_heartbeat( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer heartbeat to + * maintain a persistent presence with the peer. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_peer_heartbeat (dlep_context_peer_t *p2peer) +{ + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + +// printf("\n INSIDE send_fuzz_peer_heartbeat"); + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + 18); + +#if 0 + /* + * Get a unique sequence number + */ + p2peer->sequence = + dlep_get_next_sequence_number(p2peer->sequence); + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + /* rfc5444_heartbeat_interval_tlv(p2es, + p2config->peer_heartbeat_interval); */ + rfc5444_encoder_message_block_end(p2es); +#if 0 +#ifdef MULTIPLE_PEER_MESSAGES_PACKED + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_HEARTBEAT); + + /* + * Get a unique sequence number + * HB does not have an ACK, so the sequence number is not important. + */ + p2peer->sequence = + dlep_get_next_sequence_number(p2peer->sequence); + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); +#endif +#endif + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + /* if (TCP_READY ) { + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + } else { // Else send with UDP socket if heartbeat sent before TCP connection. + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + } */ + + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending heartbeat message : \n"); + printf(" Message code=18 RFC5444_MSG_PEER_HEARTBEAT\n"); + } + + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_peer_update_request + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_update_request( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer update message + * from the router to the radio. It is used to indicate + * a new layer 3 address or the removal of a layer 3 + * address. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_peer_update_request (dlep_context_peer_t *p2peer) +{ + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_UPDATE_REQ); + +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2peer->sequence = dlep_get_next_sequence_number(p2peer->sequence); + p2peer->expected_peer_update_response_sequence = p2peer->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + /* if (p2peer->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2peer->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2peer->update_ipv4_operation, + &p2peer->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2peer->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2peer->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2peer->update_ipv6_operation, + &p2peer->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } */ +#if 0 + rfc5444_encoder_tlv_block_end(p2es); +#endif + printf("Sending mdr ,cdr, latency as fuzz\n"); + fuzz_link_metric_mdr_rx_tlv(p2es, p2peer->mdr_rx); + fuzz_link_metric_mdr_tx_tlv(p2es, p2peer->mdr_tx); + fuzz_link_metric_cdr_rx_tlv(p2es, p2peer->cdr_rx); + fuzz_link_metric_cdr_tx_tlv(p2es, p2peer->cdr_tx); + fuzz_link_metric_latency_tlv(p2es, p2peer->latency); + rfc5444_link_metric_resources_tlv(p2es, p2peer->resources); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2peer->rlq_tx); + rfc5444_link_metric_rlq_rx_tlv(p2es, p2peer->rlq_rx); + rfc5444_mtu_tlv(p2es, p2peer->mtu); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session update request :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_UPDATE_REQ\n", + RFC5444_MSG_PEER_UPDATE_REQ); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + + return; +} + + +/** + * NAME + * send_fuzz_peer_update_response + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_update_response( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer update response message + * from the radio to the router. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_peer_update_response (dlep_context_peer_t *p2peer) +{ + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_UPDATE_RES); +#if 0 + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_status_tlv(p2es, p2peer->status_code); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_status_tlv(p2es, p2peer->status_code); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session update response :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_UPDATE_RES\n", + RFC5444_MSG_PEER_UPDATE_RES); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_peer_termination + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_termination(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer termination message + * from the router to the radio or from the radio to the + * router to termiante the association. As result all + * neighbor neighbors are also terminated. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_peer_terminate (dlep_context_peer_t *p2peer) +{ + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + printf("\n send_fuzz_peer_termination in builder.c "); + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_REQ); + +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2peer->sequence = dlep_get_next_sequence_number( + p2peer->sequence); + p2peer->expected_peer_offer_sequence = p2peer->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +// printf("\n Adding Status TLV"); + rfc5444_status_tlv(p2es, p2peer->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + rfc5444_encoder_message_block_end(p2es); +#endif +#ifdef MULTIPLE_PEER_MESSAGES_PACKED + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_REQ); + + /* + * acks will not align with incremented sequence + * + * p2peer->sequence = dlep_get_next_sequence_number( + * p2peer->sequence); + * p2peer->expected_peer_offer_sequence = p2peer->sequence; + */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + + printf("Sending fuzz status tlv\n"); + fuzz_status_tlv(p2es, p2peer->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session termination :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_TERM_REQ\n", + RFC5444_MSG_PEER_TERM_REQ); + + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_peer_termination_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_termination_ack(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer termination ACK + * message from the router to the radio or from the radio + * to the router in response to the peer terminate request. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_peer_termination_ack (dlep_context_peer_t *p2peer) +{ + + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_RES); +#if 0 + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + +// rfc5444_status_tlv(p2es, p2peer->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session terrmination message :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_TERM_REQ\n", + RFC5444_MSG_PEER_TERM_REQ); + } + + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_up + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_up(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor up message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_up (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_UP_REQ); + printf("Sending ip address as fuzz\n"); + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + /* add the IPv4 address if there is one to add */ + //if (p2neighbor->ipv4_address.v4_addr.v4_addr32) { + fuzz_ipv4_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv4_address); + ipv4_zero_address(&p2neighbor->ipv4_address); + // } + + /* add the IPv6 address if there is one to add */ + if (p2neighbor->ipv6_address.v6_addr.v6_addr32[0] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[1] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[2] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[3]) { + rfc5444_ipv6_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv6_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_rx); + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_rx); + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_mtu_tlv(p2es, p2neighbor->mtu); + + rfc5444_ipv4_attached_subnet_tlv(p2es, RFC5444_EXISTING_ADD_ADDRESS); + + + if (!p2neighbor->CREDIT_NOT_SUPPORTED) { + rfc5444_credit_window_status_tlv(p2es, p2neighbor->mrw, p2neighbor->rrw); + } + + rfc5444_encoder_message_block_end(p2es); +#if 0 +//ifdef MULTIPLE_NEIGHBOR_MESSAGES_PACKED + /**** neighbor down ****/ + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_DOWN_REQ); + + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + p2neighbor->expected_neighbor_term_ack_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + /**** neighbor up ****/ + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_UP_REQ); + + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + p2neighbor->expected_neighbor_init_ack_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + /* add the IPv4 address if there is one to add */ + if (p2neighbor->ipv4_address.v4_addr.v4_addr32) { + rfc5444_ipv4_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv4_address); + ipv4_zero_address(&p2neighbor->ipv4_address); + } + + /* add the IPv6 address if there is one to add */ + if (p2neighbor->ipv6_address.v6_addr.v6_addr32[0] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[1] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[2] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[3]) { + rfc5444_ipv6_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv6_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + } + + rfc5444_link_metric_mdr_tlv(p2es, p2neighbor->mdr); + + rfc5444_link_metric_cdr_tlv(p2es, p2neighbor->cdr); + + rfc5444_link_metric_latency_tlv(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); +#endif + + rfc5444_encoder_packet_end(p2es); + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination up:\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_UP_REQ\n", + RFC5444_MSG_NEIGHBOR_UP_REQ); + + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_up_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_up_ack(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor up ack message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_up_ack (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_UP_RES); +#if 0 + /* echo the sequence number */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); +#if 0 + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_metrics + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_metrics(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor metrics message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context with the + * metrics data set + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_metrics (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_METRICS); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + //if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + //p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + //p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + //} + + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_rx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_rx); + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv(p2es, p2neighbor->latency); + + printf("Sending relative link quality , resources, mtu as fuzz\n"); + + fuzz_link_metric_resources_tlv(p2es, p2neighbor->resources); + + fuzz_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + fuzz_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + + fuzz_mtu_tlv(p2es, p2neighbor->mtu); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination update to metrics:\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_METRICS\n", + RFC5444_MSG_NEIGHBOR_METRICS); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + +void +send_fuzz_neighbor_credit_grant_req (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + + p2es = rfc5444_encoder_packet_start(); + +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_METRICS); + +#if 0 + /* + * Get a unique sequence number */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_credit_grand_request_tlv(p2es, p2neighbor->cgr); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + + /* + * start the ack timer. Using same neighbor_up_ack_tmo Neighbor Up Time. + */ + (void)stw_system_timer_start(&p2neighbor->neighbor_update_ack_tmr, + p2peer->neighbor_up_ack_tmo, + p2peer->neighbor_up_ack_tmo, + &dlep_neighbor_update_ack_tmr, + (void *)p2neighbor); + + return; +} + + +void +send_fuzz_neighbor_credit_reject (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + + p2es = rfc5444_encoder_packet_start(); + + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_METRICS); + + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_rx_tlv(p2es, p2neighbor->resources_tx); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_address_request + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_address_request(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a peer heartbeat. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_address_request (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_ADDRESS_REQ); + + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = + dlep_get_next_sequence_number(p2neighbor->sequence); + p2neighbor->expected_neighbor_address_response_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_rx); + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_rx); + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_mtu_tlv(p2es, p2neighbor->mtu); + + rfc5444_ipv4_attached_subnet_tlv(p2es, RFC5444_EXISTING_ADD_ADDRESS); + + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_address_response + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_address_response(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor address response. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_address_response (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_ADDRESS_RES); + + /* + * echo the neighbor sequence number + */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_down + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_down(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor down message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_down (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_DOWN_REQ); +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + p2neighbor->expected_neighbor_term_ack_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + + printf("Sending mac address as fuzz\n"); + fuzz_mac_address_tlv(p2es, p2neighbor->mac_address); + +// rfc5444_status_tlv(p2es, p2neighbor->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination down :\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_DOWN_REQ\n", + RFC5444_MSG_NEIGHBOR_DOWN_REQ); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_down_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_down_ack(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor down ack message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_down_ack (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_DOWN_RES); +#if 0 + /* echo the sequence number */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination down response :\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_DOWN_RES\n", + RFC5444_MSG_NEIGHBOR_DOWN_RES); + + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_link_char_request + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_link_char_request(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor, + * uint64_t cdr, + * uint16_t latency) + * + * DESCRIPTION + * This function is used to send a link characteristic message from + * the server to the client. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * cdr - requested data rate + * + * latency - maximum latency requested + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_link_char_request (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor, + uint64_t cdr, + uint64_t latency) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_LINK_CHAR_REQ); + +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = + dlep_get_next_sequence_number(p2neighbor->sequence); + p2neighbor->expected_neighbor_link_char_response_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (cdr) { + rfc5444_link_metric_cdr_tx_tlv(p2es, cdr); + rfc5444_link_metric_cdr_rx_tlv(p2es, cdr); + } + + + if (latency) { + rfc5444_link_metric_latency_tlv(p2es, latency); + } + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_link_char_response + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_link_char_response(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a link characteristic response from + * the client to the server. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_link_char_response (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_LINK_CHAR_RES); +#if 0 + /* echo the sequence number */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_tx); + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_mtu_tlv(p2es, p2neighbor->mtu); + +#if 0 + rfc5444_link_metric_resources_rx_tlv(p2es, p2neighbor->resources_tx); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination link char response :\n"); + printf(" Message code=%u FC5444_MSG_LINK_CHAR_RES\n", + RFC5444_MSG_LINK_CHAR_RES); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + diff --git a/dlep_radio_ipv4/CMakeLists.txt b/dlep_radio_ipv4/CMakeLists.txt new file mode 100644 index 0000000..25617f4 --- /dev/null +++ b/dlep_radio_ipv4/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.0.0) +project (dlep_radio_ipv4) +file(GLOB SOURCES "*.c") +add_executable(dlep_radio_ipv4 ${SOURCES}) +install( + TARGETS dlep_radio_ipv4 + RUNTIME DESTINATION bin) + diff --git a/dlep_radio_ipv4/cli.c b/dlep_radio_ipv4/cli.c new file mode 100644 index 0000000..4db9b26 --- /dev/null +++ b/dlep_radio_ipv4/cli.c @@ -0,0 +1,936 @@ +/*------------------------------------------------------------------ + * cli.c -- command line interpreter + * + * Copyright (c) 2009 by B. Berry + * All rights resevered. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include +#include "safe_types.h" + +#include "cli.h" + + +/** + * cli -- command line interpreter + * + * DESCRIPTION + * command line interpreter (cli) provides a directory + * hierarchy of commands similar in concept to the linux + * directory structure. There exists the concept of a root + * directory and subdirectory. Subdirectories can be created + * under root or under other subdirectories. Commands can + * be created under root or any subdirectory. + * + * When the user enters a command, the matching command + * structure is located from the registered commands + * and the associated call-back function is invoked to + * execute the command. + * + * When the user enters a directory name to change directories, + * the cli will change to that directory and display the + * contents. This new directory becomes the present + * working directory (pwd). + * + * User call backs are invoked with the (argc, *argv[]) parameters. + * argv[0] is the command string while argv[1,2,...,ARGC_MAX] are + * command specific parameters. + * + * There are several built-in commands for directory navigation: + * h help + * ~ moves to the top directory, root + * .. moves the directory up one level + * ld lists both commands and directories + * ! (bang) global command execution + * ls global list of commands + * + * Optional built in directories + * cli_config_dir - Commands to manage configuration. + * cli_show_dir - Commands to show internals: configuration, data, etc. + * cli_clear_dir - Commands to clear counters, runtime data, etc. + * cli_opertion_dir - Commands to manage the runtime operation. + * cli_debug_dir - Commands to facilitate debugging. + * + * PUBLIC FUNCTIONS + * cli_mkcmd - add a command to a directory + * cli_mkdir - add a subdirectory to directory + * cli_engine - command processing engine + * cli_init - initialization + * + * + */ + +/* + * #define CLI_DEBUG ( 1 ) + */ +//#define CLI_DEBUG ( 1 ) + +#ifdef CLI_DEBUG +#define DEBUG_PRINTF(myargs...) printf(myargs) +#else +#define DEBUG_PRINTF(myargs...) ((void)0) +#endif + + + +/* + * The maximum number of entries displayed on a single line + * is ENTRIES_PER_LINE. If there are more than ENTRIES_PER_LINE, + * a newline is injected to avoid line wrap. Useful for small + * screens. + */ +#define ENTRIES_PER_LINE ( 3 ) + + + + +/* + * navigation commands + */ +#define CLI_H "h" /* h => help */ +#define CLI_HELP "help" /* help */ +#define CLI_QUESTION "?" /* help */ +#define CLI_UP_ONE ".." /* move up one directory level */ +#define CLI_ROOT_DIR "~" /* move to root directory */ +#define CLI_LIST_DIR "ld" /* list the current directory */ +#define CLI_GLOBAL_BANG "!" /* global execution */ +#define CLI_GLOBAL_LIST "ls" /* global command list */ + + + +/* + * root directory structure + */ +static cli_record_t cli_root_element; + +/* + * pointer to present working directory (pwd) + */ +static cli_record_t *current_directory; + + +static struct t_nodal_record *list; + + +/* + * Public directories that applications can register with. + * Enable define for these root directories. Once defined, + * apps can register in this directory structure. If not, + * applications register to the root directory. + */ +#ifdef CLI_ROOT_DIRS +//cli_record_t cli_config_dir; +cli_record_t cli_show_dir; +//cli_record_t cli_clear_dir; +//cli_record_t cli_operation_dir; +cli_record_t cli_debug_dir; +cli_record_t cli_test_dir; +#endif + + +#define CLI_PROMPT_LEN ( 32 ) +static char cli_prompt[CLI_PROMPT_LEN]; + + + + +static void +cli_help (void) +{ + printf("\n"); + printf(" Built-in commands \n"); + printf(" h help \n"); + printf(" ~ Returns to the top or root command directory \n"); + printf(" .. Moves the from the current directory up one directory \n"); + printf(" ld current directory listing \n"); + printf(" ! (bang) global command seek and execute \n"); + printf(" ls Global list of commands \n"); + printf(" All commands followed by \n"); + + printf("\n"); + return; +} + + + +static boolean_t +str_exact (char *p1, char *p2, size_t n) +{ + while (*p1) { + if (*p1 == *p2) { + p1++; + p2++; + } else { + return (FALSE); + } + } + + if (*p1 == *p2) { + return (TRUE); + } else { + return (FALSE); + } +} + + + + +/* + * NAME + * cli_bind_entry + * + * SYNOPSIS + * #include "cli.h" + * static RC_CLI_t + * cli_bind_entry(char *name, + * cli_funcvar_t fv, + * cli_record_t *dir_rec, + * cli_record_t *cmd_rec) + * + * DESCRIPTION + * This is an internal function to add a command/directory + * into the specified chain. To add an entry into the + * root directory, specify NULL for the directory pointer. + * + * INPUT PARAMETERS + * name the name of the user command. + * + * fv a pointer to the target function to be invoked + * when the command is entered. If NULL then + * the name is considered to be a directory. + * + * dir_rec a pointer to the directory record + * + * cmd_rec a pointer to the command record to be added + * + * RETURN VALUE + * RC_CLI_OK + * error otherwise + * + */ +static RC_CLI_t +cli_bind_entry (char *name, + cli_funcvar_t fv, + cli_record_t *dir_rec, + cli_record_t *cmd_rec) +{ + cli_record_t *p2list; + cli_record_t *p2parent_directory; + + if (name == NULL) { + return (RC_CLI_NULL_NAME); + } + + if (cmd_rec == NULL) { + return (RC_CLI_NULL_CMD); + } + + if (dir_rec == NULL) { + p2list = &cli_root_element; + } else { + p2list = dir_rec; + } + + p2parent_directory = p2list; + + + /* + * can not re-use a record + */ + if (cmd_rec == p2list) { + return (RC_CLI_RECORD_CORRUPT); + } + + /* + * check if the directory is empty to add the + * first entry + */ + if (p2list->link2subdir == NULL) { + p2list->link2subdir = cmd_rec; + + DEBUG_PRINTF("\"%s\" is the First entry in directory [%s]\n", + name, p2list->name ); + + } else { + /* + * Directory is not empty, so walk the list to + * check for duplicates and append the entry. + */ + + p2list = p2list->link2subdir; + + while (p2list->next_entry != NULL) { + /* + * can not re-use a record + */ + if (cmd_rec == p2list) { + return (RC_CLI_RECORD_CORRUPT); + } + + /* + * do not allow duplicate names within the same subdirectory + */ + if (str_exact(p2list->name, name, CLI_ENTRY_LEN)) { + return (RC_CLI_DUPLICATE); + } + + p2list = p2list->next_entry; + } + + /* + * Now we can append the new entry. + */ + p2list->next_entry = cmd_rec; + + DEBUG_PRINTF("Appended \"%s\" in directory [%s]\n", + name, dir_rec->name); + } + + /* + * setup the new entry record + */ + strncpy(cmd_rec->name, name, CLI_ENTRY_LEN-1); + cmd_rec->name[CLI_ENTRY_LEN-1] = '\0'; + cmd_rec->parent_dir = p2parent_directory; + cmd_rec->next_entry = NULL; + cmd_rec->link2subdir = NULL; + cmd_rec->fv = fv; + + if (cmd_rec->fv) { + cmd_rec->cmd_list = list; + list = cmd_rec; + } + + return (RC_CLI_OK); +} + + +/** + * NAME + * cli_mkcmd + * + * SYNOPSIS + * #include "cli.h" + * RC_CLI_t + * cli_mkcmd(char *name, + * cli_funcvar_t fv, + * cli_record_t *dir_rec, + * cli_record_t *cmd_rec) + * + * DESCRIPTION + * Add the new command into the specified directory. + * To add a command into the root directory, + * specify NULL for the directory pointer. + * + * INPUT PARAMETERS + * name pointer to the command name. + * + * fv pointer to the target function to be invoked + * when the command is entered. + * + * dir_rec pointer to the directory record where the + * new command is to be added. Use NULL for root. + * + * cmd_rec pointer to the new command record. + * + * RETURN VALUE + * RC_CLI_OK + * error otherwise + * + * EXAMPLES + * The examples below add three commands to my_directory. + * + * rcode = cli_mkcmd ( "command_one", funct_one, + * &my_directory_record, &cmd_one_record ); + * rcode = cli_mkcmd ( "command_two", funct_two, + * &my_directory_record, &cmd_two_record ); + * rcode = cli_mkcmd ( "command_three", funct_three, + * &my_directory_record, &cmd_three_record ); + * + */ +RC_CLI_t +cli_mkcmd (char *name, + cli_funcvar_t fv, + cli_record_t *dir_rec, + cli_record_t *cmd_rec) +{ + RC_CLI_t rc; + + if (fv == NULL) { + return (RC_CLI_NULL_FV); + } + + /* + * bind into ROOT if directory not specified + */ + if (dir_rec == NULL) { + dir_rec = &cli_root_element; + } + + /* + * you must bind only to a directory + */ + if (dir_rec->fv != NULL) { + return (RC_CLI_DIR_INVALID); + } + + rc = cli_bind_entry(name, fv, dir_rec, cmd_rec); + return (rc); +} + + +/** + * NAME + * cli_mkdir + * + * SYNOPSIS + * #include "cli.h" + * RC_CLI_t + * cli_mkdir(char *name, cli_record_t *dir_rec, + * cli_record_t *sub_dir) + * + * DESCRIPTION + * Add a new directory into the specified directory. + * To add a new directory into the ROOT directory, + * specify NULL for the directory pointer. + * + * INPUT PARAMETERS + * name pointer to the direcory name. + * + * dir_rec pointer to the directory record where the + * new subdir is to be added. Use NULL for root. + * + * cmd_rec pointer to the new directory record. + * + * RETURN VALUE + * RC_CLI_OK + * error otherwise + * + * EXAMPLES + * The example below adds a_directory (subdirectory) to the + * root directory. This is a visible entry. + * + * rc = cli_mkdir( "a_directory", NULL, + * &a_directory_record); + * + * + * The example below adds a_sub_directory (subdirectory) to the + * previously created directory 'a_directory_record'. + * + * rc = cli_mkdir( "a_sub_directory", &a_directory_record, + * &a_subdir_record); + * + */ +RC_CLI_t +cli_mkdir (char *name, cli_record_t *dir_rec, + cli_record_t *sub_dir) +{ + RC_CLI_t rc; + + /* + * bind into ROOT if the directory is not specified + */ + if (dir_rec == NULL) { + dir_rec = &cli_root_element; + } + + /* + * must bind only to an existing directory + */ + if (dir_rec->fv != NULL) { + return (RC_CLI_DIR_INVALID); + } + + rc = cli_bind_entry(name, NULL, dir_rec, sub_dir); + return (rc); +} + + +/* + * NAME + * global_command_list + * + * SYNOPSIS + * #include "cli.h" + * static void + * global_command_list(void) + * + * DESCRIPTION + * Displays the global list of commands. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * void + * + */ +static void +global_command_list (void) +{ + uint16_t count; + cli_record_t *cmd_rec; + + count = 0; + + /* + * global list of command + */ + printf("\n"); + cmd_rec = list; + while (cmd_rec != NULL) { + if (count){ printf(", "); } + + printf("%s", cmd_rec->name); + count++; + + /* + * prevent line wrap + */ + if (count >= ENTRIES_PER_LINE) { + printf("\n"); + count = 0; + } + cmd_rec = cmd_rec->cmd_list; + } + + return; +} + + +/* + * NAME + * list_directory + * + * SYNOPSIS + * #include "cli.h" + * static void + * list_directory(void) + * + * DESCRIPTION + * Display the contents of the directory, both commands and + * subdirectories. Directories are enclosed in brackets, [..]. + * + * INPUT PARAMETERS + * none + * + * RETURN VALUE + * void + * + */ +static void +list_directory (void) +{ + uint16_t count; + cli_record_t *cmd_tmp; + + count = 0; + + /* + * first list all directoies + * list directory with brackets: [ directory ] + */ + printf("\n"); + cmd_tmp = current_directory->link2subdir; + while (cmd_tmp != NULL) { + + /* fv == NULL means it is a directory */ + if (cmd_tmp->fv == NULL) { + if (count){ printf(", "); } + + printf("[%s]", cmd_tmp->name); + count++; + + /* + * prevent line wrap + */ + if (count >= ENTRIES_PER_LINE) { + printf("\n"); + count = 0; + } + } + cmd_tmp = cmd_tmp->next_entry; + } + + /* + * list commands + */ + cmd_tmp = current_directory->link2subdir; + while (cmd_tmp != NULL) { + + if (cmd_tmp->fv != NULL) { + if (count){ printf(", "); } + + printf("%s", cmd_tmp->name); + count++; + + /* + * prevent line wrap + */ + if (count >= ENTRIES_PER_LINE) { + printf("\n"); + count = 0; + } + } + cmd_tmp = cmd_tmp->next_entry; + } + + return; +} + + +/* + * NAME + * cli_find_cmd + * + * SYNOPSIS + * #include "cli.h" + * static cli_record_t + * *cli_find_cmd(char *name) + * + * DESCRIPTION + * An internal function to scan the current directory for the + * specified entry. + * + * INPUT PARAMETERS + * name pointer to the string to look for (null terminated). + * + * RETURN VALUE + * NULL string NOT found + * ptr Pointer to entry record if a match was found + * + */ +static cli_record_t +*cli_find_cmd (char *name) +{ + cli_record_t *cmd_rec; + + DEBUG_PRINTF("\nAttempting to Find \"%s\" in directory [%s]\n", + name, current_directory->name ); + + /* + * check for global command search + */ + if (*name == '!') { + DEBUG_PRINTF("\nGlobal command search! \n"); + + name++; + cmd_rec = list; + while (cmd_rec != NULL) { + DEBUG_PRINTF("\nglobal comparing \"%s\" with entry \"%s\"\n", + name, cmd_rec->name); + + if (str_exact(cmd_rec->name, name, CLI_ENTRY_LEN)) { + DEBUG_PRINTF("\nGlobal match found for -%s- \n", name); + return (cmd_rec); + } + cmd_rec = cmd_rec->cmd_list; + } + + printf("\n*Unknown entry \"%s\"\n", name); + return (NULL); + } + + /* + * now compare to existing command and directory entries + */ + cmd_rec = current_directory->link2subdir; + while (cmd_rec != NULL) { + DEBUG_PRINTF("\ncomparing \"%s\" with entry \"%s\"\n", + name, cmd_rec->name); + + if (str_exact(cmd_rec->name, name, CLI_ENTRY_LEN)) { + DEBUG_PRINTF("\nMatch found for -%s- \n", name); + return (cmd_rec); + } + cmd_rec = cmd_rec->next_entry; + } + + /* + * check to see if the user wants to go back one directory + */ + if (str_exact(name, CLI_UP_ONE, 2)) { + DEBUG_PRINTF("\nGo up one dir level \n"); + current_directory = current_directory->parent_dir; + return (NULL); + } + + /* + * check to see if user wants to go to the root directory + */ + if (str_exact(name, CLI_ROOT_DIR, 1)) { + DEBUG_PRINTF("\nGo to root \n"); + current_directory = &cli_root_element; + return (NULL); + } + + /* + * check to see if user wants to list entries + */ + if (str_exact(name, CLI_LIST_DIR, 2)) { + DEBUG_PRINTF("\nList directory \n"); + list_directory(); + return (NULL); + } + + if (str_exact(name, CLI_GLOBAL_LIST, 2)) { + DEBUG_PRINTF("\nGlobal List \n"); + global_command_list(); + return (NULL); + } + + if (str_exact(name, CLI_H, 1) || + str_exact(name, CLI_HELP, 4) || + str_exact(name, CLI_QUESTION, 1)) { + cli_help(); + return (NULL); + } + + /* did not find a match */ + printf("\n*Unknown entry \"%s\"\n", name); + return (NULL); +} + + +/** + * NAME + * cli_engine + * + * SYNOPSIS + * #include "cli.h" + * void + * cli_engine(char *input_string) + * + * DESCRIPTION + * The CLI engine. + * + * INPUT PARAMETERS + * input_string - The string as entered by the user. The cli + * processor will use the first token to match a + * valid directory or command entry. If the + * entry matches with a directory, the current + * directory is changed to that directory. + * + * If the entry is a command, the remainder of the + * string is passed to the user function. The user + * function can then continue parsing token. + * + * RETURN VALUE + * None + * + * : + * For example, a simple CLI process. + * for(;;) { + * gets(input_string); + * cli_engine(input_string); + * } + * + */ +void +cli_engine (char *input_string) +{ + cli_record_t *next_level; + uint32_t i; + char *p2str; + + uint32_t argc; + char *argv[ARGC_MAX]; + + if ((input_string == NULL) || (*input_string == '\0')) { + DEBUG_PRINTF("\nEmpty string entered\n"); + + printf("\n%s >", cli_prompt); + fflush(stdout); + return; + } + + for (i=0; i", cli_prompt); + fflush(stdout); + return; + } + + DEBUG_PRINTF("\n0 input token \"%s\"\n", argv[0]); + + /* + * now pick off parameters. + */ + argc = 1; + for (i=1; ifv != NULL) { + /* + * call users registered function + */ + (next_level->fv)(argc, &argv[0]); + + } else { + /* + * change to the subdirectory + */ + current_directory = next_level; + } + } else { + /* Did not find a match */ + } + + printf("\n%s >", cli_prompt); + fflush(stdout); + return; +} + + + +/** + * NAME + * cli_set_prompt + * + * SYNOPSIS + * #include "cli.h" + * void + * cli_set_prompt(char *prompt) + * + * DESCRIPTION + * This function is used to set a prompt string. + * + * INPUT PARAMETERS + * prompt - pointer to the string prompt + * + * RETURN VALUE + * none + * + */ +void +cli_set_prompt (char *prompt) +{ + if (prompt) { + strncpy(cli_prompt, prompt, CLI_PROMPT_LEN); + cli_prompt[CLI_PROMPT_LEN-1] = '\0'; + } + + return; +} + + + +/** + * NAME + * cli_init + * + * SYNOPSIS + * #include "cli.h" + * RC_CLI_t + * cli_init (cli_init_data_t *init_data) + * + * DESCRIPTION + * This function initializes the CLI facility. All the + * parameters listed in init_data must be provided. + * + * INPUT PARAMETERS + * init_data pointer to initialization information + * prefix - string to be displayed at the + * root directory + * + * RETURN VALUE + * RC_CLI_OK + * error otherwise + * + */ +RC_CLI_t +cli_init (cli_init_data_t *init_data) +{ + RC_CLI_t rc; + + strncpy(cli_prompt, "prompt", CLI_PROMPT_LEN); + cli_prompt[CLI_PROMPT_LEN-1] = '\0'; + + /* + * initialize the ROOT directory + */ + strncpy(cli_root_element.name, init_data->prefix, CLI_ENTRY_LEN); + + cli_root_element.name[CLI_ENTRY_LEN-1] = '\0'; + cli_root_element.fv = NULL; + cli_root_element.parent_dir = &cli_root_element; + cli_root_element.next_entry = NULL; + cli_root_element.link2subdir = NULL; + + /* mark end of hte command list */ + list = NULL; + + +#ifdef CLI_ROOT_DIRS +// rc = cli_mkdir("config", NULL, &cli_config_dir); + rc = cli_mkdir("show", NULL, &cli_show_dir); +// rc = cli_mkdir("clear", NULL, &cli_clear_dir); +// rc = cli_mkdir("operation", NULL, &cli_operation_dir); + rc = cli_mkdir("debug", NULL, &cli_debug_dir); + rc = cli_mkdir("test", NULL, &cli_test_dir); +#endif + + current_directory = &cli_root_element; + return (RC_CLI_OK); +} + diff --git a/dlep_radio_ipv4/cli.h b/dlep_radio_ipv4/cli.h new file mode 100644 index 0000000..62ffb92 --- /dev/null +++ b/dlep_radio_ipv4/cli.h @@ -0,0 +1,148 @@ +/*------------------------------------------------------------------ + * cli.h -- embedded command line interpreter + * + * Copyright (C) 2009 by B. Berry + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __CLI_H__ +#define __CLI_H__ + +#include + +/* + * Public directories that applications can register with. + * Enable define for these root directories. Once defined, + * apps can register in this directory structure. If not, + * applications register to the root directory. + */ +#define CLI_ROOT_DIRS ( 1 ) + + +/* + * This is the maximum number of parameters that can be passed + * to the application function. The parameters are passed to + * the application in the argument count and argument value + * format. + */ +#define ARGC_MAX ( 11 ) + + +/* + * Number of characters in an entry's name, for directories + * and commands + */ +#define CLI_ENTRY_LEN ( 34 ) + + +/* + * return codes + */ +typedef enum { + RC_CLI_OK = 0, + RC_CLI_NULL_NAME, + RC_CLI_NULL_FV, + RC_CLI_DUPLICATE, + RC_CLI_RECORD_CORRUPT, + RC_CLI_NULL_CMD, + RC_CLI_DIR_INVALID, +} RC_CLI_t; + + + +/* + * type def for call back function to process user command parsers + */ +typedef void (*cli_funcvar_t)(uint32_t argc, char *argv[]); + + +/* + * The structure for a directory or command entry. + */ +typedef struct t_nodal_record { + struct t_nodal_record *cmd_list; + char name[CLI_ENTRY_LEN+1]; + cli_funcvar_t fv; + struct t_nodal_record *parent_dir; + struct t_nodal_record *next_entry; + struct t_nodal_record *link2subdir; +} cli_record_t; + + + +/* + * A few common root command directories + * if enabled. + */ +#ifdef CLI_ROOT_DIRS +extern cli_record_t cli_config_dir; +extern cli_record_t cli_show_dir; +extern cli_record_t cli_clear_dir; +//extern cli_record_t cli_operation_dir; +extern cli_record_t cli_debug_dir; +extern cli_record_t cli_test_dir; +#endif + + +/* + * The structure required to initialize the CLI facility. + * It must be initialized before use. + */ +typedef struct { + char prefix[CLI_ENTRY_LEN]; +} cli_init_data_t; + + + +/* + * prototypes + */ + +/* add a command */ +extern RC_CLI_t cli_mkcmd(char *name, + cli_funcvar_t fv, + cli_record_t *dir_rec, + cli_record_t *cmd_rec); + + +/* make a directory */ +extern RC_CLI_t cli_mkdir(char *name, + cli_record_t *dir_rec, + cli_record_t *sub_dir); + + +/* drive the cli */ +extern void cli_engine(char *input_string); + + +/* set the prompt string */ +void cli_set_prompt(char *prompt); + + +/* init function */ +extern RC_CLI_t cli_init(cli_init_data_t *init_data); + +#endif /* __CLI_H__ */ + diff --git a/dlep_radio_ipv4/config_examples/my_radio_discovery.cfg b/dlep_radio_ipv4/config_examples/my_radio_discovery.cfg new file mode 100644 index 0000000..8aaaa0a --- /dev/null +++ b/dlep_radio_ipv4/config_examples/my_radio_discovery.cfg @@ -0,0 +1,60 @@ +# +# DLEP Sim Radio Config File +# +SIM_NAME radio_2 + +#DEBUG_FLAGS 0xFF + +# When the MANUAL_START is enabled, the user +# will need to enter "start" on the simulator +# cli to start the simulator. +#MANUAL_START +DISCOVERY_START + +# string for the peer type TLV +TYPE_DESCRIPTION DLEP_Radio_Sim_2 + +LOCAL_UDP_PORT 38681 +LOCAL_TCP_PORT 38682 +LOCAL_IPV4 9.0.0.179 + +ROUTER_UDP_PORT 38677 + +ROUTER_TCP_PORT 38675 +ROUTER_IPV4 9.1.1.201 + +LOCAL_ID 2222 + + + +### +### Add counters and timers and thresholds +### + +# The node heartbeat interval is only used by the client. The +# server takes the clients value. Time units are seconds. +DLEP_PEER_HEARTBEAT_INTERVAL 5 +DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD 2 + + +# The heuristics to retry a lost session init ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_UP_ACK_TMO 1000 +DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD 4 + + +# The interval to send metrics. +# Time units are in milliseconds. +DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 2000 +#DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 0 + + +# The heuristics to retry a lost session term ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_DOWN_ACK_TMO 1000 +DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD 4 + +# +# end config +# + diff --git a/dlep_radio_ipv4/config_examples/my_radio_discovery_2.cfg b/dlep_radio_ipv4/config_examples/my_radio_discovery_2.cfg new file mode 100644 index 0000000..f70d272 --- /dev/null +++ b/dlep_radio_ipv4/config_examples/my_radio_discovery_2.cfg @@ -0,0 +1,60 @@ +# +# DLEP Sim Radio Config File +# +SIM_NAME radio_2 + +DEBUG_FLAGS 0xFF + +# When the MANUAL_START is enabled, the user +# will need to enter "start" on the simulator +# cli to start the simulator. +#MANUAL_START +DISCOVERY_START + +# string for the peer type TLV +TYPE_DESCRIPTION DLEP_Radio_Sim_2 + +LOCAL_UDP_PORT 38700 +LOCAL_TCP_PORT 38710 +LOCAL_IPV4 20.1.1.4 + +ROUTER_UDP_PORT 38777 + +ROUTER_TCP_PORT 38775 +ROUTER_IPV4 9.1.1.202 + +LOCAL_ID 2222 + + + +### +### Add counters and timers and thresholds +### + +# The node heartbeat interval is only used by the client. The +# server takes the clients value. Time units are seconds. +DLEP_PEER_HEARTBEAT_INTERVAL 5 +DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD 2 + + +# The heuristics to retry a lost session init ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_UP_ACK_TMO 1000 +DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD 4 + + +# The interval to send metrics. +# Time units are in milliseconds. +DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 2000 +#DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 0 + + +# The heuristics to retry a lost session term ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_DOWN_ACK_TMO 1000 +DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD 4 + +# +# end config +# + diff --git a/dlep_radio_ipv4/config_examples/uut.cfg b/dlep_radio_ipv4/config_examples/uut.cfg new file mode 100644 index 0000000..060631b --- /dev/null +++ b/dlep_radio_ipv4/config_examples/uut.cfg @@ -0,0 +1,64 @@ +# +# DLEP Sim Radio Config File +# +SIM_NAME Radio_RT-1 + +DEBUG_FLAGS 0xFF +#DEBUG_FLAGS 0x00 + +# When the MANUAL_START is enabled, the user +# will need to enter "start" on the simulator +# cli to start the simulator. +MANUAL_START +DISCOVERY_START + +# string for the peer type TLV +TYPE_DESCRIPTION DLEP_Radio_RT2 + +LOCAL_UDP_PORT 854 +LOCAL_TCP_PORT 11111 +#LOCAL_PORT 5657 +LOCAL_IPV4 17.0.0.21 + +#Server pot values + +ROUTER_UDP_PORT 11113 +ROUTER_TCP_PORT 11114 +#ROUTER_PORT 1314 +ROUTER_IPV4 17.0.0.24 + +LOCAL_ID 1025 + + + +### +### Add counters and timers and thresholds +### + +# The node heartbeat interval is only used by the client. The +# server takes the clients value. Time units are seconds. +DLEP_PEER_HEARTBEAT_INTERVAL 5 +DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD 2 + + +# The heuristics to retry a lost session init ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_UP_ACK_TMO 2000 +DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD 4 + + +# The interval to send metrics. +# Time units are in milliseconds. +#DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 2000 +DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 0 + + +# The heuristics to retry a lost session term ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_DOWN_ACK_TMO 2000 +DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD 4 + +# +# end config +# + diff --git a/dlep_radio_ipv4/dlep_buffers.c b/dlep_radio_ipv4/dlep_buffers.c new file mode 100644 index 0000000..892a9ca --- /dev/null +++ b/dlep_radio_ipv4/dlep_buffers.c @@ -0,0 +1,141 @@ +/*---------------------------------------------------------------------- + * dlep_buffers.c -- abstracted buffer routines + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include + +#include "safe_types.h" +#include "dlep_debug.h" + +#include "dlep_buffers.h" + +/* + * Porting: The implementation of the functions in this file can be + * changed to platform specific buffer management APIs. + */ + + +#define MAX_BUFFER_SIZE ( 1400 ) + + +/** + * NAME + * dlep_allocate_transmit_buffer + * + * SYNOPSIS + * uint8_t + * *dlep_allocate_transmit_buffer(void) + * + * DESCRIPTION + * This function is used to allocate a buffer for transmit + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * Pointer to a buffer or NULL if no buffer is available. + * + */ +uint8_t +*dlep_allocate_transmit_buffer (void) +{ + void *ptr; + + ptr = malloc(MAX_BUFFER_SIZE); + return (ptr); +} + + +/** + * NAME + * dlep_allocate_receive_buffer + * + * SYNOPSIS + * uint8_t + * *dlep_allocate_receive_buffer(void) + * + * DESCRIPTION + * This function is used to allocate a receive buffer + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * Pointer to a buffer or NULL if no buffer is available. + * + */ +uint8_t +*dlep_allocate_receive_buffer (void) +{ + void *ptr; + + ptr = malloc(MAX_BUFFER_SIZE); + return (ptr); +} + + +/** + * NAME + * dlep_free_buffer + * + * SYNOPSIS + * void + * *dlep_free_buffer(void) + * + * DESCRIPTION + * This routine frees a previously allocated (transmit and + * receive) buffer. + * + * INPUT PARAMETERS + * ptr - This is a pointer to the buffer + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_free_buffer (void *ptr) +{ + if (ptr) { + free(ptr); + } + return; +} + diff --git a/dlep_radio_ipv4/dlep_buffers.h b/dlep_radio_ipv4/dlep_buffers.h new file mode 100644 index 0000000..f868081 --- /dev/null +++ b/dlep_radio_ipv4/dlep_buffers.h @@ -0,0 +1,48 @@ +/*---------------------------------------------------------------------- + * dlep_buffers.h -- abstracted buffer routines + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_BUFFERS_H__ +#define __DLEP_BUFFERS_H__ + +#include "safe_types.h" + + +extern uint8_t +*dlep_allocate_transmit_buffer(void); + +extern uint8_t +*dlep_allocate_receive_buffer(void); + +extern void +dlep_free_buffer(void *ptr); + +#endif + diff --git a/dlep_radio_ipv4/dlep_client_message_parser.c b/dlep_radio_ipv4/dlep_client_message_parser.c new file mode 100644 index 0000000..8965ceb --- /dev/null +++ b/dlep_radio_ipv4/dlep_client_message_parser.c @@ -0,0 +1,377 @@ +/*---------------------------------------------------------------------- + * dlep_client_message_parser.c -- client message parsing routine + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include + +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_config.h" + +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" + +#include "dlep_client_neighbor_fsm.h" +#include "dlep_client_peer_fsm.h" + +#include "dlep_client_message_parser.h" + +void +rfc5444_show_signal_scratch_pad ( + rfc5444_message_scratch_pad_t *msg_scratch_pad) +{ + char *p2text; + + if (!msg_scratch_pad) { + return; + } + + switch (msg_scratch_pad->message_code) { + case RFC5444_SIG_ATT_PEER_DISCOVERY: + p2text = "RFC5444_SIG_ATT_PEER_DISCOVERY"; + break; + + case RFC5444_SIG_PEER_OFFER: + p2text = "RFC5444_SIG_PEER_OFFER"; + break; + } + + + printf("Signal Scratch Pad \n"); + + printf(" signal code=%u %s \n", + msg_scratch_pad->message_code, + p2text); +} + +/** + * NAME + * dlep_client_message_parser + * + * SYNOPSIS + * void + * dlep_client_message_parser(uint16_t message_code, + * uint16_t sequence_number, + * void *context_ptr) + * + * DESCRIPTION + * This function is used by the client application to handle the + * initial parse of a DLEP message. Only the valid set of DLEP + * messages expected by the client are processed. + * + * INPUT PARAMETERS + * message_code - This is the message code representing the + * message to be parsed. + * + * sequence_number - The sequence number of the message + * + * context_ptr - The pointer to the message scratch pad + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_client_message_parser (uint16_t message_code, + uint16_t sequence_number, + void *context_ptr, int signal) +{ + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *scratch_pad; + dlep_context_neighbor_t *p2neighbor; + + p2peer = context_ptr; + if (!p2peer) { + return; + } + + p2peer->status_code = RFC5444_SUCCESS; + + scratch_pad = &p2peer->message_scratch_pad; + + scratch_pad->message_code = message_code; + + scratch_pad->sequence = sequence_number; + scratch_pad->sequence_present = TRUE; + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + if (signal) { + rfc5444_show_signal_scratch_pad(scratch_pad); + } else { + rfc5444_show_message_scratch_pad(scratch_pad); + } + } + + /* + * now drive the state machine by the message type + */ + + if (signal) { + switch (message_code) { + + case RFC5444_SIG_ATT_PEER_DISCOVERY: + dlep_client_fsm_engine(peer_att_discovery_e, p2peer, NULL); + break; + /* this signal client does not receive */ + case RFC5444_SIG_PEER_OFFER: + dlep_client_fsm_engine(peer_offer_e, p2peer, NULL); + DLEP_DEBUG("%s-%u DLEP unexpected signal, signal_code=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + message_code); + break; + default: + DLEP_DEBUG("%s-%u DLEP unknown signal, signal_code=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + message_code); + break; + } + } + else { + switch (message_code) { + + case RFC5444_MSG_PEER_INIT_REQ: + dlep_client_fsm_engine(peer_init_request_e, p2peer, NULL); + break; + + case RFC5444_MSG_PEER_HEARTBEAT: + dlep_client_fsm_engine(peer_heartbeat_e, p2peer, NULL); + break; + + case RFC5444_MSG_PEER_UPDATE_REQ: + dlep_client_fsm_engine(peer_update_request_e, p2peer, NULL); + break; + + case RFC5444_MSG_PEER_UPDATE_RES: + dlep_client_fsm_engine(peer_update_response_e,p2peer, NULL); + break; + + case RFC5444_MSG_PEER_TERM_REQ: + dlep_client_fsm_engine(peer_term_request_e, p2peer, NULL); + break; + + case RFC5444_MSG_PEER_TERM_RES: + dlep_client_fsm_engine(peer_term_response_e, p2peer, NULL); + break; + + case RFC5444_MSG_NEIGHBOR_UP_RES: + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, + scratch_pad->mac_address); + if (!p2neighbor) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + scratch_pad->mac_address[0], + scratch_pad->mac_address[1], + scratch_pad->mac_address[2], + scratch_pad->mac_address[3], + scratch_pad->mac_address[4], + scratch_pad->mac_address[5]); + } else { + dlep_client_neighbor_fsm_engine(neighbor_init_ack_e, + p2peer, p2neighbor); + } + break; + + case RFC5444_MSG_NEIGHBOR_METRICS: + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, + scratch_pad->mac_address); + if (!p2neighbor) { + printf("\nRFC5444_MSG_NEIGHBOR_METRICS: Received with ERROR"); + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + scratch_pad->mac_address[0], + scratch_pad->mac_address[1], + scratch_pad->mac_address[2], + scratch_pad->mac_address[3], + scratch_pad->mac_address[4], + scratch_pad->mac_address[5]); + } else { + printf("\nRFC5444_MSG_NEIGHBOR_METRICS: Received "); + dlep_client_neighbor_fsm_engine(neighbor_update_ack_e, + p2peer, p2neighbor); + } + break; + + case RFC5444_MSG_NEIGHBOR_ADDRESS_RES: + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, + scratch_pad->mac_address); + if (!p2neighbor) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + scratch_pad->mac_address[0], + scratch_pad->mac_address[1], + scratch_pad->mac_address[2], + scratch_pad->mac_address[3], + scratch_pad->mac_address[4], + scratch_pad->mac_address[5]); + } else { + dlep_client_neighbor_fsm_engine(neighbor_update_addr_res_e, + p2peer, p2neighbor); + } + break; + + case RFC5444_MSG_NEIGHBOR_DOWN_REQ: + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, + scratch_pad->mac_address); + if (!p2neighbor) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + scratch_pad->mac_address[0], + scratch_pad->mac_address[1], + scratch_pad->mac_address[2], + scratch_pad->mac_address[3], + scratch_pad->mac_address[4], + scratch_pad->mac_address[5]); + } else { + dlep_client_neighbor_fsm_engine(neighbor_term_e, + p2peer, p2neighbor); + } + break; + + case RFC5444_MSG_NEIGHBOR_DOWN_RES: + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, + scratch_pad->mac_address); + if (!p2neighbor) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + scratch_pad->mac_address[0], + scratch_pad->mac_address[1], + scratch_pad->mac_address[2], + scratch_pad->mac_address[3], + scratch_pad->mac_address[4], + scratch_pad->mac_address[5]); + } else { + dlep_client_neighbor_fsm_engine(neighbor_term_ack_e, + p2peer, p2neighbor); + } + break; + + + case RFC5444_MSG_LINK_CHAR_REQ: + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, + scratch_pad->mac_address); + if (!p2neighbor) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + scratch_pad->mac_address[0], + scratch_pad->mac_address[1], + scratch_pad->mac_address[2], + scratch_pad->mac_address[3], + scratch_pad->mac_address[4], + scratch_pad->mac_address[5]); + } else { + dlep_client_neighbor_fsm_engine(neighbor_link_char_req_e, + p2peer, p2neighbor); + } + break; + + + /* messages that the client peer can not receive */ + case RFC5444_MSG_PEER_INIT_RES: + DLEP_DEBUG("%s-%u DLEP unexpected message, msg_code=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + message_code); + printf("\nUnexpected message sending termination message\n"); + p2peer->status_code = RFC5444_MSG_UNEXPECTED; + send_dlep_peer_termination(p2peer); + break; + case RFC5444_MSG_NEIGHBOR_UP_REQ: + DLEP_DEBUG("%s-%u DLEP unexpected message, msg_code=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + message_code); + printf("\nUnexpected message sending termination message\n"); + p2peer->status_code = RFC5444_MSG_UNEXPECTED; + send_dlep_peer_termination(p2peer); + break; + case RFC5444_MSG_LINK_CHAR_RES: + DLEP_DEBUG("%s-%u DLEP unexpected message, msg_code=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + message_code); + printf("\nUnexpected message sending termination message\n"); + p2peer->status_code = RFC5444_MSG_UNEXPECTED; + send_dlep_peer_termination(p2peer); + break; + + default: + DLEP_DEBUG("%s-%u DLEP unknown message, msg_code=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + message_code); + printf("\nUnknown message sending termination message\n"); + p2peer->status_code = RFC5444_MSG_UNKNOWN; + send_dlep_peer_termination(p2peer); + break; + } + + } + rfc5444_scrub_message_scratch_pad(scratch_pad); + + return; +} + diff --git a/dlep_radio_ipv4/dlep_client_message_parser.h b/dlep_radio_ipv4/dlep_client_message_parser.h new file mode 100644 index 0000000..e3580f8 --- /dev/null +++ b/dlep_radio_ipv4/dlep_client_message_parser.h @@ -0,0 +1,45 @@ +/*---------------------------------------------------------------------- + * dlep_client_message_parser.h -- Message parsing routines + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CLIENT_MESSAGE_PARSER_H__ +#define __DLEP_CLIENT_MESSAGE_PARSER_H__ + +#include "safe_types.h" +#include "dlep_context_peer.h" + + +extern void +dlep_client_message_parser(uint16_t message_code, + uint16_t sequence_number, + void *context_ptr,int signal); + +#endif + diff --git a/dlep_radio_ipv4/dlep_client_metrics.c b/dlep_radio_ipv4/dlep_client_metrics.c new file mode 100644 index 0000000..366b7aa --- /dev/null +++ b/dlep_radio_ipv4/dlep_client_metrics.c @@ -0,0 +1,206 @@ +/*---------------------------------------------------------------------- + * dlep_client_metrics.c -- dynamic client metrics + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include + +#include "safe_types.h" +#include "dlep_context_neighbor.h" + + +static int32_t metric_index = 0; +static int32_t metric_direction = 1; + + +/** + * NAME + * dlep_client_metrics + * + * SYNOPSIS + * void + * dlep_client_metrics(dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to insert a dynamic nature to the + * metrics for test. + * + * INPUT PARAMETERS + * p2neighbor - pointer to the neighbor + * + * OUTPUT PARAMETERS + * p2neighbor - neighbor metrics updated + * + * RETURN VALUE + * none + * + */ +void +dlep_client_metrics (dlep_context_neighbor_t *p2neighbor) +{ + if (!p2neighbor) { + return; + } + + /* + * could be more creative with file inputs + * or radio models. + */ + switch (metric_index) { + case 0: + p2neighbor->rlq_rx = 100; + p2neighbor->rlq_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_rx = 0; + p2neighbor->cdr_tx = 0; + p2neighbor->mdr_rx = 110000000; + p2neighbor->mdr_tx = 110000000; + break; + + case 1: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 11000000; + p2neighbor->cdr_rx = 11000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + + case 2: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 22000000; + p2neighbor->cdr_rx = 22000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + + case 3: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 33000000; + p2neighbor->cdr_rx = 33000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + + case 4: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 44000000; + p2neighbor->cdr_rx = 44000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_tx = 110000000; + break; + + case 5: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 55000000; + p2neighbor->cdr_rx = 55000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + + case 6: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 66000000; + p2neighbor->cdr_rx = 66000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + + case 7: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 77000000; + p2neighbor->cdr_rx = 77000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + + case 8: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 88000000; + p2neighbor->cdr_rx = 88000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + + case 9: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 99000000; + p2neighbor->cdr_rx = 99000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + } + + if (metric_index >= 9) { + metric_direction = -1; + } else if (metric_index == 0) { + metric_direction = 1; + } + + metric_index += metric_direction; + return; +} + diff --git a/dlep_radio_ipv4/dlep_client_metrics.h b/dlep_radio_ipv4/dlep_client_metrics.h new file mode 100644 index 0000000..7efc8da --- /dev/null +++ b/dlep_radio_ipv4/dlep_client_metrics.h @@ -0,0 +1,43 @@ +/*---------------------------------------------------------------------- + * dlep_client_metrics.h -- dynamic client metrics + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CLIENT_METRICS_H__ +#define __DLEP_CLIENT_METRICS_H__ + +#include "safe_types.h" + + +extern void +dlep_client_metrics(dlep_context_neighbor_t *p2neighbor); + + +#endif + diff --git a/dlep_radio_ipv4/dlep_client_neighbor_event_handlers.c b/dlep_radio_ipv4/dlep_client_neighbor_event_handlers.c new file mode 100644 index 0000000..14ab8f6 --- /dev/null +++ b/dlep_radio_ipv4/dlep_client_neighbor_event_handlers.c @@ -0,0 +1,1114 @@ +/*---------------------------------------------------------------------- + * dlep_client_neighbor_event_handlers.c -- client neighbor event handlers + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include + +#include "safe_types.h" +#include "time_units.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_sim_options.h" +#include "dlep_debug.h" +#include "dlep_porter.h" +#include "dlep_config.h" +#include "dlep_message_builder.h" + +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" + +#include "dlep_client_timer.h" +#include "dlep_client_neighbor_fsm.h" +#include "dlep_client_peer_fsm.h" + +#include "dlep_client_metrics.h" + +#include "dlep_client_neighbor_event_handlers.h" + + + +/** + * NAME + * initializing_neighbor_up_ack + * + * SYNOPSIS + * RC_FSM_t + * initializing_neighbor_up_ack(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the neighbor up ack message + * is received during the initializing state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +initializing_neighbor_up_ack (void *p2event, void *p2parm) +{ + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (msg_scratch_pad->status_code_present) { + if (msg_scratch_pad->status_code == 0) { + //send_dlep_neighbor_up_ack(p2peer,p2neighbor); + //printf("\n SENT DLEP NEIGHBOR ACK \n"); + printf("success dest ack received\n"); + /* 0 is a success code */ + } else { + printf("Status code is not success\n"); + dlep_neighbor_clear(p2neighbor); + dlep_neighbor_remove(p2peer, &p2neighbor); + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u return code %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + msg_scratch_pad->status_code); + } + } + } + else { + printf("status tlv is mandatory , is not present \n"); + } + + +#if 0 + if (p2neighbor->expected_neighbor_init_ack_sequence != + msg_scratch_pad->sequence) { + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + "unexpected neighbor up ack \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor up ack rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + + stw_system_timer_stop(&p2neighbor->neighbor_init_ack_tmr); + + /* + * conditionally start the periodic timer to generate metrics + */ + /* if (p2peer->neighbor_update_interval_tmo) { + (void)stw_system_timer_start(&p2neighbor->neighbor_update_interval_tmr, + p2peer->neighbor_update_interval_tmo, + p2peer->neighbor_update_interval_tmo, + &dlep_neighbor_metrics_interval_tmr, + (void *)p2neighbor); + } */ + + return (RC_FSM_OK); +} + + +/** + * NAME + * initializing_neighbor_up_ack_tmo + * + * SYNOPSIS + * RC_FSM_t + * initializing_neighbor_up_ack_tmo(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the neighbor up ack + * message was not received within the guard timer during + * the initializing state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_STOP_PROCESING + * + */ +RC_FSM_t +initializing_neighbor_up_ack_tmo (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } +// printf("\n INSIDE START initializing_neighbor_up_ack_tmo"); + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + p2neighbor->neighbor_up_ack_tmo_count++; + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor up ack missed, count=%u threshold=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5], + p2neighbor->neighbor_up_ack_tmo_count, + p2peer->neighbor_up_missed_ack_threshold); + } + + if (p2neighbor->neighbor_up_ack_tmo_count >= + p2peer->neighbor_up_missed_ack_threshold) { +// printf("\n INSIDE neighbor_up_missed_ack_threshold "); + /* stop timers and clear context */ + dlep_neighbor_clear(p2neighbor); + dlep_neighbor_remove(p2peer, &p2neighbor); + return (RC_FSM_STOP_PROCESSING); + } +// printf("\n EXIT initializing_neighbor_up_ack_tmo "); + //send_dlep_neighbor_up(p2peer, p2neighbor); + return (RC_FSM_OK); +} + + + +RC_FSM_t +initializing_neighbor_update_ack (void *p2event, void *p2parm) +{ + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (msg_scratch_pad->cws_present) { + msg_scratch_pad->cws_present = FALSE; + p2neighbor->mrw = msg_scratch_pad->mrw; + printf("\n DLEP NEIGHBOR ACK : Credit Accepted " + "Client MRW %llu , Router MRW %llu \n", + p2neighbor->mrw, msg_scratch_pad->mrw); + // printf("\n DLEP NEIGHBOR ACK : Credit Not Matches : " + // "Client MRW %llu , Router MRW %llu \n", + // p2neighbor->mrw, msg_scratch_pad->mrw); + stw_system_timer_stop(&p2neighbor->neighbor_update_ack_tmr); + } else if (msg_scratch_pad->credit_req_present) { + msg_scratch_pad->credit_req_present = FALSE; + if (p2neighbor->CREDIT_NOT_SUPPORTED) { + send_dlep_neighbor_credit_reject(p2peer, p2neighbor); + } else { + p2neighbor->cgr = 65534; + send_dlep_neighbor_credit_grant_req(p2peer, p2neighbor); + } + } else if (msg_scratch_pad->status_code_present) { + msg_scratch_pad->status_code_present = FALSE; + if (msg_scratch_pad->status_code == 0) { + printf("\n DLEP NEIGHBOR ACK : Credit Not Supported \n"); + /* 0 is a success code */ + } else { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u return code %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + msg_scratch_pad->status_code); + } + } + stw_system_timer_stop(&p2neighbor->neighbor_update_ack_tmr); + } else { + printf("\n DLEP NEIGHBOR ACK : Unknown TLV received \n"); + } + + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor up ack rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + +// stw_system_timer_stop(&p2neighbor->neighbor_update_ack_tmr); + + + return (RC_FSM_OK); +} + + +/** + * NAME + * initializing_neighbor_update_ack_tmo + * + * SYNOPSIS + * RC_FSM_t + * initializing_neighbor_update_ack_tmo(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the neighbor update ack + * message was not received within the guard timer during + * the update state. This is currently used only for Credit Grant + * Request. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_STOP_PROCESING + * + */ +RC_FSM_t +initializing_neighbor_update_ack_tmo (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } +// printf("\n INSIDE START initializing_neighbor_up_ack_tmo"); + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + p2neighbor->neighbor_update_ack_tmo_count++; + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor up ack missed, count=%u threshold=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5], + p2neighbor->neighbor_update_ack_tmo_count, + p2peer->neighbor_up_missed_ack_threshold); + } + + /* Leveraging the same threshold of Neighbor up */ + if (p2neighbor->neighbor_update_ack_tmo_count >= + p2peer->neighbor_up_missed_ack_threshold) { +// printf("\n INSIDE neighbor_up_missed_ack_threshold "); + /* stop timers and clear context */ + dlep_neighbor_clear(p2neighbor); + dlep_neighbor_remove(p2peer, &p2neighbor); + return (RC_FSM_STOP_PROCESSING); + } +// printf("\n EXIT initializing_neighbor_up_ack_tmo "); + send_dlep_neighbor_credit_grant_req(p2peer, p2neighbor); + return (RC_FSM_OK); +} + + +/** + * NAME + * update_neighbor_update_interval + * + * SYNOPSIS + * RC_FSM_t + * update_neighbor_update_interval(void *p2event, void *p2parm) + * + * DESCRIPTION + * The event handler is invoked when the neighbor update interval + * timer has expired indicating that it is time to send + * neighbor metrics. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + */ +RC_FSM_t +update_neighbor_update_interval (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + /* dynamically tweak metrics for testing */ +#ifdef DYNAMIC_METRICS_ENABLED + dlep_client_metrics(p2neighbor); +#endif + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + return (RC_FSM_OK); +} + + +/** + * NAME + * update_neighbor_update_address_response + * + * SYNOPSIS + * RC_FSM_t + * update_neighbor_update_address_response(void *p2event, void *p2parm) + * + * DESCRIPTION + * The event handler is invoked when the neighbor update address + * response was received. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + */ +RC_FSM_t +update_neighbor_update_address_response (void *p2event, void *p2parm) +{ + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor address response rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + + return (RC_FSM_OK); +} + + +/** + * NAME + * update_neighbor_down_request + * + * SYNOPSIS + * RC_FSM_t + * update_neighbor_down_request(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked upon user or system request to + * terminate the neighbor. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +update_neighbor_down_request (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " user-system neighbor down request \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + + stw_system_timer_stop(&p2neighbor->neighbor_update_interval_tmr); + + send_dlep_neighbor_down(p2peer, p2neighbor); + + /* + * conditionally start the periodic timer to guard against + * lost term acks + */ + if (p2peer->neighbor_down_ack_tmo) { + (void)stw_system_timer_start(&p2neighbor->neighbor_term_ack_tmr, + p2peer->neighbor_down_ack_tmo, + p2peer->neighbor_down_ack_tmo, + &dlep_neighbor_term_ack_tmr, + (void *)p2neighbor); + } + + return (RC_FSM_OK); +} + + +/** + * NAME + * update_neighbor_down + * + * SYNOPSIS + * RC_FSM_t + * update_neighbor_down(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the neighbor down + * message is received during the synchronized state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_STOP_PROCESING + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +update_neighbor_down (void *p2event, void *p2parm) +{ + RC_FSM_t rc_fsm; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor down rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + + send_dlep_neighbor_down_ack(p2peer, p2neighbor); + + /* stop timers and clear context */ + dlep_neighbor_clear(p2neighbor); + dlep_neighbor_remove(p2peer, &p2neighbor); + rc_fsm = RC_FSM_STOP_PROCESSING; + return (rc_fsm); +} + + +/** + * NAME + * update_link_char_request + * + * SYNOPSIS + * RC_FSM_t + * update_link_char_request(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the link characteristic + * request is received during the synchronized state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * p2neighbor->cdr = msg_scratch_pad->cdr; + * p2neighbor->latency = msg_scratch_pad->latency; + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_STOP_PROCESING + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +update_link_char_request (void *p2event, void *p2parm) +{ + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " link char request \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + + p2neighbor->cdr_tx = msg_scratch_pad->cdr_tx; + + p2neighbor->latency = msg_scratch_pad->latency; + + send_dlep_neighbor_link_char_response(p2peer, p2neighbor); + + return (RC_FSM_OK); +} + + + +/** + * NAME + * terminating_neighbor_down_ack + * + * SYNOPSIS + * RC_FSM_t + * terminating_neighbor_down_ack(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the neighbor down + * ack is received during the terminating state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_STOP_PROCESSING + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +terminating_neighbor_down_ack (void *p2event, void *p2parm) +{ + RC_FSM_t rc_fsm; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + if (p2neighbor->expected_neighbor_link_char_response_sequence != + msg_scratch_pad->sequence) { + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " unexpected neighbor down ack \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor down ack \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + + /* stop timers and clear context */ + stw_system_timer_stop(&p2neighbor->neighbor_term_ack_tmr); + dlep_neighbor_clear(p2neighbor); + dlep_neighbor_remove(p2peer, &p2neighbor); + rc_fsm = RC_FSM_STOP_PROCESSING; + return (rc_fsm); +} + + +/** + * NAME + * terminating_neighbor_down_ack_tmo + * + * SYNOPSIS + * RC_FSM_t + * terminating_neighbor_down_ack_tmo(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the neighbor down + * ack was not received within the guard timer during the + * terminating state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_STOP_PROCESSING + * + */ +RC_FSM_t +terminating_neighbor_down_ack_tmo (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + p2neighbor->neighbor_down_ack_tmo_count++; + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor down ack missed, count=%u threshold=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5], + p2neighbor->neighbor_down_ack_tmo_count, + p2peer->neighbor_down_missed_ack_threshold); + } + + if (p2neighbor->neighbor_down_ack_tmo_count >= + p2peer->neighbor_down_missed_ack_threshold) { + /* stop timers and clear context */ + dlep_neighbor_clear(p2neighbor); + dlep_neighbor_remove(p2peer, &p2neighbor); + return (RC_FSM_STOP_PROCESSING); + } + + //send_dlep_neighbor_down(p2peer, p2neighbor); + return (RC_FSM_OK); +} + + diff --git a/dlep_radio_ipv4/dlep_client_neighbor_event_handlers.h b/dlep_radio_ipv4/dlep_client_neighbor_event_handlers.h new file mode 100644 index 0000000..678509b --- /dev/null +++ b/dlep_radio_ipv4/dlep_client_neighbor_event_handlers.h @@ -0,0 +1,75 @@ +/*---------------------------------------------------------------------- + * dlep_client_neighbor_event_handlers.h -- client neighbor state machine + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reseved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CLIENT_SESSION_EVENT_HANDLERS_H__ +#define __DLEP_CLIENT_SESSION_EVENT_HANDLERS_H__ + +#include "safe_types.h" +#include "fsm.h" + + + +extern RC_FSM_t +initializing_neighbor_up_ack(void *p2event, void *p2parm); + +extern RC_FSM_t +initializing_neighbor_up_ack_tmo(void *p2event, void *p2parm); + +extern RC_FSM_t +initializing_neighbor_update_ack(void *p2event, void *p2parm); + +extern RC_FSM_t +initializing_neighbor_update_ack_tmo(void *p2event, void *p2parm); + +extern RC_FSM_t +update_neighbor_update_interval(void *p2event, void *p2parm); + +extern RC_FSM_t +update_neighbor_update_address_response(void *p2event, void *p2parm); + +extern RC_FSM_t +update_neighbor_down_request(void *p2event, void *p2parm); + +extern RC_FSM_t +update_neighbor_down(void *p2event, void *p2parm); + +extern RC_FSM_t +update_link_char_request(void *p2event, void *p2parm); + +extern RC_FSM_t +terminating_neighbor_down_ack(void *p2event, void *p2parm); + +extern RC_FSM_t +terminating_neighbor_down_ack_tmo(void *p2event, void *p2parm); + + +#endif + diff --git a/dlep_radio_ipv4/dlep_client_neighbor_fsm.c b/dlep_radio_ipv4/dlep_client_neighbor_fsm.c new file mode 100644 index 0000000..b0d1969 --- /dev/null +++ b/dlep_radio_ipv4/dlep_client_neighbor_fsm.c @@ -0,0 +1,491 @@ +/*---------------------------------------------------------------------- + * dlep_client_neighbor_fsm.c -- client neighbor state machine + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include + +#include "fsm.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_config.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" + +#include "dlep_client_neighbor_event_handlers.h" +#include "dlep_client_timer.h" + +#include "dlep_client_neighbor_fsm.h" + + + +/* + * normalized client neighbor event description + */ +static event_description_t normalized_event_table[] = + {{neighbor_init_ack_e, "Neighbor Up ACK Event"}, + {neighbor_up_ack_tmo_e, "Neighbor Up ACK TMO Event"}, + {neighbor_update_metrics_interval_e, "Internal Metrics Event"}, + {neighbor_update_ack_e, "Neighbor Update ACK Event"}, + {neighbor_update_ack_tmo_e, "Neighbor Update ACK TMO Event"}, + {neighbor_update_addr_res_e, "Neighbor Update Address Response Event"}, + {neighbor_term_user_req_e, "Neighbor Down User Request Event"}, + {neighbor_term_e, "Neighbor Down Recieved Event"}, + {neighbor_term_ack_e, "Neighbor Down ACK Event"}, + {neighbor_down_ack_tmo_e, "Neighbor Down ACK TMO Event"}, + {neighbor_link_char_req_e, "Neighbor Link Char Request Event"}, + {FSM_NULL_EVENT_ID, NULL} }; + + +/* + * normalized neighbor state description + */ +static state_description_t normalized_state_table[] = + {{neighbor_initializing_s, "Initializing` State"}, + {neighbor_update_s, "Update State"}, + {neighbor_terminating_s, "Terminating State"}, + {FSM_NULL_STATE_ID, NULL} }; + + +/* + * catch-all to ignore events + */ +static RC_FSM_t event_ignore (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + p2peer = p2event; + + if (p2peer) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u event ignored \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + } else { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u event ignored! \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + } + return (RC_FSM_IGNORE_EVENT); +} + + +/* + * State event tables + */ +static event_tuple_t state_initializing_events[] = + {{neighbor_init_ack_e, + initializing_neighbor_up_ack, neighbor_update_s}, + {neighbor_up_ack_tmo_e, + initializing_neighbor_up_ack_tmo, neighbor_initializing_s}, + {neighbor_update_metrics_interval_e, + event_ignore, neighbor_initializing_s}, + {neighbor_update_ack_e, + event_ignore, neighbor_initializing_s}, + {neighbor_update_ack_tmo_e, + event_ignore, neighbor_initializing_s}, + {neighbor_update_addr_res_e, + event_ignore, neighbor_initializing_s}, + {neighbor_term_user_req_e, + event_ignore, neighbor_initializing_s}, + {neighbor_term_e, + event_ignore, neighbor_initializing_s}, + {neighbor_term_ack_e, + event_ignore, neighbor_initializing_s}, + {neighbor_down_ack_tmo_e, + event_ignore, neighbor_initializing_s}, + {neighbor_link_char_req_e, + event_ignore, neighbor_initializing_s}}; + + +static event_tuple_t state_update_events[] = + {{neighbor_init_ack_e, + event_ignore, neighbor_update_s}, + {neighbor_up_ack_tmo_e, + event_ignore, neighbor_update_s}, + {neighbor_update_metrics_interval_e, + update_neighbor_update_interval, neighbor_update_s}, + {neighbor_update_ack_e, + initializing_neighbor_update_ack, neighbor_update_s}, + {neighbor_update_ack_tmo_e, + initializing_neighbor_update_ack_tmo, neighbor_update_s}, + {neighbor_update_addr_res_e, + update_neighbor_update_address_response, neighbor_update_s}, + {neighbor_term_user_req_e, + update_neighbor_down_request, neighbor_terminating_s}, + {neighbor_term_e, + update_neighbor_down, neighbor_terminating_s}, + {neighbor_term_ack_e, + event_ignore, neighbor_update_s}, + {neighbor_down_ack_tmo_e, + event_ignore, neighbor_update_s}, + {neighbor_link_char_req_e, + update_link_char_request, neighbor_update_s}}; + + +static event_tuple_t state_terminating_events[] = + {{neighbor_init_ack_e, + event_ignore, neighbor_terminating_s}, + {neighbor_up_ack_tmo_e, + event_ignore, neighbor_terminating_s}, + {neighbor_update_metrics_interval_e, + event_ignore, neighbor_terminating_s}, + {neighbor_update_ack_e, + event_ignore, neighbor_terminating_s}, + {neighbor_update_ack_tmo_e, + event_ignore, neighbor_terminating_s}, + {neighbor_update_addr_res_e, + event_ignore, neighbor_terminating_s}, + {neighbor_term_user_req_e, + event_ignore, neighbor_terminating_s}, + {neighbor_term_e, + event_ignore, neighbor_terminating_s}, + {neighbor_term_ack_e, + terminating_neighbor_down_ack, neighbor_terminating_s}, + {neighbor_down_ack_tmo_e, + terminating_neighbor_down_ack_tmo, neighbor_terminating_s}, + {neighbor_link_char_req_e, + event_ignore, neighbor_terminating_s}}; + + + +/* + * neighbor state table + */ +static state_tuple_t dlep_neighbor_state_table[] = + {{neighbor_initializing_s, state_initializing_events}, + {neighbor_update_s, state_update_events}, + {neighbor_terminating_s, state_terminating_events}, + {FSM_NULL_STATE_ID, NULL} }; + + +/** + * NAME + * dlep_client_neighbor_fsm_get_state + * + * SYNOPSIS + * uint32_t + * dlep_client_neighbor_fsm_get_state( + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to return the current state + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * current state + * FSM_NULL_STATE_ID if there is an error. + * + */ +uint32_t +dlep_client_neighbor_fsm_get_state (dlep_context_neighbor_t *p2neighbor) +{ + uint32_t state; + + state = FSM_NULL_STATE_ID; + + if (p2neighbor) { + fsm_get_state(p2neighbor->neighbor_fsm_handle, &state); + } else { + /* ignore */ + } + return (state); +} + + +/** + * NAME + * dlep_client_neighbor_fsm_show_state_table + * + * SYNOPSIS + * void + * dlep_client_neighbor_fsm_show_state_table( + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to display the state machine table + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * None + * + */ +void +dlep_client_neighbor_fsm_show_state_table ( + dlep_context_neighbor_t *p2neighbor) +{ + if (p2neighbor) { + fsm_display_table(p2neighbor->neighbor_fsm_handle); + } else { + /* ignore */ + } + return; +} + + +/** + * NAME + * dlep_client_neighbor_fsm_show_history + * + * SYNOPSIS + * void + * dlep_client_neighbor_fsm_show_history( + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to display the state machine history + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * None + * + */ +void +dlep_client_neighbor_fsm_show_history (dlep_context_neighbor_t *p2neighbor) +{ + if (p2neighbor) { + fsm_show_history(p2neighbor->neighbor_fsm_handle); + } else { + /* ignore */ + } + return; +} + + +/** + * NAME + * dlep_client_neighbor_fsm_engine + * + * SYNOPSIS + * void + * dlep_client_neighbor_fsm_engine(uint32_t normalized_event, + * dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to process the state machine normalized + * events. + * + * INPUT PARAMETERS + * normalized_event - This is the state machine event to process. + * + * p2peer - This is a pointer to the peer context. + * + * p2neighbor - This is a pointer to the neighbor context. This is + * NULL for peer specific events. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_STOP_PROCESSING This indicates that the state machine + * is to be terminated and resources released. + * error otherwise + * + */ +void +dlep_client_neighbor_fsm_engine (uint32_t normalized_event, + dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + RC_FSM_t rc; + +// printf("\n INSIDE dlep_client_neighbor_fsm_engine "); + if (!p2peer) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer context is null \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + return; + } + + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: neighbor context is null \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + return; + } + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u normalized_event=%u peer_id=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + normalized_event, + p2peer->peer_id); + } + + rc = fsm_engine(p2neighbor->neighbor_fsm_handle, + normalized_event, + p2peer, + p2neighbor); + + if (rc == RC_FSM_STOP_PROCESSING) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u stopped \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + + /* cancel all neighbor timers and context */ + dlep_neighbor_clear(p2neighbor); + dlep_neighbor_remove(p2peer, &p2neighbor); + + } else if (rc == RC_FSM_IGNORE_EVENT) { + /* do nothing */ + } else if (rc != RC_FSM_OK) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u state machine rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + } + return; +} + + +/** + * NAME + * dlep_neighbor_fsm_destroy + * + * SYNOPSIS + * void + * dlep_neighbor_fsm_destroy(dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to destroy the neighbor state machine. + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context. + * + * OUTPUT PARAMETERS + * p2neighbor - updated + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_fsm_destroy (dlep_context_neighbor_t *p2neighbor) +{ + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: neighbor context is null \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + } else { + /* fsm_handle is nulled */ + fsm_destroy((fsm_t **)&p2neighbor->neighbor_fsm_handle); + } + return; +} + + +/** + * NAME + * dlep_neighbor_fsm_create + * + * SYNOPSIS + * void + * dlep_neighbor_fsm_create(dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to create the neighbor state machine. + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context. + * + * OUTPUT PARAMETERS + * p2neighbor - updated + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_fsm_create (dlep_context_neighbor_t *p2neighbor) +{ + RC_FSM_t rc; + + if (!p2neighbor) { + return; + } + + p2neighbor->neighbor_fsm_handle = NULL; + rc = fsm_create((fsm_t **)&p2neighbor->neighbor_fsm_handle, + "Session State Machine", + neighbor_initializing_s, + normalized_state_table, + normalized_event_table, + dlep_neighbor_state_table); + if (rc != RC_FSM_OK) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: neighbor local_id=%u state " + "machine rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2neighbor->local_id, + rc); + } + } + + return; +} + + diff --git a/dlep_radio_ipv4/dlep_client_neighbor_fsm.h b/dlep_radio_ipv4/dlep_client_neighbor_fsm.h new file mode 100644 index 0000000..e075c7a --- /dev/null +++ b/dlep_radio_ipv4/dlep_client_neighbor_fsm.h @@ -0,0 +1,103 @@ +/*---------------------------------------------------------------------- + * dlep_client_neighbor_fsm.h -- client neighbor state machine + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CLIENT_SESSION_FSM_H__ +#define __DLEP_CLIENT_SESSION_FSM_H__ + +#include "safe_types.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_peer.h" + +/* + * normalized client events + */ +typedef enum { + neighbor_init_ack_e = 0, + neighbor_up_ack_tmo_e, + neighbor_update_metrics_interval_e, + neighbor_update_ack_e, + neighbor_update_ack_tmo_e, + neighbor_update_addr_res_e, + neighbor_term_user_req_e, + neighbor_term_e, + neighbor_term_ack_e, + neighbor_down_ack_tmo_e, + neighbor_link_char_req_e, +} dlep_client_neighbor_events_e; + + +/* + * normalized client states + */ +typedef enum { + neighbor_initializing_s = 0, + neighbor_update_s, + neighbor_terminating_s, +} dlep_client_neighbor_states_e; + + + + +extern uint32_t +dlep_client_neighbor_fsm_get_state( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_client_neighbor_fsm_show_counter( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_client_neighbor_fsm_show_state_table( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_client_neighbor_fsm_show_history( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_client_neighbor_fsm_engine(uint32_t normalized_event, + dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +dlep_neighbor_fsm_destroy(dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_neighbor_fsm_create(dlep_context_neighbor_t *p2neighbor); + + +#endif + diff --git a/dlep_radio_ipv4/dlep_client_peer_event_handlers.c b/dlep_radio_ipv4/dlep_client_peer_event_handlers.c new file mode 100644 index 0000000..925319c --- /dev/null +++ b/dlep_radio_ipv4/dlep_client_peer_event_handlers.c @@ -0,0 +1,1634 @@ +/*---------------------------------------------------------------------- + * dlep_client_peer_event_handlers.c -- client peer state event handlers + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include + +#include "safe_types.h" +#include "time_units.h" + +#include "rfc5444_utils.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_porter.h" +#include "dlep_config.h" +#include "dlep_message_builder.h" + +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" + +#include "dlep_client_timer.h" +#include "dlep_client_peer_fsm.h" + +#include "dlep_client_peer_event_handlers.h" + +extern int TCP_READY; +extern int init; +/** + * NAME + * discovery_start_init + * + * SYNOPSIS + * RC_FSM_t + * discovery_start_init(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the start event is + * received during the discovery state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTNPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +discovery_start_init (void *p2event, void *p2parm) +{ + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; +#if 0 + send_dlep_attached_peer_discovery(p2peer); + + /*** start the peer offer guard timer ***/ + stw_system_timer_start(&p2peer->peer_offer_tmr, + secs_to_milliseconds(p2config->peer_offer_interval), + secs_to_milliseconds(p2config->peer_offer_interval), + &dlep_peer_offer_tmr, + (void *)p2peer->peer_id); +#endif + return (RC_FSM_OK); +} + +/** + * NAME + * discovery_peer_attached_rcvd + * + * SYNOPSIS + * RC_FSM_t + * discovery_peer_attached_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer discovery event is + * received during the discovery state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +discovery_peer_attached_rcvd (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + p2peer = p2event; + dlep_config_t *p2config; + + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + msg_scratch_pad = &p2peer->message_scratch_pad; + + p2config = p2peer->p2config; + + /* To avoid discovery message from unconfigured router */ + if (p2config->router_udp_port != htons(p2config->client_udp.sin_port)) { + return (RC_FSM_IGNORE_EVENT); + } + + + /* + * optional: peer type string was null terminated in scratch + */ + strcpy(p2peer->peer_type_description, + msg_scratch_pad->peer_type_description); + + dlep_client_fsm_engine(peer_offer_e, p2peer, NULL); + return (RC_FSM_OK); +} + +#if 0 +/** + * NAME + * discovery_peer_offer_rcvd + * + * SYNOPSIS + * RC_FSM_t + * discovery_peer_offer_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer offer event is + * received during the discovery state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +discovery_peer_offer_rcvd (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } +// printf("\n PEER OFFER RECEIVED"); + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; +#if 0 + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + /* + * verify that this is the expected response + */ + if (msg_scratch_pad->sequence != + p2peer->expected_peer_offer_sequence) { + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u sequence number miss-match, " + "expected %u-%u rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->expected_peer_offer_sequence, + msg_scratch_pad->sequence); + } + return (RC_FSM_IGNORE_EVENT); + } + + + /* optional */ + if (msg_scratch_pad->status_code_present) { + if (msg_scratch_pad->status_code == 0) { + /* 0 is a success code */ + } else { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u return code %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + msg_scratch_pad->status_code); + } + return (RC_FSM_IGNORE_EVENT); + } + } + + stw_system_timer_stop(&p2peer->peer_offer_tmr); + + /* save the router ID */ + p2peer->router_id = pkt_scratch_pad->router_id; + + + /* + * optional: peer type string was null terminated in scratch + */ + strcpy(p2peer->peer_type_description, + msg_scratch_pad->peer_type_description); + + /* start the peer hb timer if non-zero */ + if (p2peer->peer_heartbeat_interval) { + + printf("\n start peer_heartbeat timer"); + stw_system_timer_start(&p2peer->peer_heartbeat_tmr, + (p2peer->peer_heartbeat_interval), + (p2peer->peer_heartbeat_interval), + &dlep_peer_heartbeat_tmr, + (void *)p2peer->peer_id); + } + printf("\n calling peer_init"); + dlep_client_fsm_engine(peer_init_request_e, p2peer, NULL); + + return (RC_FSM_OK); +} + +#endif + +/** + * NAME + * discovery_peer_offer_tmo + * + * SYNOPSIS + * RC_FSM_t + * discovery_peer_offer_tmo(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer offer message + * was not received during the discovery state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +discovery_peer_offer_tmo (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2peer->peer_offer_timeout_count++; + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u peer offer timer expiration " + "count %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->peer_offer_timeout_count); + } +// send_dlep_attached_peer_discovery(p2peer); + + /* reset the state */ + fsm_set_exception_state(p2peer->fsm_handle, discovery_s); + return (RC_FSM_OK); +} + + + +/** + * NAME + * discovery_peer_offer_start + * + * SYNOPSIS + * RC_FSM_t + * discovery_peer_init_start(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the start event is + * received during the discovery state. + * + * INPUT PARAMETERS + * NAME + * discovery_peer_offer_start + * + * SYNOPSIS + * RC_FSM_t + * discovery_peer_init_start(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the start event is + * received during the discovery state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTNPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +discovery_peer_offer_start (void *p2event, void *p2parm) +{ +// dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + +// p2config = p2peer->p2config; + +// send_dlep_peer_init(p2peer); + + send_dlep_peer_offer(p2peer); + return (RC_FSM_OK); +} + + +#if 0 +/** + * NAME + * discovery_peer_init_start + * + * SYNOPSIS + * RC_FSM_t + * discovery_peer_init_start(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the start event is + * received during the discovery state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTNPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +discovery_peer_init_start (void *p2event, void *p2parm) +{ +// dlep_config_t *p2config; + dlep_context_peer_t *p2peer; +// printf("\n SENDING send_dlep_peer_init "); + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + +// p2config = p2peer->p2config; + + send_dlep_peer_init(p2peer); + + + return (RC_FSM_OK); +} + +#endif + + + + + +/** + * NAME + * discovery_peer_init_ack_rcvd + * + * SYNOPSIS + * RC_FSM_t + * discovery_peer_init_ack_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer initialization + * response event is received during the discovery state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +discovery_peer_init_ack_rcvd (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + +// printf("\n INSIDE discovery_peer_init_ack_rcvd"); +#if 0 + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + /* + * verify that this is the expected response + */ +#if 0 + if (msg_scratch_pad->sequence != + p2peer->expected_peer_offer_sequence) { + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u sequence number miss-match, " + "expected %u-%u rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->expected_peer_offer_sequence, + msg_scratch_pad->sequence); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + /* mandatory */ + if (msg_scratch_pad->status_code_present) { + if (msg_scratch_pad->status_code == 0) { + /* 0 is a success code */ +// printf("\n PEER INIT ACK Received SUCCESS"); + } else { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u return code %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + msg_scratch_pad->status_code); + } + return (RC_FSM_IGNORE_EVENT); + } + } + + /* save the router ID */ + p2peer->router_id = pkt_scratch_pad->router_id; + + + /* + * optional: peer type string was null terminated in scratch + */ + strcpy(p2peer->peer_type_description, + msg_scratch_pad->peer_type_description); + + /* start the peer hb timer if non-zero */ + + if (p2peer->peer_heartbeat_interval) { + stw_system_timer_start(&p2peer->peer_heartbeat_tmr, + (p2peer->peer_heartbeat_interval), + (p2peer->peer_heartbeat_interval), + &dlep_peer_heartbeat_tmr, + (void *)p2peer->peer_id); + } + + return (RC_FSM_OK); +} + + + + + + +/* + * peer_init_rcvd + * + * SYNOPSIS + * RC_FSM_t + * initialization_peer_init_ack_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer initialization + * request event is received during the initialization state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +initialization_peer_init_rcvd (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + +#if 0 + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + /* + * verify that this is the expected response + */ +#if 0 + if (msg_scratch_pad->sequence != + p2peer->expected_peer_offer_sequence) { + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u sequence number miss-match, " + "expected %u-%u rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->expected_peer_offer_sequence, + msg_scratch_pad->sequence); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + p2peer->peer_heartbeat_interval = msg_scratch_pad->hbt; // ASL__ change + + strcpy(p2peer->peer_type_description, + msg_scratch_pad->peer_type_description); + + if (msg_scratch_pad->ipv4_address_present) { + p2peer->update_ipv4_operation = msg_scratch_pad->ipv4_operation; + p2peer->ipv4_address = msg_scratch_pad->ipv4_address; + p2peer->ipv4_attached_subnet = msg_scratch_pad->ipv4_attached_subnet; + } + + /* start the peer hb timer if non-zero */ + + if (p2peer->peer_heartbeat_interval) { + p2peer->peer_heartbeat_timeout_count = 0; + stw_system_timer_start(&p2peer->peer_heartbeat_tmr, + (p2peer->peer_heartbeat_interval), + (p2peer->peer_heartbeat_interval), + &dlep_peer_heartbeat_tmr, + (void *)p2peer->peer_id); + } + + if(init == 1) { + stw_system_timer_stop(&p2peer->peer_heartbeat_tmr); + + dlep_neighbor_deallocate_all(p2peer); + TCP_READY = 0; + + p2peer->peer_heartbeat_timeout_count = 0; + + send_dlep_peer_init_ack(p2peer); + + fsm_set_exception_state(p2peer->fsm_handle, discovery_s); + return (RC_FSM_OK); + } + + dlep_client_fsm_engine(peer_init_response_e, p2peer, NULL); + return (RC_FSM_OK); +} + + + /* NAME + * initialization_peer_init_ack_start + * + * SYNOPSIS + * RC_FSM_t + * initialization_peer_init_ack_start (void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked as response to the peer initialization + * request received in initialization state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +initialization_peer_init_ack_start (void *p2event, void *p2parm) +{ + RC_FSM_t rc; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + /* clear count */ + +// printf(" resting time out count"); + // p2peer->peer_heartbeat_timeout_count = 0; + + p2peer->status_code = RFC5444_SUCCESS; + send_dlep_peer_init_ack(p2peer); + rc = RC_FSM_OK; + +// send_peer_init_ack(p2peer); + return (rc); +} + + + + /* NAME + * in_session_peer_heartbeat_rcvd + * + * SYNOPSIS + * RC_FSM_t + * in_session_peer_heartbeat_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer heartbeat message + * is received during the in_session state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +in_session_peer_heartbeat_rcvd (void *p2event, void *p2parm) +{ + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + printf("\n EXIT BEFOR clear counter in_session_peer_heartbeat_rcvd"); + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + /* clear count */ + +// printf(" resting time out count"); + p2peer->peer_heartbeat_timeout_count = 0; + return (RC_FSM_OK); +} + + +/** + * NAME + * in_session_peer_heartbeat_tmo + * + * SYNOPSIS + * RC_FSM_t + * in_session_peer_heartbeat_tmo(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer heartbeat message + * was not received within the guard timer during the in_session + * state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_STOP_PROCESSING + * + */ +RC_FSM_t +in_session_peer_heartbeat_tmo (void *p2event, void *p2parm) +{ + RC_FSM_t rc; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } + +#endif + p2peer->peer_heartbeat_timeout_count++; + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u missed heartbeats %u " + "threshold=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->peer_heartbeat_timeout_count, + p2peer->peer_heartbeat_missed_threshold); + } + + if (p2peer->peer_heartbeat_timeout_count > + p2peer->peer_heartbeat_missed_threshold) { + stw_system_timer_stop(&p2peer->peer_heartbeat_tmr); + + dlep_neighbor_deallocate_all(p2peer); + TCP_READY = 0; + + p2peer->peer_heartbeat_timeout_count = 0; + send_dlep_peer_termination(p2peer); + fsm_set_exception_state(p2peer->fsm_handle, discovery_s); + rc = RC_FSM_OK; + + /* p2peer->status_code = RFC5444_MSG_TIMEOUT; + dlep_client_fsm_engine(user_peer_term_request_e, p2peer, NULL); + rc = RC_FSM_OK; */ + + } else { + send_dlep_peer_heartbeat(p2peer); + rc = RC_FSM_OK; + } + return (rc); +} + +/** + * NAME + * in_session_peer_update_request_rcvd + * + * SYNOPSIS + * RC_FSM_t + * in_session_peer_update_request_rcvd(void *p2event, + * void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer update request + * message is received during the in_session state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +in_session_peer_update_request_rcvd (void *p2event, void *p2parm) +{ + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + if (msg_scratch_pad->ipv4_address_present) { + p2peer->update_ipv4_operation = msg_scratch_pad->ipv4_operation; + p2peer->ipv4_address = msg_scratch_pad->ipv4_address; + p2peer->ipv4_attached_subnet = msg_scratch_pad->ipv4_attached_subnet; + } + + /* Reseting time out count */ + p2peer->peer_heartbeat_timeout_count = 0; + + send_dlep_peer_update_response(p2peer); + return (RC_FSM_OK); +} + + +/** + * NAME + * synchronized_peer_update_response_rcvd + * + * SYNOPSIS + * RC_FSM_t + * synchronized_peer_update_response_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * The event handler is invoked when the peer update response + * message has been received during the synchronized state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +in_session_peer_update_response_rcvd (void *p2event, void *p2parm) +{ + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u peer update rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + + p2peer->status_code = msg_scratch_pad->status_code; + return (RC_FSM_OK); +} + + +/** + * NAME + * in_session_peer_term_request + * + * SYNOPSIS + * RC_FSM_t + * in_session_peer_term_request(void *p2event, void *p2parm) + * + * DESCRIPTION + * The event handler is invoked when the user or system issues + * a request to terminate the peer and all neighbors associated + * with the peer. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is + * set prior to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +in_session_peer_term_request (void *p2event, void *p2parm) +{ + RC_FSM_t rc; + dlep_context_peer_t *p2peer; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u term rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + + //printf("\n in_session_peer_term_request calling send_peer_ter "); + dlep_neighbor_deallocate_all(p2peer); + + //p2peer->status_code = RFC5444_SUCCESS; + send_dlep_peer_termination(p2peer); + + rc = stw_system_timer_stop(&p2peer->peer_heartbeat_tmr); + if (rc != RC_STW_OK) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + } + + /* start the peer term timer */ + stw_system_timer_start(&p2peer->peer_term_ack_tmr, + (4*p2peer->peer_heartbeat_interval), + (4*p2peer->peer_heartbeat_interval), + &dlep_peer_term_ack_tmr, + (void *)p2peer->peer_id); + + return (RC_FSM_OK); +} + +/** + * NAME + * in_session_peer_term_rcvd + * + * SYNOPSIS + * RC_FSM_t + * in_session_peer_term_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer terminate message + * is received during the in_session state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_STOP_PROCESSING + * + */ +RC_FSM_t +in_session_peer_term_rcvd (void *p2event, void *p2parm) +{ + RC_FSM_t rc; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u term rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + + p2peer->status_code = msg_scratch_pad->status_code; + + send_dlep_peer_termination_ack(p2peer); + + /* Reset the state *\ + fsm_set_exception_state(p2peer->fsm_handle, reset_s); + + /* cancel all timers and clear context */ + dlep_neighbor_deallocate_all(p2peer); + + rc = stw_system_timer_stop(&p2peer->peer_heartbeat_tmr); + if (rc != RC_STW_OK) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + + rc = stw_system_timer_stop(&p2peer->peer_term_ack_tmr); + if (rc != RC_STW_OK) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + +#if 0 + /*** start the router offer guard timer ***/ + + stw_system_timer_start(&p2peer->peer_offer_tmr, + secs_to_milliseconds(p2config->peer_offer_interval), + secs_to_milliseconds(p2config->peer_offer_interval), + &dlep_peer_offer_tmr, + (void *)p2peer->peer_id); +#endif + /* reset the state */ + fsm_set_exception_state(p2peer->fsm_handle, discovery_s); + + return (RC_FSM_OK); +} + + +/** + * NAME + * terminating_peer_term_ack_rcvd + * + * SYNOPSIS + * RC_FSM_t + * terminating_peer_term_ack_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer terminate + * ack is received during the terminating state. The neighbor + * are all terminated and cleaned and the peer state machine + * is stopped and removed. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_IGNORE_EVENT + * RC_FSM_STOP_PROCESSING which removes the state machine + * + */ +RC_FSM_t +terminating_peer_term_ack_rcvd (void *p2event, void *p2parm) +{ + RC_FSM_t rc; + + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + + printf("\n peer_term ack rcvd \n"); + +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->expected_peer_term_ack_sequence != + msg_scratch_pad->sequence) { + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u unexpected term ack \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + return (RC_FSM_IGNORE_EVENT); + } + } +#endif + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u term ack rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + + /* cancel all timers and clear context */ + dlep_neighbor_deallocate_all(p2peer); +// close(p2config->dlep_udp_sockfd); +// close(p2config->dlep_tcp_sockfd); + TCP_READY = 0; + + rc = stw_system_timer_stop(&p2peer->peer_heartbeat_tmr); + if (rc != RC_STW_OK) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + + rc = stw_system_timer_stop(&p2peer->peer_term_ack_tmr); + if (rc != RC_STW_OK) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } +#if 0 + /*** start the router offer guard timer ***/ + + if (p2config->start_on_discovery) { + stw_system_timer_start(&p2peer->peer_offer_tmr, + secs_to_milliseconds(p2config->peer_offer_interval), + secs_to_milliseconds(p2config->peer_offer_interval), + &dlep_peer_offer_tmr, + (void *)p2peer->peer_id); + } +// dlep_porter_open(p2config); +#endif + /* reset the state */ + fsm_set_exception_state(p2peer->fsm_handle, discovery_s); + + return (RC_FSM_OK); +} + + +/** + * NAME + * terminating_peer_term_ack_tmo + * + * SYNOPSIS + * RC_FSM_t + * terminating_peer_term_ack_tmo(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer terminate + * ack is not received dnd the guard timer expires. The neighbor + * are all terminated and cleaned and the peer state machine + * is stopped and removed. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_STOP_PROCESSING which removes the state machine + * + */ +RC_FSM_t +terminating_peer_term_ack_tmo (void *p2event, void *p2parm) +{ + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + + printf("\n terminating_peer_term_ack_tmo "); + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u term ack timeout \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + + + /* ignoring retry timers, just restart discovery */ + + /* cancel all timers and clear context */ + dlep_neighbor_deallocate_all(p2peer); +// close(p2config->dlep_udp_sockfd); +// close(p2config->dlep_tcp_sockfd); + TCP_READY = 0; +#if 0 + /*** start the router offer guard timer ***/ + if (p2config->start_on_discovery) { + stw_system_timer_start(&p2peer->peer_offer_tmr, + secs_to_milliseconds(p2config->peer_offer_interval), + secs_to_milliseconds(p2config->peer_offer_interval), + &dlep_peer_offer_tmr, + (void *)p2peer->peer_id); + } +#endif + /* reset the state */ +// dlep_porter_open(p2config); + fsm_set_exception_state(p2peer->fsm_handle, discovery_s); + + return (RC_FSM_OK); +} + + +/** + * NAME + * terminating_peer_term_rcvd + * + * SYNOPSIS + * RC_FSM_t + * terminating_peer_term_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer terminate + * message is received during the terminating state. The neighbors + * are all terminated and the peer state machine + * is stopped and removed. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_STOP_PROCESSING which removes the state machine + * + */ +RC_FSM_t +terminating_peer_term_rcvd (void *p2event, void *p2parm) +{ + RC_FSM_t rc; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + + printf("\n terminating_peer_term_rcvd "); + +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u term rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + + rc = stw_system_timer_stop(&p2peer->peer_heartbeat_tmr); + if (rc != RC_STW_OK) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + } + + send_dlep_peer_termination_ack(p2peer); + + /* Reset the state */ + fsm_set_exception_state(p2peer->fsm_handle, reset_s); + + +// close(p2config->dlep_udp_sockfd); +// close(p2config->dlep_tcp_sockfd); + TCP_READY = 0; + +#if 0 + /*** start the router offer guard timer ***/ + if (p2config->start_on_discovery) { + stw_system_timer_start(&p2peer->peer_offer_tmr, + secs_to_milliseconds(p2config->peer_offer_interval), + secs_to_milliseconds(p2config->peer_offer_interval), + &dlep_peer_offer_tmr, + (void *)p2peer->peer_id); + + } +#endif + /* reset the state */ +// dlep_porter_open(p2config); + fsm_set_exception_state(p2peer->fsm_handle, discovery_s); + + return (RC_FSM_OK); +} + + diff --git a/dlep_radio_ipv4/dlep_client_peer_event_handlers.h b/dlep_radio_ipv4/dlep_client_peer_event_handlers.h new file mode 100644 index 0000000..023b33f --- /dev/null +++ b/dlep_radio_ipv4/dlep_client_peer_event_handlers.h @@ -0,0 +1,101 @@ +/*---------------------------------------------------------------------- + * dlep_client_peer_event_handlers.h -- client peer state event handlers + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CLIENT_PEER_EVENT_HANDLERS_H__ +#define __DLEP_CLIENT_PEER_EVENT_HANDLERS_H__ + +#include "fsm.h" + + +extern RC_FSM_t +discovery_start_init(void *p2event, void *p2parm); + +extern RC_FSM_t +discovery_peer_attached_rcvd(void *p2event, void *p2parm); + +extern RC_FSM_t +discovery_peer_offer_start(void *p2event, void *p2parm); + +/* extern RC_FSM_t +discovery_peer_offer_rcvd(void *p2event, void *p2parm); */ + +extern RC_FSM_t +initialization_peer_init_rcvd(void *p2event, void *p2parm); + +extern RC_FSM_t +initialization_peer_init_ack_start(void *p2event, void *p2parm); +/* extern RC_FSM_t +discovery_peer_offer_tmo(void *p2event, void *p2parm); */ + +/* extern RC_FSM_t +discovery_peer_init_start(void *p2event, void *p2parm); */ + +/* extern RC_FSM_t +discovery_peer_init_ack_rcvd(void *p2event, void *p2parm); */ + +extern RC_FSM_t +in_session_peer_heartbeat_rcvd(void *p2event, void *p2parm); + +extern RC_FSM_t +in_session_peer_heartbeat_tmo(void *p2event, void *p2parm); + +/* extern RC_FSM_t +in_session_peer_update_rcvd(void *p2event, void *p2parm); */ + + +extern RC_FSM_t +in_session_peer_update_request_rcvd(void *p2event, void *p2parm); + +extern RC_FSM_t +in_session_peer_update_response_rcvd(void *p2event, void *p2parm); + + +extern RC_FSM_t +in_session_peer_term_request(void *p2event, void *p2parm); + +extern RC_FSM_t +in_session_peer_term_rcvd(void *p2event, void *p2parm); + +extern RC_FSM_t +terminating_peer_term_ack_rcvd(void *p2event, void *p2parm); + +extern RC_FSM_t +terminating_peer_term_ack_tmo(void *p2event, void *p2parm); + +extern RC_FSM_t +terminating_peer_term_rcvd(void *p2event, void *p2parm); + +extern RC_FSM_t +out_of_state_rom_rcvd(void *p2event, void *p2parm); + + +#endif + diff --git a/dlep_radio_ipv4/dlep_client_peer_fsm.c b/dlep_radio_ipv4/dlep_client_peer_fsm.c new file mode 100644 index 0000000..f732212 --- /dev/null +++ b/dlep_radio_ipv4/dlep_client_peer_fsm.c @@ -0,0 +1,568 @@ +/*---------------------------------------------------------------------- + * dlep_client_fsm.c -- DLEP Client state machine + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include + +#include "fsm.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_config.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" + +#include "dlep_client_neighbor_event_handlers.h" +#include "dlep_client_peer_event_handlers.h" +#include "dlep_client_timer.h" +#include "dlep_client_peer_fsm.h" + +/* + * normalized client peer event description + */ +static event_description_t normalized_event_table[] = + {{start_init_e, "Start Event"}, + {peer_att_discovery_e, "Attached Discovery Event"}, + {peer_offer_e, "Peer Offer Event"}, + {peer_offer_tmo_e, "Peer Offer TMO Event"}, + {peer_init_request_e, "Peer Initialization Request Event"}, + {peer_init_response_e, "Peer Initialization Response Event"}, + {peer_heartbeat_e, "Peer Heartbeat Event"}, + {peer_heartbeat_tmo_e, "Peer Heartbeat TMO Event"}, + {peer_update_request_e, "Peer Update Request Event"}, + {peer_update_response_e, "Peer Update Response Event"}, + {user_peer_term_request_e, "User Node Term Request Event"}, + {peer_term_request_e, "Peer Term Event"}, + {peer_term_response_e, "Peer Term Response Event"}, + {peer_term_response_tmo_e, "Peer Term Response TMO Event"}, + {FSM_NULL_EVENT_ID, NULL} }; + + +/* + * normalized peer state description + */ +static state_description_t normalized_state_table[] = + {{discovery_s, "Idle State"}, + {initialization_s, "Initialized State"}, + {in_session_s, "Established State"}, + {terminating_s, "Terminating State"}, + {reset_s, "Resetting state"}, + {FSM_NULL_STATE_ID, NULL} }; + + +/* + * catch-all to ignore events + */ +static RC_FSM_t event_ignore (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + + p2peer = p2event; + + if (p2peer) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u event ignored: p2peer=%p peer_id=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer, + p2peer->peer_id); + } + } else { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u event ignored! \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + } + return (RC_FSM_OK); // IGNORE_EVENT); +} + + +/* + _ State event tables + */ +static event_tuple_t state_discovery_events[] = + {{start_init_e, + discovery_start_init, discovery_s}, + {peer_att_discovery_e, + discovery_peer_attached_rcvd, initialization_s}, + {peer_offer_e, + discovery_peer_offer_start, initialization_s}, + {peer_offer_tmo_e, + event_ignore, discovery_s}, + {peer_init_request_e, + initialization_peer_init_rcvd, in_session_s}, + {peer_init_response_e, + initialization_peer_init_ack_start, in_session_s}, + {peer_heartbeat_e, + event_ignore, discovery_s}, + {peer_heartbeat_tmo_e, + event_ignore, discovery_s}, + {peer_update_request_e, + event_ignore, discovery_s}, + {peer_update_response_e, + event_ignore, discovery_s}, + {user_peer_term_request_e, + event_ignore, discovery_s}, + {peer_term_request_e, + event_ignore, discovery_s}, + {peer_term_response_e, + event_ignore, discovery_s}, + {peer_term_response_tmo_e, + event_ignore, discovery_s}}; + +static event_tuple_t state_initialization_events[] = + {{start_init_e, + event_ignore, initialization_s}, + {peer_att_discovery_e, + event_ignore, initialization_s}, + {peer_offer_e, + event_ignore, initialization_s}, + {peer_offer_tmo_e, + event_ignore, initialization_s}, + {peer_init_request_e, + initialization_peer_init_rcvd, in_session_s}, + {peer_init_response_e, + initialization_peer_init_ack_start, in_session_s}, + {peer_heartbeat_e, + event_ignore, initialization_s}, + {peer_heartbeat_tmo_e, + event_ignore, initialization_s}, + {peer_update_request_e, + event_ignore, initialization_s}, + {peer_update_response_e, + event_ignore, initialization_s}, + {user_peer_term_request_e, + event_ignore, initialization_s}, + {peer_term_request_e, + event_ignore, initialization_s}, + {peer_term_response_e, + event_ignore, initialization_s}, + {peer_term_response_tmo_e, + event_ignore, initialization_s}}; + + + +static event_tuple_t state_in_session_events[] = + { {start_init_e, + event_ignore, in_session_s}, + {peer_att_discovery_e, + event_ignore, in_session_s}, + {peer_offer_e, + event_ignore, in_session_s}, + {peer_offer_tmo_e, + event_ignore, in_session_s}, + {peer_init_request_e, + event_ignore, in_session_s}, + {peer_init_response_e, + event_ignore, in_session_s}, + {peer_heartbeat_e, + in_session_peer_heartbeat_rcvd, in_session_s}, + {peer_heartbeat_tmo_e, + in_session_peer_heartbeat_tmo, in_session_s}, + {peer_update_request_e, + in_session_peer_update_request_rcvd, in_session_s}, + {peer_update_response_e, + in_session_peer_update_response_rcvd, in_session_s}, + {user_peer_term_request_e, + in_session_peer_term_request, terminating_s}, + {peer_term_request_e, + in_session_peer_term_rcvd, terminating_s}, + {peer_term_response_e, + event_ignore, in_session_s}, + {peer_term_response_tmo_e, + event_ignore, in_session_s}}; + + +static event_tuple_t state_terminating_events[] = + { {start_init_e, + event_ignore, terminating_s}, + {peer_att_discovery_e, + event_ignore, terminating_s}, + {peer_offer_e, + event_ignore, terminating_s}, + {peer_offer_tmo_e, + event_ignore, terminating_s}, + {peer_init_request_e, + event_ignore, terminating_s}, + {peer_init_response_e, + event_ignore, terminating_s}, + {peer_heartbeat_e, + event_ignore, terminating_s}, + {peer_heartbeat_tmo_e, + event_ignore, terminating_s}, + {peer_update_request_e, + event_ignore, terminating_s}, + {peer_update_response_e, + event_ignore, terminating_s}, + {user_peer_term_request_e, + event_ignore, terminating_s}, + {peer_term_request_e, + terminating_peer_term_rcvd, terminating_s}, + {peer_term_response_e, + terminating_peer_term_ack_rcvd, reset_s}, + {peer_term_response_tmo_e, + terminating_peer_term_ack_tmo, reset_s}}; + +static event_tuple_t state_reset_events[] = + {{start_init_e, + event_ignore, reset_s}, + {peer_att_discovery_e, + event_ignore, reset_s}, + {peer_offer_e, + event_ignore, reset_s}, + {peer_offer_tmo_e, + event_ignore, reset_s}, + {peer_init_request_e, + event_ignore, reset_s}, + {peer_init_response_e, + event_ignore, reset_s}, + {peer_heartbeat_e, + event_ignore, reset_s}, + {peer_heartbeat_tmo_e, + event_ignore, reset_s}, + {peer_update_request_e, + event_ignore, reset_s}, + {peer_update_response_e, + event_ignore, reset_s}, + {user_peer_term_request_e, + event_ignore, reset_s}, + {peer_term_request_e, + event_ignore, reset_s}, + {peer_term_response_e, + event_ignore, reset_s}, + {peer_term_response_tmo_e, + event_ignore, reset_s}}; + + +/* + * State table + */ +static state_tuple_t dlep_client_state_table[] = + + { {discovery_s, state_discovery_events}, + {initialization_s, state_initialization_events}, + {in_session_s, state_in_session_events}, + {terminating_s, state_terminating_events}, + {reset_s,state_reset_events}, + {FSM_NULL_STATE_ID, NULL} }; + + +/** + * NAME + * dlep_client_fsm_get_state + * + * SYNOPSIS + * uint32_t + * dlep_client_fsm_get_state(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to return the current state + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * current state + * FSM_NULL_STATE_ID if there is an error. + * + */ +uint32_t +dlep_client_fsm_get_state (dlep_context_peer_t *p2peer) +{ + uint32_t state; + + state = FSM_NULL_STATE_ID; + + if (p2peer) { + fsm_get_state(p2peer->fsm_handle, &state); + } else { + /* ignore */ + } + return (state); +} + + +/** + * NAME + * dlep_client_fsm_show_state_table + * + * SYNOPSIS + * void + * dlep_client_fsm_show_state_table(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to display the state machine counters + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * None + * + */ +void +dlep_client_fsm_show_state_table (dlep_context_peer_t *p2peer) +{ + if (p2peer) { + fsm_display_table(p2peer->fsm_handle); + } else { + /* ignore */ + } + return; +} + + +/** + * NAME + * dlep_client_fsm_show_history + * + * SYNOPSIS + * void + * dlep_client_fsm_show_history(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to display the state machine history + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * None + * + */ +void +dlep_client_fsm_show_history (dlep_context_peer_t *p2peer) +{ + if (p2peer) { + fsm_show_history(p2peer->fsm_handle); + } else { + /* ignore */ + } + return; +} + + +/** + * NAME + * dlep_client_fsm_engine + * + * SYNOPSIS + * void + * dlep_client_fsm_engine(uint32_t normalized_event, + * dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to process the state machine normalized + * events. + * + * INPUT PARAMETERS + * normalized_event - This is the state machine event to process. + * + * p2peer - This is a pointer to the peer context. + * + * p2neighbor - This is a pointer to the neighbor context. This is + * NULL for peer specific events. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_STOP_PROCESSING This indicates that the state machine + * is to be terminated and resources released. + * error otherwise + * + */ +void +dlep_client_fsm_engine (uint32_t normalized_event, + dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + RC_FSM_t rc; + + if (!p2peer) { + DLEP_DEBUG("%s-%u Error: peer is null \n", + DEBUG_FUNCTION, + DEBUG_LINE); + return; + } + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u normalized_event=%u p2peer=%p " + "peer_id=%u p2neighbor=%p \n", + DEBUG_FUNCTION, + DEBUG_LINE, + normalized_event, + p2peer, + p2peer->peer_id, + p2neighbor); + } + + rc = fsm_engine(p2peer->fsm_handle, + normalized_event, + p2peer, + p2neighbor); + + if (rc == RC_FSM_STOP_PROCESSING) { + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u p2peer=%p peer_id=%u stopped \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer, + p2peer->peer_id); + } + + /* cancel all timers and clear context */ + dlep_neighbor_deallocate_all(p2peer); + + /* stop peer timers */ + dlep_peer_clear(p2peer); + dlep_peer_remove(&p2peer); + + } else if (rc != RC_FSM_OK) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u radio state " + "machine rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + } + return; +} + + +/** + * NAME + * dlep_fsm_destroy + * + * SYNOPSIS + * void + * dlep_fsm_destroy(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to destroy the client state machine. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context. + * + * OUTPUT PARAMETERS + * p2peer - updated + * + * RETURN VALUE + * None + * + */ +void +dlep_fsm_destroy (dlep_context_peer_t *p2peer) +{ + if (!p2peer) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer is null \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + } else { + /* fsm_handle is nulled */ + fsm_destroy((fsm_t **)&p2peer->fsm_handle); + } + return; +} + + +/** + * NAME + * dlep_fsm_create + * + * SYNOPSIS + * void + * dlep_fsm_create(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to create the client state machine. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context. + * + * OUTPUT PARAMETERS + * p2peer - updated + * + * RETURN VALUE + * None + * + */ +void +dlep_fsm_create (dlep_context_peer_t *p2peer) +{ + RC_FSM_t rc; + + if (!p2peer) { + return; + } + + p2peer->fsm_handle = NULL; + rc = fsm_create((fsm_t **)&p2peer->fsm_handle, + "DLEP State Machine", + discovery_s, + normalized_state_table, + normalized_event_table, + dlep_client_state_table); + if (rc != RC_FSM_OK) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u radio state " + "machine rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + } + + return; +} + + diff --git a/dlep_radio_ipv4/dlep_client_peer_fsm.h b/dlep_radio_ipv4/dlep_client_peer_fsm.h new file mode 100644 index 0000000..8334007 --- /dev/null +++ b/dlep_radio_ipv4/dlep_client_peer_fsm.h @@ -0,0 +1,103 @@ +/*---------------------------------------------------------------------- + * dlep_client_fsm.h -- DLEP Client state machine + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reseved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CLIENT_FSM_H__ +#define __DLEP_CLIENT_FSM_H__ + +#include "dlep_context_peer.h" +#include "dlep_context_neighbor.h" + +/* + * normalized client events + */ +typedef enum { + start_init_e = 0, + peer_att_discovery_e, + peer_offer_e, + peer_offer_tmo_e, + peer_init_request_e, + peer_init_response_e, + peer_heartbeat_e, + peer_heartbeat_tmo_e, + peer_update_request_e, + peer_update_response_e, + user_peer_term_request_e, + peer_term_request_e, + peer_term_response_e, + peer_term_response_tmo_e, +} dlep_client_events_e; + + +/* + * normalized client states + */ +typedef enum { + discovery_s = 0, + initialization_s, + in_session_s, + terminating_s, + reset_s, +} dlep_client_states_e; + + + + +extern uint32_t +dlep_client_fsm_get_state(dlep_context_peer_t *p2peer); + + +extern void +dlep_client_fsm_show_counter(dlep_context_peer_t *p2peer); + + +extern void +dlep_client_fsm_show_state_table(dlep_context_peer_t *p2peer); + + +extern void +dlep_client_fsm_show_history(dlep_context_peer_t *p2peer); + + +extern void +dlep_client_fsm_engine(uint32_t normalized_event, + dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +dlep_fsm_destroy(dlep_context_peer_t *p2peer); + + +extern void +dlep_fsm_create(dlep_context_peer_t *p2peer); + + +#endif + diff --git a/dlep_radio_ipv4/dlep_client_timer.c b/dlep_radio_ipv4/dlep_client_timer.c new file mode 100644 index 0000000..342fa66 --- /dev/null +++ b/dlep_radio_ipv4/dlep_client_timer.c @@ -0,0 +1,294 @@ +/*---------------------------------------------------------------------- + * dlep_client_timer.c -- Client state machine guard timers + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "dlep_context_peer_management.h" +#include "dlep_client_neighbor_fsm.h" +#include "dlep_client_peer_fsm.h" +#include "dlep_client_timer.h" + + + +/** + * NAME + * dlep_peer_offer_tmr + * + * SYNOPSIS + * void + * dlep_peer_offer_tmr(stw_tmr_t *tmr, void *parm) + * + * DESCRIPTION + * The expiration of this timer indicates that the peer offer + * response expected by the peer has not been received. + * + * INPUT PARAMETERS + * tmr - This is the timer handle + * + * p2arm - This is the local peer id that was set when the timer + * was started. + * + * RETURN VALUE + * None + * + */ +void +dlep_peer_offer_tmr (stw_tmr_t *tmr, void *parm) +{ + uint32_t peer_id; + dlep_context_peer_t *p2peer; + + peer_id = (uint32_t)parm; + p2peer = dlep_get_peer_by_peer_id(peer_id); + + printf("\n peer offer time out"); + dlep_client_fsm_engine(peer_offer_tmo_e, p2peer, NULL); + return; +} + + +/** + * NAME + * dlep_peer_heartbeat_tmr + * + * SYNOPSIS + * void + * dlep_peer_heartbeat_tmr(stw_tmr_t *tmr, void *parm) + * + * DESCRIPTION + * The expiration of this timer indicates that it is time to + * for the peer send another peer heartbeat. + * + * INPUT PARAMETERS + * tmr - This is the timer handle + * + * p2arm - This is the local peer id that was set when + * the timer was started. + * + * RETURN VALUE + * None + * + */ +void +dlep_peer_heartbeat_tmr (stw_tmr_t *tmr, void *parm) +{ + uint32_t peer_id; + dlep_context_peer_t *p2peer; + + peer_id = (uint32_t)parm; + p2peer = dlep_get_peer_by_peer_id(peer_id); + + dlep_client_fsm_engine(peer_heartbeat_tmo_e, p2peer, NULL); + return; +} + + +/** + * NAME + * dlep_peer_term_ack_tmr + * + * SYNOPSIS + * void + * dlep_peer_term_ack_tmr(stw_tmr_t *tmr, void *parm) + * + * DESCRIPTION + * The expiration of this timer indicates that the term ACK + * expected by the peer was not received. + * + * INPUT PARAMETERS + * tmr - This is the timer handle + * + * p2arm - This is the local peer id that was set when + * the timer was started. + * + * RETURN VALUE + * None + * + */ +void +dlep_peer_term_ack_tmr (stw_tmr_t *tmr, void *parm) +{ + uint32_t peer_id; + dlep_context_peer_t *p2peer; + + peer_id = (uint32_t)parm; + p2peer = dlep_get_peer_by_peer_id(peer_id); + + printf("\n Peer term ack tmr out "); + dlep_client_fsm_engine(peer_term_response_tmo_e, p2peer, NULL); + return; +} + + +/** + * NAME + * dlep_neighbor_init_ack_tmr + * + * SYNOPSIS + * void + * dlep_neighbor_init_ack_tmr(stw_tmr_t *tmr, void *parm) + * + * DESCRIPTION + * The expiration of this timer indicates that the neighbor + * neighbor up ack was not received. The neighbor up may the + * be retransmitted. + * + * INPUT PARAMETERS + * p2arm + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_init_ack_tmr (stw_tmr_t *tmr, void *parm) +{ + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2neighbor = parm; + p2peer = p2neighbor->p2peer; + + dlep_client_neighbor_fsm_engine(neighbor_up_ack_tmo_e, + p2peer, p2neighbor); + return; +} + + +/** + * NAME + * dlep_neighbor_update_ack_tmr + * + * SYNOPSIS + * void + * dlep_neighbor_update_ack_tmr(stw_tmr_t *tmr, void *parm) + * + * DESCRIPTION + * The expiration of this timer indicates that the neighbor + * update ack was not received. The neighbor update may the + * be retransmitted. + * + * INPUT PARAMETERS + * p2arm + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_update_ack_tmr (stw_tmr_t *tmr, void *parm) +{ + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2neighbor = parm; + p2peer = p2neighbor->p2peer; + + dlep_client_neighbor_fsm_engine(neighbor_update_ack_tmo_e, + p2peer, p2neighbor); + return; +} + + + +/** + * NAME + * dlep_neighbor_metrics_interval_tmr + * + * SYNOPSIS + * void + * dlep_neighbor_metrics_interval_tmr(stw_tmr_t *tmr, void *parm) + * + * DESCRIPTION + * The expiration of this timer is used to periodically + * generate the periodic neighbor metrics message. + * + * INPUT PARAMETERS + * tmr - This is a handle to the timer + * + * p2arm - This is a pointer to the neighbor context that + * was set when the timer was started. + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_metrics_interval_tmr (stw_tmr_t *tmr, void *parm) +{ + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2neighbor = parm; + p2peer = p2neighbor->p2peer; + + dlep_client_neighbor_fsm_engine(neighbor_update_metrics_interval_e, + p2peer, p2neighbor); + return; +} + + +/** + * NAME + * dlep_neighbor_term_ack_tmr + * + * SYNOPSIS + * void + * dlep_neighbor_term_ack_tmr(stw_tmr_t *tmr, void *parm) + * + * DESCRIPTION + * The expiration of this timer indicates that theneighbor + * neighbor down was not received. The neighbor down may the + * be retransmitted. + * + * INPUT PARAMETERS + * p2arm + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_term_ack_tmr (stw_tmr_t *tmr, void *parm) +{ + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2neighbor = parm; + p2peer = p2neighbor->p2peer; + + dlep_client_neighbor_fsm_engine(neighbor_down_ack_tmo_e, + p2peer, p2neighbor); + return; +} + diff --git a/dlep_radio_ipv4/dlep_client_timer.h b/dlep_radio_ipv4/dlep_client_timer.h new file mode 100644 index 0000000..c133dc6 --- /dev/null +++ b/dlep_radio_ipv4/dlep_client_timer.h @@ -0,0 +1,64 @@ +/*---------------------------------------------------------------------- + * dlep_client_timer.h + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CLIENT_TIMER_H__ +#define __DLEP_CLIENT_TIMER_H__ + +#include "stw_system_timer.h" + + +extern void +dlep_peer_offer_tmr(stw_tmr_t *tmr, void *parm); + +extern void +dlep_peer_heartbeat_tmr(stw_tmr_t *tmr, void *parm); + +extern void +dlep_peer_term_ack_tmr(stw_tmr_t *tmr, void *parm); + +extern void +dlep_neighbor_init_ack_tmr(stw_tmr_t *tmr, void *parm); + +extern void +dlep_neighbor_update_ack_tmr(stw_tmr_t *tmr, void *parm); + +//exter n void +//d lep_n ei ghbor_met rics_tmr(stw_tmr_t *tmr, void *parm); + +extern void +dlep_neighbor_metrics_interval_tmr(stw_tmr_t *tmr, void *parm); + +extern void +dlep_neighbor_term_ack_tmr(stw_tmr_t *tmr, void *parm); + + +#endif + diff --git a/dlep_radio_ipv4/dlep_config.c b/dlep_radio_ipv4/dlep_config.c new file mode 100644 index 0000000..acac5ba --- /dev/null +++ b/dlep_radio_ipv4/dlep_config.c @@ -0,0 +1,596 @@ +/*---------------------------------------------------------------------- + * dlep_config.c -- Routine to parse the configuration file + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include +#include + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_config.h" + + +static dlep_config_t dlep_config; + + +/** + * NAME + * dlep_get_config_ptr + * + * SYNOPSIS + * dlep_config_t *dlep_get_config_ptr(void) + * + * DESCRIPTION + * This function can be used to get the pointer to the + * configuration structure. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * The configuration structure pointer. + * + */ +dlep_config_t *dlep_get_config_ptr (void) +{ + return (&dlep_config); +} + + +/** + * NAME + * dlep_default_config + * + * SYNOPSIS + * void + * dlep_default_config(void) + * + * DESCRIPTION + * This function sets the configuration data to default values, where + * default values apply. + * + * INPUT PARAMETERS + * p2config Pointer to the config structure + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * None + * + */ +void +dlep_default_config (void) +{ + dlep_config_t *p2config; + + p2config = &dlep_config; + + strcpy(p2config->filename, "dlep_sim.cfg"); + + strcpy(p2config->sim_name, "dlep"); + + p2config->local_udp_port = 0; + p2config->local_tcp_port = 0; + + p2config->local_ipv4_dot[0] = '\0'; + ipv4_zero_address(&p2config->local_ipv4); + + p2config->router_udp_port = 0; + p2config->router_tcp_port = 0; + + p2config->router_ipv4_dot[0] = '\0'; + ipv4_zero_address(&p2config->router_ipv4); + + p2config->start_on_launch = TRUE; + + strcpy(p2config->local_type_description, "no type description"); + + + p2config->local_id = 0; + + p2config->peer_offer_interval = + DLEP_PEER_OFFER_INTERVAL_DEFAULT; + + p2config->peer_heartbeat_interval = + DLEP_PEER_HEARTBEAT_INTERVAL_DEFAULT; + p2config->peer_heartbeat_missed_threshold = + DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_DEFAULT; + + p2config->peer_term_ack_tmo = + DLEP_PEER_TERM_ACK_TMO_DEFAULT; + p2config->peer_term_missed_ack_threshold = + DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_DEFAULT; + + p2config->neighbor_up_ack_tmo = + DLEP_NEIGHBOR_UP_ACK_TMO_DEFAULT; + p2config->neighbor_up_missed_ack_threshold = + DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_DEFAULT; + + p2config->neighbor_update_interval_tmo = + DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_DEFAULT; + + p2config->neighbor_activity_timer = + DLEP_NEIGHBOR_ACTIVITY_TIMER_DEFAULT; + + p2config->neighbor_down_ack_tmo = + DLEP_NEIGHBOR_DOWN_ACK_TMO_DEFAULT; + p2config->neighbor_down_missed_ack_threshold = + DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_DEFAULT; + + return; +} + + +/** + * NAME + * dlep_display_config + * + * SYNOPSIS + * void + * dlep_display_config(dlep_config_t *p2config) + * + * DESCRIPTION + * This function displays the configuration data to the console. + * + * INPUT PARAMETERS + * p2config Pointer to the config structure + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_display_config (dlep_config_t *p2config) +{ + if (!p2config) { + return; + } + + printf("\n%s DLEP Configuration from %s \n", + p2config->sim_name, + p2config->filename); + + printf(" local udp port=%u \n", + p2config->local_udp_port); + printf(" local tcp port=%u \n", + p2config->local_tcp_port); + printf(" local ipv4=%s \n", + p2config->local_ipv4_dot); + + if (p2config->router_udp_port) { + printf(" router udp port=%u \n", + p2config->router_udp_port); + } + + if (p2config->router_tcp_port) { + printf(" router tcp port=%u \n", + p2config->router_tcp_port); + } + + if (p2config->router_udp_port && p2config->router_tcp_port) { + printf(" router ipv4=%s \n", + p2config->router_ipv4_dot); + } + + printf("\n"); + + printf(" Type Description: %s \n", + p2config->local_type_description); + + printf(" local ID=%u \n", + p2config->local_id); + + printf(" peer_offer_tmo=%u seconds \n", + p2config->peer_offer_interval); + + printf(" peer_heartbeat_interval=%u seconds \n", + p2config->peer_heartbeat_interval); + + printf(" peer_heartbeat_missed_threshold=%u \n", + p2config->peer_heartbeat_missed_threshold); + + printf(" peer_term_ack_tmo=%u milliseconds \n", + p2config->peer_term_ack_tmo); + + printf(" peer_term_missed_ack_threshold=%u \n", + p2config->peer_term_missed_ack_threshold); + + printf("\n"); + + printf(" neighbor_up_ack_tmo=%u milliseconds \n", + p2config->neighbor_up_ack_tmo); + + printf(" neighbor_up_missed_ack_threshold=%u \n", + p2config->neighbor_up_missed_ack_threshold); + + printf(" neighbor_update_interval_tmo=%u milliseconds \n", + p2config->neighbor_update_interval_tmo); + + printf(" neighbor_activity_timer=%u seconds \n", + p2config->neighbor_activity_timer); + + printf(" neighbor_down_ack_tmo=%u milliseconds \n", + p2config->neighbor_down_ack_tmo); + + printf(" neighbor_down_missed_ack_threshold=%u \n", + p2config->neighbor_down_missed_ack_threshold); + + printf("\n"); + return; +} + + +/** + * NAME + * dlep_read_config_file + * + * SYNOPSIS + * void + * dlep_read_config_file(dlep_config_t *p2config) + * + * DESCRIPTION + * This function parses the configuration file and assigns + * the appropriate parameters in the config struct. + * + * INPUT PARAMETERS + * p2config - This is a pointer to the DLEP configuration data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_read_config_file (dlep_config_t *p2config) +{ + int i, line_count; + uint32_t temp; + + FILE *fp; + +#define MAX_INPUT_LENGTH ( 512 ) + char input_string[MAX_INPUT_LENGTH]; + +#define ARGC_MAX ( 5 ) + uint32_t argc; + char *argv[ARGC_MAX]; + + fp = fopen(p2config->filename, "r"); + if (!fp) { + printf("Error: problem opening config file: %s\n", + p2config->filename); + return; + } + + line_count = 0; + while (fgets(input_string, MAX_INPUT_LENGTH, fp)) { + + if (input_string[0] == '\0') { + continue; + } else if (input_string[0] == '#') { + continue; + } + + argv[0] = strtok(input_string, " \t\n"); + argc = 1; + + for (i=1; isim_name, argv[1], DLEP_SIM_NAME_LEN); + } + + /* peer debug flags */ + else if (strncmp(argv[0], "DEBUG_FLAGS", + strlen("DEBUG_FLAGS")) == 0) { + if (dlep_debug_flags) { + /* cli debug flag sticks */ + } else { + dlep_debug_flags = strtoul(argv[1], NULL, 16); + } + } + + else if (strncmp(argv[0], "MANUAL_START", + strlen("MANUAL_START")) == 0) { + p2config->start_on_launch = FALSE; + } + + else if (strncmp(argv[0], "DISCOVERY_START", + strlen("DISCOVERY_START")) == 0) { + p2config->start_on_discovery = TRUE; + } + + else if (strncmp(argv[0], "LOCAL_UDP_PORT", + strlen("LOCAL_UDP_PORT")) == 0) { + p2config->local_udp_port = strtoul(argv[1], NULL, 10); + } + + else if (strncmp(argv[0], "LOCAL_TCP_PORT", + strlen("LOCAL_TCP_PORT")) == 0) { + p2config->local_tcp_port = strtoul(argv[1], NULL, 10); + } + + else if (strncmp(argv[0], "LOCAL_IPV4", + strlen("LOCAL_IPV4")) == 0) { + strcpy(p2config->local_ipv4_dot, argv[1]); + + ipv4_dot_decimal2digits(&p2config->local_ipv4, argv[1]); + } + + else if (strncmp(argv[0], "ROUTER_UDP_PORT", + strlen("ROUTER_UDP_PORT")) == 0) { + p2config->router_udp_port = strtoul(argv[1], NULL, 10); + } + + else if (strncmp(argv[0], "ROUTER_TCP_PORT", + strlen("ROUTER_TCP_PORT")) == 0) { + p2config->router_tcp_port = strtoul(argv[1], NULL, 10); + } + + else if (strncmp(argv[0], "ROUTER_IPV4", + strlen("ROUTER_IPV4")) == 0) { + strcpy(p2config->router_ipv4_dot, argv[1]); + + ipv4_dot_decimal2digits(&p2config->router_ipv4, argv[1]); + p2config->router_ipv4.v4_addr.v4_addr32 = + htonl(p2config->router_ipv4.v4_addr.v4_addr32); + } + + else if (strncmp(argv[0], "TYPE_DESCRIPTION", + strlen("TYPE_DESCRIPTION")) == 0) { + strncpy(p2config->local_type_description, + argv[1], RFC5444_TLV_PEER_TYPE_MAX_LENGTH); + + p2config->local_type_description[RFC5444_TLV_PEER_TYPE_MAX_LENGTH] = '\0'; + } + + else if (strncmp(argv[0], "LOCAL_ID", + strlen("LOCAL_ID")) == 0) { + temp = strtoul(argv[1], NULL, 10); + p2config->local_id = temp; + } + + else if (strncmp(argv[0], "DLEP_PEER_HEARTBEAT_INTERVAL", + strlen("DLEP_PEER_HEARTBEAT_INTERVAL")) == 0) { + p2config->peer_heartbeat_interval = strtoul(argv[1], NULL, 10); + + if (p2config->peer_heartbeat_interval < + DLEP_PEER_HEARTBEAT_INTERVAL_MIN) { + p2config->peer_heartbeat_interval = + DLEP_PEER_HEARTBEAT_INTERVAL_MIN; + } + + if (p2config->peer_heartbeat_interval > + DLEP_PEER_HEARTBEAT_INTERVAL_MAX) { + p2config->peer_heartbeat_interval = + DLEP_PEER_HEARTBEAT_INTERVAL_MAX; + } + } + + else if (strncmp(argv[0], "DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD", + strlen("DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD")) == 0) { + p2config->peer_heartbeat_missed_threshold = + strtoul(argv[1], NULL, 10); + + if (p2config->peer_heartbeat_missed_threshold < + DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_MIN) { + p2config->peer_heartbeat_missed_threshold = + DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_MIN; + } + + if (p2config->peer_heartbeat_missed_threshold > + DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_MAX) { + p2config->peer_heartbeat_missed_threshold = + DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_MAX; + } + } + + else if (strncmp(argv[0], "DLEP_PEER_TERM_ACK_TMO", + strlen("DLEP_PEER_TERM_ACK_TMO")) == 0) { + p2config->peer_term_ack_tmo = strtoul(argv[1], NULL, 10); + + if (p2config->peer_term_ack_tmo < + DLEP_PEER_TERM_ACK_TMO_MIN) { + p2config->peer_term_ack_tmo = + DLEP_PEER_TERM_ACK_TMO_MIN; + } + + if (p2config->peer_term_ack_tmo > + DLEP_PEER_TERM_ACK_TMO_MAX) { + p2config->peer_term_ack_tmo = + DLEP_PEER_TERM_ACK_TMO_MAX; + } + } + + else if (strncmp(argv[0], "DLEP_PEER_TERM_MISSED_ACK_THRESHOLD", + strlen("DLEP_PEER_TERM_MISSED_ACK_THRESHOLD")) == 0) { + p2config->peer_term_missed_ack_threshold = + strtoul(argv[1], NULL, 10); + + if (p2config->peer_term_missed_ack_threshold < + DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_MIN) { + p2config->peer_term_missed_ack_threshold = + DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_MIN; + } + + if (p2config->peer_term_missed_ack_threshold > + DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_MAX) { + p2config->peer_term_missed_ack_threshold = + DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_MAX; + } + } + + else if (strncmp(argv[0], "DLEP_NEIGHBOR_UP_ACK_TMO", + strlen("DLEP_NEIGHBOR_UP_ACK_TMO")) == 0) { + p2config->neighbor_up_ack_tmo = strtoul(argv[1], NULL, 10); + + if (p2config->neighbor_up_ack_tmo < + DLEP_NEIGHBOR_UP_ACK_TMO_MIN) { + p2config->neighbor_up_ack_tmo = + DLEP_NEIGHBOR_UP_ACK_TMO_MIN; + } + + if (p2config->neighbor_up_ack_tmo > + DLEP_NEIGHBOR_UP_ACK_TMO_MAX) { + p2config->neighbor_up_ack_tmo = + DLEP_NEIGHBOR_UP_ACK_TMO_MAX; + } + } + + else if (strncmp(argv[0], "DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD", + strlen("DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD")) == 0) { + p2config->neighbor_up_missed_ack_threshold = + strtoul(argv[1], NULL, 10); + + if (p2config->neighbor_up_missed_ack_threshold < + DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_MIN) { + p2config->neighbor_up_missed_ack_threshold = + DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_MIN; + } + + if (p2config->neighbor_up_missed_ack_threshold > + DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_MAX) { + p2config->neighbor_up_missed_ack_threshold = + DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_MAX; + } + } + + else if (strncmp(argv[0], "DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO", + strlen("DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO")) == 0) { + p2config->neighbor_update_interval_tmo = + strtoul(argv[1], NULL, 10); + + if (p2config->neighbor_update_interval_tmo > 0) { + if (p2config->neighbor_update_interval_tmo < + DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_MIN) { + p2config->neighbor_update_interval_tmo = + DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_MIN; + } + + if (p2config->neighbor_update_interval_tmo > + DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_MAX) { + p2config->neighbor_update_interval_tmo = + DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_MAX; + } + } + } + + else if (strncmp(argv[0], "DLEP_NEIGHBOR_ACTIVITY_TIMER", + strlen("DLEP_NEIGHBOR_ACTIVITY_TIMER")) == 0) { + p2config->neighbor_activity_timer = strtoul(argv[1], NULL, 10); + + if (!p2config->neighbor_activity_timer) { + if (p2config->neighbor_activity_timer < + DLEP_NEIGHBOR_ACTIVITY_TIMER_MIN) { + p2config->neighbor_activity_timer = + DLEP_NEIGHBOR_ACTIVITY_TIMER_MIN; + } + + if (p2config->neighbor_activity_timer > + DLEP_NEIGHBOR_ACTIVITY_TIMER_MAX) { + p2config->neighbor_activity_timer = + DLEP_NEIGHBOR_ACTIVITY_TIMER_MAX; + } + } + } + + else if (strncmp(argv[0], "DLEP_NEIGHBOR_DOWN_ACK_TMO", + strlen("DLEP_NEIGHBOR_DOWN_ACK_TMO")) == 0) { + p2config->neighbor_down_ack_tmo = strtoul(argv[1], NULL, 10); + + if (p2config->neighbor_down_ack_tmo < + DLEP_NEIGHBOR_DOWN_ACK_TMO_MIN) { + p2config->neighbor_down_ack_tmo = + DLEP_NEIGHBOR_DOWN_ACK_TMO_MIN; + } + + if (p2config->neighbor_down_ack_tmo > + DLEP_NEIGHBOR_DOWN_ACK_TMO_MAX) { + p2config->neighbor_down_ack_tmo = + DLEP_NEIGHBOR_DOWN_ACK_TMO_MAX; + } + } + + else if (strncmp(argv[0], "DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD", + strlen("DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD")) == 0) { + p2config->neighbor_down_missed_ack_threshold = + strtoul(argv[1], NULL, 10); + + if (p2config->neighbor_down_missed_ack_threshold < + DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_MIN) { + p2config->neighbor_down_missed_ack_threshold = + DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_MIN; + } + + if (p2config->neighbor_down_missed_ack_threshold > + DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_MAX) { + p2config->neighbor_down_missed_ack_threshold = + DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_MAX; + } + } + + else { + printf("%s-%u Unknown config file option -%s-\n", + __FUNCTION__, + __LINE__, + argv[0]); + } + } + + fclose(fp); + return; +} + diff --git a/dlep_radio_ipv4/dlep_config.h b/dlep_radio_ipv4/dlep_config.h new file mode 100644 index 0000000..7f2c156 --- /dev/null +++ b/dlep_radio_ipv4/dlep_config.h @@ -0,0 +1,267 @@ +/*---------------------------------------------------------------------- + * dlep_config.h - routines to parse the config file + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CONFIG_H__ +#define __DLEP_CONFIG_H__ + +#include +#include +#include + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" +#include "stw_system_timer.h" + +#include "rfc5444_types.h" + + + + +#define ROUTER_DEFAULT_PORT ( 5000 ) +#define RADIO_DEFAULT_PORT ( 5001 ) + + +/* + * The configuration range for the router offer timeout + * in seconds. The MIM is retransmitted if the ROM is + * not received. + */ +#define DLEP_PEER_OFFER_INTERVAL_MIN ( 1 ) +#define DLEP_PEER_OFFER_INTERVAL_MAX ( 60 ) +#define DLEP_PEER_OFFER_INTERVAL_DEFAULT ( 5 ) + +/* + * The configuration range for the peer heartbeat timeout. + * This is the time that each node, server and client, + * expects to receive the peer heartbeat. 0 disables. + * Time units are in seconds. + */ +#define DLEP_PEER_HEARTBEAT_INTERVAL_MIN ( 1 ) +#define DLEP_PEER_HEARTBEAT_INTERVAL_MAX ( 60 ) +#define DLEP_PEER_HEARTBEAT_INTERVAL_DEFAULT ( 5 ) + +/* + * The number of consecutive missed HBs that result in + * a failure. + */ +#define DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_MIN ( 2 ) +#define DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_MAX ( 8 ) +#define DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_DEFAULT ( 3 ) + + +/* + * The configuration range for the peer terminate ack timeout. + * This is the time the client waits for the peer term ack. + * Time units are milliseconds. + */ +#define DLEP_PEER_TERM_ACK_TMO_MIN ( 100 ) +#define DLEP_PEER_TERM_ACK_TMO_MAX ( 5000 ) +#define DLEP_PEER_TERM_ACK_TMO_DEFAULT ( 1000 ) + +/* + * The max number of peer term ack timeouts that are tolerated. + */ +#define DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_MIN ( 1 ) +#define DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_MAX ( 5 ) +#define DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_DEFAULT ( 3 ) + + +/* + * The configuration range for the neighbor up ack timeout. + * This is the time the client waits for the neighbor up ack. + * Time units are milliseconds. + */ +#define DLEP_NEIGHBOR_UP_ACK_TMO_MIN ( 100 ) +#define DLEP_NEIGHBOR_UP_ACK_TMO_MAX ( 40000 ) +#define DLEP_NEIGHBOR_UP_ACK_TMO_DEFAULT ( 1000 ) + +/* + * The configuration range for the retransmission threshold for + * the neighbor up. + */ +#define DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_MIN ( 1 ) +#define DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_MAX ( 5 ) +#define DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_DEFAULT ( 3 ) + + +/* + * The configuration range the for the periodic neighbor update + * timer. The client sends neighbor updates at this interval. + * Time units are milliseconds. + */ +#define DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_MIN ( 100 ) +#define DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_MAX ( 5000 ) +#define DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_DEFAULT ( 400 ) + +/* + * The configuration range the for the neighbor activity + * timer. The server expects to see traffic on a neighbor + * session during this interval. Time units are seconds. + * 0 disables. + */ +#define DLEP_NEIGHBOR_ACTIVITY_TIMER_MIN ( 0 ) +#define DLEP_NEIGHBOR_ACTIVITY_TIMER_MAX ( 5 ) +#define DLEP_NEIGHBOR_ACTIVITY_TIMER_DEFAULT ( 10 ) + + +/* + * The configuration range the neighbor down ack timeout. + * This is the time the client waits for the neighbor down ack. + * Time units are milliseconds. + */ +#define DLEP_NEIGHBOR_DOWN_ACK_TMO_MIN ( 100 ) +#define DLEP_NEIGHBOR_DOWN_ACK_TMO_MAX ( 5000 ) +#define DLEP_NEIGHBOR_DOWN_ACK_TMO_DEFAULT ( 1000 ) + +/* + * The max number of neighbor down ack timeouts that are tolerated. + * Once the threshold is reached, neighbor downs are stopped + * and the neighbor cleaned up. + */ +#define DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_MIN ( 1 ) +#define DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_MAX ( 5 ) +#define DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_DEFAULT ( 3 ) + + +#define DLEP_FILENAME_LEN ( 128 ) +#define ROOT_PATH_LEN ( 512 ) +#define DLEP_SIM_NAME_LEN ( 32 ) + + +/* + * Defines the data used to manage config data + * and stateless data + */ +typedef struct { + char filename[DLEP_FILENAME_LEN]; + + char sim_name[DLEP_SIM_NAME_LEN]; + + /* port for the local udp and tcp */ + uint16_t local_udp_port; + uint16_t local_tcp_port; + + /* ipv4 for the local*/ + char local_ipv4_dot[IPV4_ADDR_STRING_LEN]; + ipv4_address_t local_ipv4; + + /* port for the client */ + uint16_t router_udp_port; + uint16_t router_tcp_port; + boolean_t router_port_present; + + /* The router IPv4 address info */ + char router_ipv4_dot[IPV4_ADDR_STRING_LEN]; + ipv4_address_t router_ipv4; + boolean_t router_ipv4_present; + + /* Used by radio discovery */ + char dlep_multicast_ipv4_dot[IPV4_ADDR_STRING_LEN]; + ipv4_address_t dlep_multicast_ipv4; + + + /* + * Configuration data + */ + char local_type_description[RFC5444_TLV_PEER_TYPE_MAX_LENGTH+1]; + + + uint16_t flow_control; + uint16_t auth_type; + + boolean_t start_on_launch; + boolean_t start_on_discovery; + + uint32_t local_id; + + //FIX -- uint8_t heartbeat_interval; + + uint32_t peer_offer_interval; + + /* 0-60 seconds. 0-disables. Must match the peer's interval */ + uint32_t peer_heartbeat_interval; + + /* missed HBs that indicate failure */ + uint32_t peer_heartbeat_missed_threshold; + + uint32_t peer_term_ack_tmo; + uint32_t peer_term_missed_ack_threshold; + + uint32_t neighbor_up_ack_tmo; + uint32_t neighbor_up_missed_ack_threshold; + + /* to drive periodic updates in milliseconds, 400 default */ + uint32_t neighbor_update_interval_tmo; + + uint32_t neighbor_activity_timer; + + uint32_t neighbor_down_ack_tmo; + uint32_t neighbor_down_missed_ack_threshold; + + int dlep_udp_sockfd; + int dlep_tcp_sockfd; + int dlep_tcp_client_sockfd; + + struct sockaddr_in dlep_addr; + struct sockaddr_in client; + struct sockaddr_in client_udp; + + struct ip_mreq group; + int reuse; + + int client_lenght; + socklen_t dlep_sock_len; + + struct sockaddr_in msg_addr; + socklen_t msg_sock_len; + +} dlep_config_t; + + + + +extern +dlep_config_t *dlep_get_config_ptr(void); + +extern void +dlep_default_config(void); + +extern void +dlep_display_config(dlep_config_t *p2config); + +extern void +dlep_read_config_file(dlep_config_t *p2config); + + +#endif + diff --git a/dlep_radio_ipv4/dlep_context_neighbor.c b/dlep_radio_ipv4/dlep_context_neighbor.c new file mode 100644 index 0000000..54b0969 --- /dev/null +++ b/dlep_radio_ipv4/dlep_context_neighbor.c @@ -0,0 +1,293 @@ +/*---------------------------------------------------------------------- + * dlep_context_neighbor.c -- neighbor context management routines + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include +#include + +#include "stw_system_timer.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_server_neighbor_fsm.h" +#include "dlep_context_neighbor.h" + + +static uint16_t sid = 0; + + +static uint16_t sid_alloc (void) +{ + sid++; + return (sid); +} + + +/** + * NAME + * dlep_get_next_neighbor_id + * + * SYNOPSIS + * #include "dlep_context_neighbor.h" + * uint16_t + * dlep_get_next_neighbor_id(void) + * + * DESCRIPTION + * This function returns the next neighbor ID. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * Next neighbor ID + * + */ +uint16_t +dlep_get_next_neighbor_id (void) +{ + return (sid_alloc()); +} + + +/** + * NAME + * dlep_neighbor_init + * + * SYNOPSIS + * #include "dlep_context_neighbor.h" + * void + * dlep_neighbor_init(dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function initializes the neighbor context data after the + * neighbor has been allocated. + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context + * + * OUTPUT PARAMETERS + * p2neighbor - updated + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_init (dlep_context_neighbor_t *p2neighbor) +{ + if (!p2neighbor) { + return; + } + + p2neighbor->p2next_neighbor = NULL; + + p2neighbor->local_id = 0; + + /* The global neighbor id to be assigned by the server */ + p2neighbor->sequence = 0; + + p2neighbor->status_code = RFC5444_SUCCESS; + + /* + * Saved sequence number to match the neighbor init + * ACK from the router. + */ + p2neighbor->expected_neighbor_init_ack_sequence = 0; + p2neighbor->expected_neighbor_term_ack_sequence = 0; + p2neighbor->expected_neighbor_address_response_sequence = 0; + p2neighbor->expected_neighbor_link_char_response_sequence = 0; + + /* + * RF metrics + */ + p2neighbor->rlq_tx = 100; + p2neighbor->resources = 100; + p2neighbor->latency = 10; + p2neighbor->cdr_tx = 1000000000; + p2neighbor->mdr_tx = 1000000000; + p2neighbor->mtu = 1500; + + /* + * This is the number of times the init ACK timer has + * expired waiting on the init ACK. + */ + p2neighbor->neighbor_up_ack_tmo_count = 0; + + /* + * This is the number of times the update ACK timer has + * expired waiting on the update ACK. + */ + p2neighbor->neighbor_update_ack_tmo_count = 0; + + /* + * used by the activity tmr to track messages on the neighbor neighbor + * TRUE == active + */ + p2neighbor->neighbor_activity_flag = 0; + + /* + * default activity timer duration, seconds + */ + p2neighbor->neighbor_activity_duration = 5; + + /* Initialize IPv4/IPv6 addresses */ + ipv4_zero_address(&p2neighbor->ipv4_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + + p2neighbor->ipv6_subnet_prefix = 0; + p2neighbor->update_ipv6_operation = RFC5444_NO_ADDRESS; + + /* + * This is the number of times the terminate ACK timer has + * expired waiting on the terminate ACK. + */ + p2neighbor->neighbor_down_ack_tmo_count = 0; + + p2neighbor->neighbor_fsm_handle = NULL; + dlep_neighbor_fsm_create(p2neighbor); + + stw_system_timer_prepare(&p2neighbor->neighbor_init_ack_tmr); + stw_system_timer_prepare(&p2neighbor->neighbor_update_ack_tmr); + stw_system_timer_prepare(&p2neighbor->neighbor_activity_tmr); + stw_system_timer_prepare(&p2neighbor->neighbor_update_interval_tmr); + stw_system_timer_prepare(&p2neighbor->neighbor_term_ack_tmr); + + return; +} + + +/** + * NAME + * dlep_neighbor_clear + * + * SYNOPSIS + * #include "dlep_context_neighbor.h" + * void + * dlep_neighbor_clear(dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function should be called as part of the work needed to + * tear down a neighbor. All activity is stopped and neighbor + * internal resources are released. + * + * The context block itself is not released. + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context + * + * OUTPUT PARAMETERS + * p2neighbor - updated + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_clear (dlep_context_neighbor_t *p2neighbor) +{ + if (!p2neighbor) { + return; + } + + p2neighbor->local_id = 0; + + mac_zero_address(p2neighbor->mac_address); + + stw_system_timer_stop(&p2neighbor->neighbor_init_ack_tmr); + stw_system_timer_stop(&p2neighbor->neighbor_update_ack_tmr); + stw_system_timer_stop(&p2neighbor->neighbor_activity_tmr); + stw_system_timer_stop(&p2neighbor->neighbor_update_interval_tmr); + stw_system_timer_stop(&p2neighbor->neighbor_term_ack_tmr); + return; +} + + +/** + * NAME + * dlep_neighbor_display + * + * SYNOPSIS + * #include "dlep_context_neighbor.h" + * void + * dlep_neighbor_display(dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function displays the neighbor context data + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_neighbor_display (dlep_context_neighbor_t *p2neighbor) +{ + ipv4_address_t addr; + if (!p2neighbor) { + return; + } + + mac_print_address (" Neighbor MAC=", p2neighbor->mac_address); + + addr.v4_addr.v4_addr32 = p2neighbor->ipv4_address.v4_addr.v4_addr32; + ipv4_print_address(" Neighbor IPv4=", &addr); + + /* ipv4_print_address(" Neighbor IPv4=",&p2neighbor->ipv4_address); + ipv4_print_address(NULL,&p2neighbor->ipv4_address); */ + + printf(" activity timer=%u milliseconds \n", + p2neighbor->neighbor_activity_duration); + + printf(" Metrics:\n"); + printf(" RLQ TX=%u <0-100>", p2neighbor->rlq_tx); + printf(" RLQ RX=%u <0-100> \n", p2neighbor->rlq_rx); + printf(" Resources =%u <0-100> \n", p2neighbor->resources); + printf(" Latency=%llu milliseconds \n", p2neighbor->latency); + printf(" CDR TX=%llu bps ", p2neighbor->cdr_tx); + printf(" CDR RX=%llu bps \n", p2neighbor->cdr_rx); + printf(" MDR TX=%llu bps ", p2neighbor->mdr_tx); + printf(" MDR RX=%llu bps \n", p2neighbor->mdr_rx); + printf(" MTU=%u \n",p2neighbor->mtu); + + return; +} + + diff --git a/dlep_radio_ipv4/dlep_context_neighbor.h b/dlep_radio_ipv4/dlep_context_neighbor.h new file mode 100644 index 0000000..993a501 --- /dev/null +++ b/dlep_radio_ipv4/dlep_context_neighbor.h @@ -0,0 +1,151 @@ +/*---------------------------------------------------------------------- + * dlep_context_neighbor.h -- Session context definitions + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CONTEXT_NEIGHBOR_H__ +#define __DLEP_CONTEXT_NEIGHBOR_H__ + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" +#include "stw_system_timer.h" + +#include "rfc5444_types.h" + + + +/* + * Defines the data used to manage a neighbor + * and its stateful data + */ +typedef struct context_neighbor_t_ { + struct context_neighbor_t_ *p2next_neighbor; + + /* pointer back to the peer context */ + void *p2peer; + + /* used to track responses */ + uint16_t sequence; + + /* a locally metered neighbor ID for user I/F */ + uint32_t local_id; + + /* Set the status code from the last neighbor operation + * or as required to sending a neighbor message. + */ + uint16_t status_code; + + /* squirrel away the sequence number to track responses */ + uint16_t expected_neighbor_init_ack_sequence; + uint16_t expected_neighbor_term_ack_sequence; + uint16_t expected_neighbor_address_response_sequence; + uint16_t expected_neighbor_link_char_response_sequence; + + uint8_t mac_address[MAC_ADDR_LEN_IN_BYTES]; + ipv4_address_t ipv4_address; + ipv6_address_t ipv6_address; + + /* + * neighbor_update_address layer 3 addresses + * update layer 3 addresses for the sim + */ + uint8_t update_ipv4_operation; + ipv4_address_t update_ipv4_address; + + uint8_t update_ipv6_operation; + uint8_t ipv6_subnet_prefix; + ipv6_address_t update_ipv6_address; + ipv6_address_t update_ipv6_subnet_address; + + /* + * RF metrics + */ +#if 0 + uint8_t rlq; /* 0-poor, 100-good */ + uint8_t resources; /* 0-100% */ + uint16_t latency; /* millisec */ + uint64_t cdr; /* kbps */ + uint64_t mdr; /* kbps */ +#endif + uint8_t rlq_rx; /* 0-poor, 100-good */ + uint8_t rlq_tx; /* 0-poor, 100-good */ + uint8_t resources_rx; /* 0 -100% */ + uint8_t resources_tx; /* 0 -100% */ + uint64_t latency; /* millisec */ + uint8_t resources; /* 0 -100% */ + uint16_t mtu; + uint64_t cdr_rx; /* bps */ + uint64_t cdr_tx; /* bps */ + uint64_t mdr_tx; /* bps */ + uint64_t mdr_rx; /* bps */ + uint64_t mrw; /* credits */ + uint64_t rrw; /* credits */ + uint64_t cgr; /* credits */ + uint32_t eft; /* millisec */ + + boolean_t CREDIT_NOT_SUPPORTED; /* credits */ + /* neighbor state machine handle */ + void *neighbor_fsm_handle; + + /* state machine working variables */ + uint32_t neighbor_up_ack_tmo_count; + uint32_t neighbor_update_ack_tmo_count; + uint32_t neighbor_down_ack_tmo_count; + + uint32_t neighbor_activity_duration; + boolean_t neighbor_activity_flag; + + stw_tmr_t neighbor_init_ack_tmr; + stw_tmr_t neighbor_update_ack_tmr; + stw_tmr_t neighbor_activity_tmr; + stw_tmr_t neighbor_update_interval_tmr; + stw_tmr_t neighbor_term_ack_tmr; + +} dlep_context_neighbor_t; + + + + +extern uint16_t +dlep_get_next_neighbor_id(void); + +extern void +dlep_neighbor_init(dlep_context_neighbor_t *p2neighbor); + +extern void +dlep_neighbor_clear(dlep_context_neighbor_t *p2neighbor); + +extern void +dlep_neighbor_display(dlep_context_neighbor_t *p2neighbor); + + +#endif + diff --git a/dlep_radio_ipv4/dlep_context_neighbor_management.c b/dlep_radio_ipv4/dlep_context_neighbor_management.c new file mode 100644 index 0000000..54f64c6 --- /dev/null +++ b/dlep_radio_ipv4/dlep_context_neighbor_management.c @@ -0,0 +1,470 @@ +/*---------------------------------------------------------------------- + * dlep_context_neighbor_management.c + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include +#include +#include +#include + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_context_peer.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" + + +static uint32_t local_id = 5000; + + +/* + * Porting: The implementation of the functions in this file can be + * changed to platform specific resource management APIs, such as + * AVL or RB trees. + */ + + +/* + * function to meter a local id + */ +static uint32_t +dlep_get_next_local_id (void) +{ + local_id++; + if (!local_id) { + local_id++; + } + return (local_id); +} + + +/** + * NAME + * dlep_allocate_session + * + * SYNOPSIS + * #include "dlep_context_neighbor_management.h" + * dlep_context_neighbor_t + * *dlep_neighbor_allocate(dlep_context_peer_t *p2peer, + * uint8_t *mac_address) + * + * DESCRIPTION + * Allocates a neighbor context block for a new neighbor. The + * neighbor context is set to defaults and put in the database. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context. + * + * mac_address - This is a pointer the MAC address assigned + * to the neighbor. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * A pointer to the newly allocated neighbor context. + * NULL is returned if the allocation failed. + * + */ +dlep_context_neighbor_t +*dlep_neighbor_allocate (dlep_context_peer_t *p2peer, + uint8_t *mac_address) +{ + dlep_context_neighbor_t *p2ctx; + + if (!p2peer) { + return (NULL); + } + + if (!mac_address) { + return (NULL); + } + + p2ctx = NULL; + p2ctx = malloc(sizeof(dlep_context_neighbor_t)); + if (!p2ctx) { + DLEP_DEBUG("%s-%u Error: No resource for new neighbor block \n", + DEBUG_FUNCTION, + DEBUG_LINE); + return (NULL); + } + + dlep_neighbor_init(p2ctx); + + p2ctx->p2peer = p2peer; + + p2ctx->local_id = dlep_get_next_local_id(); + + /* The sequence number must be used to correlate the + * ACKs with the original request. + */ + p2ctx->sequence = 0; + + mac_copy_address(p2ctx->mac_address, mac_address); + + /* + * insert the new context in the list + */ + p2ctx->p2next_neighbor = p2peer->neighbor_list; + p2peer->neighbor_list = p2ctx; + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Allocated local id=%u neighbor %p \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2ctx->local_id, + p2ctx); + } + + return (p2ctx); +} + + +/** + * NAME + * dlep_neighbor_remove + * + * SYNOPSIS + * #include "dlep_context_neighbor_management.h" + * void + * dlep_neighbor_remove(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t **p2neighbor) + * + * DESCRIPTION + * This function removes the neighbor context block from + * the nodes database. Dynamically allocated memory + * must be freed prior to removing a neighbor. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context. + * + * p2neighbor - A pointer to the neighbor context block pointer + * + * OUTPUT PARAMETERS + * p2neighbor - updated. + * + * RETURN VALUE + * none + * + */ +void +dlep_neighbor_remove (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t **p2neighbor) +{ + dlep_context_neighbor_t *p2previous; + dlep_context_neighbor_t *p2ctx; + + if (!p2peer) { + DLEP_DEBUG("%s-%u peer context null \n", + DEBUG_FUNCTION, + DEBUG_LINE); + return; + } + + p2ctx = p2peer->neighbor_list; + + if (!p2ctx) { + DLEP_DEBUG("%s-%u Empty neighbor list \n", + DEBUG_FUNCTION, + DEBUG_LINE); + return; + } + + if (p2ctx == *p2neighbor) { + p2peer->neighbor_list = p2ctx->p2next_neighbor; + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u deallocating local id=%u %p \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2ctx->local_id, + p2ctx); + } + + /* now free the block */ + free(p2ctx); + + *p2neighbor = NULL; + return; + } + + p2previous = p2peer->neighbor_list; + p2ctx = p2previous->p2next_neighbor; + + while (p2ctx) { + + if (p2ctx == *p2neighbor) { + p2previous->p2next_neighbor = p2ctx->p2next_neighbor; + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u deallocating local id=%u %p \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2ctx->local_id, + p2ctx); + } + + free(p2ctx); + + *p2neighbor = NULL; + break; + + } else { + /* walk the list */ + p2previous = p2ctx; + p2ctx = p2ctx->p2next_neighbor; + } + } + return; +} + + +/** + * NAME + * dlep_get_neighbor_by_local_id + * + * SYNOPSIS + * #include "dlep_context_neighbor_management.h" + * dlep_context_neighbor_t + * *dlep_get_neighbor_by_local_id(dlep_context_peer_t *p2peer, + * uint32_t local_id) + * + * DESCRIPTION + * This function searches the database for the specified local ID + * and returns the neighbor context pointer. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context + * + * local_id - The local ID to locate + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * A pointer to the neighbor context. + * NULL is returned if the neighbor was not found. + * + */ +dlep_context_neighbor_t +*dlep_get_neighbor_by_local_id (dlep_context_peer_t *p2peer, + uint32_t local_id) +{ + dlep_context_neighbor_t *result; + dlep_context_neighbor_t *p2ctx; + + if (!p2peer) { + DLEP_DEBUG("%s-%u null peer context \n", + DEBUG_FUNCTION, + DEBUG_LINE); + return (NULL); + } + + result = NULL; + + p2ctx = p2peer->neighbor_list; + while (p2ctx) { + + if (p2ctx->local_id == local_id) { + result = p2ctx; + break; + + } else { + /* walk the list */ + p2ctx = p2ctx->p2next_neighbor; + } + } + return (result); +} + + +/** + * NAME + * dlep_get_neighbor_by_mac_address + * + * SYNOPSIS + * #include "dlep_context_neighbor_management.h" + * dlep_context_neighbor_t + * *dlep_get_neighbor_by_mac_address(dlep_context_peer_t *p2peer, + * uint8_t *p2mac_address) + * + * DESCRIPTION + * This function searches the database for the specified MAC address + * and returns the neighbor context pointer. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context + * + * p2mac_address - the MAC to locate + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * A pointer to the neighbor context. + * NULL is returned if the neighbor was not found. + * + */ +dlep_context_neighbor_t +*dlep_get_neighbor_by_mac_address (dlep_context_peer_t *p2peer, + uint8_t *p2mac_address) +{ + dlep_context_neighbor_t *result; + dlep_context_neighbor_t *p2ctx; + + if (!p2peer) { + return (NULL); + } + + result = NULL; + + p2ctx = p2peer->neighbor_list; + while (p2ctx) { + + if (mac_compare_address(p2ctx->mac_address, p2mac_address)) { +// printf("\n Checking MAC in the MAC LIST"); + result = p2ctx; + break; + + } else { + /* walk the list */ + p2ctx = p2ctx->p2next_neighbor; + } + } +// printf("\n Not preset MAC in the MAC list"); + return (result); +} + + +/** + * NAME + * dlep_neighbor_deallocate_all + * + * SYNOPSIS + * #include "dlep_context_neighbor_management.h" + * void + * dlep_neighbor_deallocate_all(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function removes and frees all neighbor context blocks + * tied to this node. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_neighbor_deallocate_all (dlep_context_peer_t *p2peer) + +{ + dlep_context_neighbor_t *p2ctx; + + if (!p2peer) { + return; + } + + /* + * Now free each block + */ + while (p2peer->neighbor_list) { + p2ctx = p2peer->neighbor_list; + + /* clear and stop processing */ + dlep_neighbor_clear(p2ctx); + + p2peer->neighbor_list = p2ctx->p2next_neighbor; + free(p2ctx); + } + + /* + * Nullify the node's neighbor list + */ + p2peer->neighbor_list = NULL; + return; +} + + +/** + * NAME + * dlep_neighbor_list_all + * + * SYNOPSIS + * #include "dlep_context_neighbor_management.h" + * void + * dlep_neighbor_list_all(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function displays all established neighbors on + * the peer to stdout. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_neighbor_list_all (dlep_context_peer_t *p2peer) +{ + dlep_context_neighbor_t *p2ctx; + + if (!p2peer) { + return; + } + + p2ctx = p2peer->neighbor_list; + while (p2ctx) { + dlep_neighbor_display(p2ctx); + p2ctx = p2ctx->p2next_neighbor; + } + printf("\n"); + return; +} + + diff --git a/dlep_radio_ipv4/dlep_context_neighbor_management.h b/dlep_radio_ipv4/dlep_context_neighbor_management.h new file mode 100644 index 0000000..200121a --- /dev/null +++ b/dlep_radio_ipv4/dlep_context_neighbor_management.h @@ -0,0 +1,63 @@ +/*---------------------------------------------------------------------- + * dlep_context_neighbor_management.h + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CONTEXT_SESSION_MANAGEMENT_H__ +#define __DLEP_CONTEXT_SESSION_MANAGEMENT_H__ + +#include "dlep_context_neighbor.h" +#include "dlep_context_peer.h" + + +extern dlep_context_neighbor_t +*dlep_neighbor_allocate(dlep_context_peer_t *p2peer, + uint8_t *mac_address); + +extern void +dlep_neighbor_remove(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t **p2context); + +extern dlep_context_neighbor_t +*dlep_get_neighbor_by_local_id(dlep_context_peer_t *p2peer, + uint32_t local_id); + +extern dlep_context_neighbor_t +*dlep_get_neighbor_by_mac_address(dlep_context_peer_t *p2peer, + uint8_t *mac_address); + +extern void +dlep_neighbor_deallocate_all(dlep_context_peer_t *p2peer); + +extern void +dlep_neighbor_list_all(dlep_context_peer_t *p2peer); + + +#endif + diff --git a/dlep_radio_ipv4/dlep_context_peer.c b/dlep_radio_ipv4/dlep_context_peer.c new file mode 100644 index 0000000..4035fe5 --- /dev/null +++ b/dlep_radio_ipv4/dlep_context_peer.c @@ -0,0 +1,476 @@ +/*---------------------------------------------------------------------- + * dlep_context_peer.c -- Routines to manage the peer context data + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "stw_system_timer.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_config.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_peer.h" + + +extern void +dlep_fsm_destroy(dlep_context_peer_t *p2peer); + +extern void +dlep_fsm_create(dlep_context_peer_t *p2peer); + + + +/* Meters a locally unique ID for nodes */ +static uint32_t peer_id_meter = 0; + + +/* + * API to increment seq ID + */ +uint16_t +get_next_sequence_number (dlep_context_peer_t *p2peer) +{ + if (!p2peer) { + return (0); + } + + p2peer->sequence++; + if (!p2peer->sequence) { + p2peer->sequence++; + } + return (p2peer->sequence); +} + + + +/* + * Local API to meter peer IDs + */ +static uint32_t +get_next_peer_id (void) +{ + peer_id_meter++; + if (!peer_id_meter) { + peer_id_meter++; + } + return (peer_id_meter); +} + +/* Below two init functions are added for DLEPv7 */ + +/* + * init optional signal data + */ +static uint32_t init_optional_signal(void) { + + uint32_t opt_signal = 0; + + opt_signal |= (~(~0 << (RFC5444_MAX_MESSAGE_CODE - 1))); + + opt_signal &= (~(1 << (RFC5444_MSG_PEER_UPDATE_RES -1))); + opt_signal &= (~(1 << (RFC5444_MSG_PEER_UPDATE_REQ -1))); + opt_signal &= (~(1 << (RFC5444_MSG_LINK_CHAR_RES -1))); + opt_signal &= (~(1 << (RFC5444_MSG_LINK_CHAR_REQ -1))); + + return opt_signal; +} + +/* + * init optional data item + */ +static uint32_t init_optional_data_item(void) { + + uint32_t opt_data = 0; + + opt_data |= (~(~0 << (RFC5444_MAX_DATA_ITEM - 1))); + + + opt_data &= (~(1 << (RFC5444_TLV_LINK_RESOURCES_METRIC_RX - 1))); + opt_data &= (~(1 << (RFC5444_TLV_LINK_RESOURCES_METRIC_TX - 1))); + opt_data &= (~(1 << (RFC5444_TLV_LINK_RLQ_METRIC_TX -1))); + opt_data &= (~(1 << (RFC5444_TLV_LINK_RLQ_METRIC_RX -1))); + opt_data &= (~(1 << (RFC5444_TLV_CREDIT_WINDOW_STATUS -1))); + opt_data &= (~(1 << (RFC5444_TLV_CREDIT_GRANT -1))); + opt_data &= (~(1 << (RFC5444_TLV_CREDIT_REQUEST -1))); + opt_data &= (~(1 << (RFC5444_TLV_VENDOR_EXTENSION -1))); + opt_data &= (~(1 << (RFC5444_TLV_IPV4_ATTACHED_SUBNET -1))); + opt_data &= (~(1 << (RFC5444_TLV_IPV6_ATTACHED_SUBNET -1))); + + return opt_data; +} + +/** + * NAME + * dlep_peer_init + * + * SYNOPSIS + * #include "dlep_context_peer.h" + * void + * dlep_peer_init(dlep_config_t *p2config, + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function initializes the peer context data after the + * peer has been allocated. The function copies the configuration + * parameters to the peer context. This prevents changes to + * configuration parameters occuring while the protocol is + * active. + * + * INPUT PARAMETERS + * p2config - A pointer to the configuration data + * + * p2peer - A pointer to the peer context + * + * OUTPUT PARAMETERS + * p2peer - updated + * + * RETURN VALUE + * None + * + */ +void +dlep_peer_init (dlep_config_t *p2config, dlep_context_peer_t *p2peer) +{ + if (!p2config || !p2peer) { + return; + } + + p2peer->p2config = p2config; + + /* + * The next_node pointer and the IPv4:Port are already present + */ + p2peer->peer_id = get_next_peer_id(); + + p2peer->sequence = 0; + p2peer->router_id = 0; + p2peer->client_id = 0; + + p2peer->expected_peer_offer_sequence = 0; + p2peer->expected_peer_term_ack_sequence = 0; + p2peer->expected_peer_update_response_sequence = 0; + + p2peer->status_code = RFC5444_SUCCESS; + + strcpy(p2peer->peer_type_description, "no peer description"); + p2peer->peer_type_description[RFC5444_TLV_PEER_TYPE_MAX_LENGTH] = '\0'; + + + p2peer->peer_term_ack_tmo = + p2config->peer_term_ack_tmo; + p2peer->peer_term_missed_ack_threshold = + p2config->peer_term_missed_ack_threshold; + + p2peer->peer_heartbeat_interval = + p2config->peer_heartbeat_interval; + p2peer->peer_heartbeat_missed_threshold = + p2config->peer_heartbeat_missed_threshold; + + p2peer->neighbor_up_ack_tmo = + p2config->neighbor_up_ack_tmo; + p2peer->neighbor_up_missed_ack_threshold = + p2config->neighbor_up_missed_ack_threshold; + + p2peer->neighbor_update_interval_tmo = + p2config->neighbor_update_interval_tmo; + + p2peer->neighbor_activity_timer = + p2config->neighbor_activity_timer; + + p2peer->neighbor_down_ack_tmo = + p2config->neighbor_down_ack_tmo; + p2peer->neighbor_down_missed_ack_threshold = + p2config->neighbor_down_missed_ack_threshold; + + + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + ipv4_zero_address(&p2peer->update_ipv4_address); + + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + ipv6_zero_address(&p2peer->update_ipv6_address); + + + /* + * This is the number of times the timer has + * expired waiting on the ack msg. + */ + p2peer->peer_offer_timeout_count = 0; + p2peer->peer_heartbeat_timeout_count = 0; + p2peer->peer_term_ack_timeout_count = 0; + + /* + * pointer to a single linked list of neighbors associated + * with this node. + */ + p2peer->neighbor_list = NULL; + + p2peer->fsm_handle = NULL; + dlep_fsm_create(p2peer); + + /* + * init optional data and signal item + */ + p2peer->optional_signal = init_optional_signal(); + p2peer->optional_data_item = init_optional_data_item(); + + stw_system_timer_prepare(&p2peer->peer_offer_tmr); + stw_system_timer_prepare(&p2peer->peer_heartbeat_tmr); + stw_system_timer_prepare(&p2peer->peer_term_ack_tmr); + + return; +} + + +/** + * NAME + * dlep_peer_clear + * + * SYNOPSIS + * #include "dlep_context_peer.h" + * void + * dlep_peer_clear(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function should be called as part of the work + * needed to tear down a node. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer data + * structure to be freed. + * + * OUTPUT PARAMETERS + * p2peer - cleared + * + * RETURN VALUE + * None + * + */ +void +dlep_peer_clear (dlep_context_peer_t *p2peer) +{ + RC_STW_t rc; + + if (!p2peer) { + printf("%s-%u peer pointer null \n", + DEBUG_FUNCTION, DEBUG_LINE); + return; + } + + rc = stw_system_timer_stop(&p2peer->peer_offer_tmr); + if (rc != RC_STW_OK) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + + rc = stw_system_timer_stop(&p2peer->peer_heartbeat_tmr); + if (rc != RC_STW_OK) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + + rc = stw_system_timer_stop(&p2peer->peer_term_ack_tmr); + if (rc != RC_STW_OK) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + + p2peer->peer_id = 0; + p2peer->peer_udp_port = 0; + p2peer->peer_tcp_port = 0; + + dlep_fsm_destroy(p2peer); + return; +} + + +/** + * NAME + * dlep_peer_display + * + * SYNOPSIS + * #include "dlep_context_peer.h" + * void + * dlep_peer_display(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function displays the peer node data + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_peer_short_display (dlep_context_peer_t *p2peer) +{ + if (!p2peer) { + return; + } + + printf("\nDLEP Local Client %u \n", + p2peer->peer_id); + + /* printf(" Client ID=%u \n", + p2peer->client_id); + + printf(" Router ID=%u \n", + p2peer->router_id); */ + + printf(" Peer Description=%s \n", + p2peer->peer_type_description); + + printf(" Peer UDP port=%u \n", + p2peer->peer_udp_port); + + printf(" Peer TCP port=%u \n", + p2peer->peer_tcp_port); + + ipv4_print_address(" Peer IPv4", + &p2peer->peer_ipv4); + + return; +} + + +/** + * NAME + * dlep_peer_display + * + * SYNOPSIS + * #include "dlep_context_peer.h" + * void + * dlep_peer_display(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function displays the peer node data + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer data + * structure to be freed. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_peer_display (dlep_context_peer_t *p2peer) +{ + if (!p2peer) { + return; + } + + printf("\nDLEP Local Client %u \n", + p2peer->peer_id); + + /* printf(" Client ID=%u \n", + p2peer->client_id); + + printf(" Router ID=%u \n", + p2peer->router_id); */ + + printf(" Peer Description=%s \n", + p2peer->peer_type_description); + + printf(" Peer UDP port=%u \n", + p2peer->peer_udp_port); + + printf(" Peer TCP port=%u \n", + p2peer->peer_tcp_port); + + ipv4_print_address(" Peer IPv4", + &p2peer->peer_ipv4); + + /* printf(" router offer timeout count=%u \n", + p2peer->peer_offer_timeout_count); */ + + printf(" peer heartbeat missed count=%u \n", + p2peer->peer_heartbeat_timeout_count); + + /* printf(" peer term ack missed count=%u \n", + p2peer->peer_term_ack_timeout_count); */ + + printf(" peer term ack missed threshold=%u \n", + p2peer->peer_term_missed_ack_threshold); + + printf(" neighbor_up_ack_tmo=%u milliseconds \n", + p2peer->neighbor_up_ack_tmo); + + printf(" neighbor_up_missed_ack_threshold=%u \n", + p2peer->neighbor_up_missed_ack_threshold); + + printf(" neighbor_update_interval_tmo=%u milliseconds \n", + p2peer->neighbor_update_interval_tmo); + + printf(" neighbor_activity_timer=%u \n", + p2peer->neighbor_activity_timer); + + printf(" neighbor_down_ack_tmo=%u milliseconds \n", + p2peer->neighbor_down_ack_tmo); + + printf(" neighbor_down_missed_ack_threshold=%u \n", + p2peer->neighbor_down_missed_ack_threshold); + + printf(" Metrics:\n"); + printf(" RLQ TX=%u <0-100>", p2peer->rlq_tx); + printf(" RLQ RX=%u <0-100> \n", p2peer->rlq_rx); + printf(" Resources =%u <0-100>", p2peer->resources); + printf(" Latency=%llu milliseconds \n", p2peer->latency); + printf(" CDR TX=%llu bps ", p2peer->cdr_tx); + printf(" CDR RX=%llu bps \n", p2peer->cdr_rx); + printf(" MDR TX=%llu bps ", p2peer->mdr_tx); + printf(" MDR RX=%llu bps \n", p2peer->mdr_rx); + printf(" MTU=%u \n",p2peer->mtu); + + return; +} + + diff --git a/dlep_radio_ipv4/dlep_context_peer.h b/dlep_radio_ipv4/dlep_context_peer.h new file mode 100644 index 0000000..274cb0b --- /dev/null +++ b/dlep_radio_ipv4/dlep_context_peer.h @@ -0,0 +1,228 @@ +/*---------------------------------------------------------------------- + * dlep_context_peer.h -- routines to manage the peer context data + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CONTEXT_PEER_H__ +#define __DLEP_CONTEXT_PEER_H__ + +#include +#include +#include + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" +#include "stw_system_timer.h" + +#include "rfc5444_scratch_pad.h" + +#include "dlep_config.h" +#include "dlep_context_neighbor.h" + + +#define ERROR_STRING_LENGTH ( 32 ) + + + +/* + * Defines the data used to manage a node + */ +typedef struct context_peer_t_ { + struct context_peer_t_ *p2next_peer; + + /* a locally unique ID for display and user I/F */ + uint32_t peer_id; + + /* DLEP IDs */ + uint32_t router_id; + uint32_t client_id; + + /* link to the configuration data */ + dlep_config_t *p2config; + + /* + * incremented with each peer and neighbor message + * transmitted + */ + uint16_t sequence; + + /* expected seq set when the modem init is sent */ + uint16_t expected_peer_offer_sequence; + + /* expected seq set when the peer term is sent */ + uint16_t expected_peer_term_ack_sequence; + + /* expected seq set when the peer update is sent */ + uint16_t expected_peer_update_response_sequence; + + /* + * If the return code is non-zero, an error occurred + * and the Return Status TLV will be inserted when a + * response is built. + */ + uint16_t status_code; + + char peer_type_description[RFC5444_TLV_PEER_TYPE_MAX_LENGTH+1]; + + /* + * peer ip address info to uniquely discriminate nodes + */ +#if 0 + uint16_t peer_port; +#endif + uint16_t peer_udp_port; + uint16_t peer_tcp_port; + ipv4_address_t peer_ipv4; + + struct sockaddr_in msg_addr; + + socklen_t msg_sock_len; + + ipv4_address_t ipv4_address; + ipv6_address_t ipv6_address; + + + ipv4_address_t ipv4_attached_subnet; + ipv6_address_t ipv6_attached_subnet; + + uint32_t peer_term_ack_tmo; + uint32_t peer_term_missed_ack_threshold; + + uint32_t peer_heartbeat_interval; + uint32_t peer_heartbeat_missed_threshold; + + /* + * peer_update addresses + * update layer 3 addresses for the sim + */ + uint8_t update_ipv4_operation; + ipv4_address_t update_ipv4_address; + + uint8_t update_ipv6_operation; + ipv6_address_t update_ipv6_address; + + + uint32_t neighbor_up_ack_tmo; + uint32_t neighbor_up_missed_ack_threshold; + + /* + * used by the client to drive periodic updates + * in milliseconds + */ + uint32_t neighbor_update_interval_tmo; + + uint32_t neighbor_activity_timer; + + uint32_t neighbor_down_ack_tmo; + uint32_t neighbor_down_missed_ack_threshold; + + + /* + * Peer Link-wide RF metrics + */ + uint16_t peer_supported_metrics; + + uint8_t rlq_rx; /* 0-poor, 100-good */ + uint8_t rlq_tx; /* 0-poor, 100-good */ + uint8_t resources_rx; /* 0 -100% */ + uint8_t resources_tx; /* 0 -100% */ + uint8_t resources; /* added for v27 */ + uint64_t latency; /* millisec */ + uint64_t cdr_rx; /* bps */ + uint64_t cdr_tx; /* bps */ + uint64_t mdr_tx; /* bps */ + uint64_t mdr_rx; /* bps */ + uint32_t eft; /* millisec */ + uint16_t mtu; /* added for v27 */ + /* + * Adding optional and data signal + */ + uint32_t optional_signal; + uint32_t optional_data_item; + + /* + * A few peer state working variables + */ + uint32_t peer_offer_timeout_count; + uint32_t peer_heartbeat_timeout_count; + uint32_t peer_term_ack_timeout_count; + + /* + * The list of neighbors associated with this node. + * For simplicity, this is a linked list. If the + * number of neighbors per peer is small, this is + * not a problem. If the numbers increase we can + * go to a hasher. + */ + dlep_context_neighbor_t *neighbor_list; + + /* + * peer state machine handle + */ + void *fsm_handle; + + stw_tmr_t peer_offer_tmr; + stw_tmr_t peer_heartbeat_tmr; + stw_tmr_t peer_term_ack_tmr; + + /* + * When a received message is parsed, its contents are + * parsed here. The data is then passed to the state + * machine where it is processed relative to the + * state for correctness. + */ + rfc5444_packet_scratch_pad_t packet_scratch_pad; + rfc5444_message_scratch_pad_t message_scratch_pad; + + uint32_t ttl; + +} dlep_context_peer_t; + + + +extern uint16_t +get_next_sequence_number(dlep_context_peer_t *p2peer); + +extern void +dlep_peer_init(dlep_config_t *p2config, dlep_context_peer_t *p2peer); + +extern void +dlep_peer_clear(dlep_context_peer_t *p2peer); + +extern void +dlep_peer_short_display(dlep_context_peer_t *p2peer); + +extern void +dlep_peer_display(dlep_context_peer_t *p2peer); + + +#endif + diff --git a/dlep_radio_ipv4/dlep_context_peer_management.c b/dlep_radio_ipv4/dlep_context_peer_management.c new file mode 100644 index 0000000..dc959e6 --- /dev/null +++ b/dlep_radio_ipv4/dlep_context_peer_management.c @@ -0,0 +1,465 @@ +/*---------------------------------------------------------------------- + * dlep_context_node_management.c + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include +#include +#include +#include + +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" + + +/* + * List anchor for the local nodes + */ +static dlep_context_peer_t *p2peer_list = NULL; + + +/** + * NAME + * dlep_allocate_node + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * dlep_context_peer_t + * *dlep_peer_allocate(ipv4_address_t *p2ipv4, uint16_t udp_port, tcp_port) + * + * DESCRIPTION + * Allocates a context block for a new node. The context + * block is set to defaults and put on the list. The IPv4 + * address and the port uniquely discriminate the node. + * + * INPUT PARAMETERS + * p2ipv4 - This is a pointer to the IPv4 address structure. + * + * udp_port - This is the udp port for the node. + * + * tcp_port - This is the tcp port for the node. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * A pointer to the newly allocated nod context. + * NULL is returned if the block could not be allocated. + * + */ +dlep_context_peer_t +*dlep_peer_allocate (ipv4_address_t *p2ipv4, uint16_t udp_port, uint16_t tcp_port) +{ + dlep_context_peer_t *p2ctx; + + p2ctx = NULL; + p2ctx = malloc(sizeof(dlep_context_peer_t)); + if (!p2ctx) { + DLEP_DEBUG("%s-%u Error: No resources for new peer context block \n", + DEBUG_FUNCTION, + DEBUG_LINE); + + return (NULL); + } + + ipv4_copy_address(&p2ctx->peer_ipv4, p2ipv4); + p2ctx->peer_udp_port = udp_port; + p2ctx->peer_tcp_port = tcp_port; + + /* + * jam the new peer context in the list + */ + p2ctx->p2next_peer = p2peer_list; + p2peer_list = p2ctx; + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Allocated peer block %p \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2ctx); + } + + return (p2ctx); +} + + +/** + * NAME + * dlep_peer_remove + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * void + * dlep_peer_remove(dlep_context_peer_t **p2peer) + * + * DESCRIPTION + * This function removes a peer context block from the database. + * All dynamically allocate resources must be freed prior to + * removing a node. + * + * INPUT PARAMETERS + * p2peer - A pointer to the peer context block pointer + * + * OUTPUT PARAMETERS + * p2peer - nulled + * + * RETURN VALUE + * No return code + * The callers pointer is NULLed. If there was a problem, the + * callers peer context pointer is not updated. + * + */ +void +dlep_peer_remove (dlep_context_peer_t **p2peer) +{ + dlep_context_peer_t *p2previous; + dlep_context_peer_t *p2ctx; + + if (!p2peer_list) { + return; + } + + p2ctx = p2peer_list; + if (p2ctx == *p2peer) { + p2peer_list = p2ctx->p2next_peer; + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u deallocating \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2ctx->peer_id); + } + + /* now free the block and update the caller's pointer */ + free(p2ctx); + *p2peer = NULL; + return; + } + + p2previous = p2peer_list; + p2ctx = p2previous->p2next_peer; + + while (p2ctx) { + if (p2ctx == *p2peer) { + p2previous->p2next_peer = p2ctx->p2next_peer; + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u deallocating \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2ctx->peer_id); + } + + /* now free the block and update the caller's pointer */ + free(p2ctx); + *p2peer = NULL; + break; + + } else { + /* walk the list */ + p2previous = p2ctx; + p2ctx = p2ctx->p2next_peer; + } + } + return; +} + + +/** + * NAME + * dlep_get_peer_by_peer_id + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * dlep_context_peer_t + * *dlep_get_peer_by_peer_id(uint16_t peer_id) + * + * DESCRIPTION + * This function searches the database for the specified peer ID + * and returns the context block pointer. + * + * INPUT PARAMETERS + * peer_id - The locally unique peer ID to look up + * + * RETURN VALUE + * A pointer to the peer context block. + * NULL is returned if the peer was not found. + * + */ +dlep_context_peer_t +*dlep_get_peer_by_peer_id (uint16_t peer_id) +{ + dlep_context_peer_t *result; + dlep_context_peer_t *p2ctx; + + result = NULL; + p2ctx = p2peer_list; + while (p2ctx) { + + if (p2ctx->peer_id == peer_id) { + result = p2ctx; + break; + + } else { + /* walk the list */ + p2ctx = p2ctx->p2next_peer; + } + } + return (result); +} + + +/** + * NAME + * dlep_peer_get_by_ipv4 + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * dlep_context_peer_t + * *dlep_peer_get_by_ipv4(ipv4_address_t *p2ipv4, + * uint16_t port) + * + * DESCRIPTION + * This function returns the pointer to the peer context block. + * + * INPUT PARAMETERS + * p2ipv4 - This is a pointer to the IPv4 address to locate + * + * port - This is the port used by the peer + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * The pointer to the peer context block. + * NULL is returned if the peer context is not located. + * + */ +dlep_context_peer_t +*dlep_peer_get_by_ipv4 (ipv4_address_t *p2ipv4, uint16_t udp_port, uint16_t tcp_port) +{ + dlep_context_peer_t *result; + dlep_context_peer_t *p2ctx; + + if (!p2ipv4) { + return (NULL); + } + + result = NULL; + p2ctx = p2peer_list; + while (p2ctx) { + + if (ipv4_compare_address(&p2ctx->peer_ipv4, p2ipv4) && + p2ctx->peer_udp_port == udp_port && + p2ctx->peer_tcp_port == tcp_port) { + result = p2ctx; + break; + + } else { + /* walk the list */ + p2ctx = p2ctx->p2next_peer; + } + } + return (result); +} + + +/** + * NAME + * dlep_peer_deallocate_all + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * void + * dlep_peer_deallocate_all(void) + * + * DESCRIPTION + * This function removes and frees all peer context blocks. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_peer_deallocate_all (void) +{ + dlep_context_peer_t *p2ctx; + dlep_context_peer_t *p2free; + + p2ctx = p2peer_list; + while (p2ctx) { + p2free = p2ctx; + + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2ctx->peer_id); + } + + /* walk the list */ + p2ctx = p2ctx->p2next_peer; + free(p2free); + } + p2peer_list = NULL; + return; +} + +/** + * NAME + * dlep_peer_short_list_all + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * void + * dlep_peer_short_list_all(void) + * + * DESCRIPTION + * This function generates a short list of all peers. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_peer_short_list_all (void) +{ + dlep_context_peer_t *p2ctx; + + p2ctx = p2peer_list; + while (p2ctx) { + dlep_peer_short_display(p2ctx); + p2ctx = p2ctx->p2next_peer; + } + printf("\n"); + return; +} + + +/** + * NAME + * dlep_peer_list_all + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * void + * dlep_peer_list_all(void) + * + * DESCRIPTION + * This function generates a list of all peers. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_peer_list_all (void) +{ + dlep_context_peer_t *p2ctx; + + p2ctx = p2peer_list; + while (p2ctx) { + dlep_peer_display(p2ctx); + p2ctx = p2ctx->p2next_peer; + } + printf("\n"); + return; +} + + +/** + * NAME + * dlep_peer_neighbor_list_all + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * void + * dlep_peer_neighbor_list_all(void) + * + * DESCRIPTION + * This function generates a list of all neighbors associated + * with each node + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_peer_neighbor_list_all (void) +{ + dlep_context_peer_t *p2ctx; + + p2ctx = p2peer_list; + while (p2ctx) { + dlep_peer_short_display(p2ctx); + + dlep_neighbor_list_all(p2ctx); + p2ctx = p2ctx->p2next_peer; + } + printf("\n"); + return; +} + + diff --git a/dlep_radio_ipv4/dlep_context_peer_management.h b/dlep_radio_ipv4/dlep_context_peer_management.h new file mode 100644 index 0000000..cbbc5c7 --- /dev/null +++ b/dlep_radio_ipv4/dlep_context_peer_management.h @@ -0,0 +1,61 @@ +/*---------------------------------------------------------------------- + * dlep_context_peer_management.h + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CONTEXT_PEER_MANAGEMENT_H__ +#define __DLEP_CONTEXT_PEER_MANAGEMENT_H__ + +#include "dlep_context_peer.h" + + +extern dlep_context_peer_t +*dlep_peer_allocate(ipv4_address_t *p2ipv4, uint16_t udp_port, uint16_t tcp_port); + +extern void +dlep_peer_remove(dlep_context_peer_t **p2peer); + +extern dlep_context_peer_t +*dlep_peer_get_by_ipv4(ipv4_address_t *p2ipv4, uint16_t udp_port, uint16_t tcp_port); + +extern dlep_context_peer_t +*dlep_get_peer_by_peer_id(uint16_t peer_id); + +extern void +dlep_peer_short_list_all(void); + +extern void +dlep_peer_list_all(void); + +extern void +dlep_peer_neighbor_list_all(void); + + +#endif + diff --git a/dlep_radio_ipv4/dlep_debug.c b/dlep_radio_ipv4/dlep_debug.c new file mode 100644 index 0000000..44cf032 --- /dev/null +++ b/dlep_radio_ipv4/dlep_debug.c @@ -0,0 +1,255 @@ +/*------------------------------------------------------------------ + * dlep_debug.c -- debug flag support for DLEP + * + * August 2010, Bo Berry + * + * Copyright (c) 2008, 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *----------------------------------------------------------------- + */ + +#include "dlep_debug.h" + +/* + * debug flags + */ +uint32_t dlep_debug_flags = 0; + + +/** + * NAME + * dlep_debug_set_flag + * + * SYNOPSIS + * #include "dlep_debug.h" + * void + * dlep_debug_set_flag(uint32_t *p2debug_flags, uint32_t mask) + * + * DESCRIPTION + * Sets specific debug flags + * + * INPUT PARAMETERS + * p2debug_flags - Pointer to component debug flags. + * + * mask - bit mask indicating which flags to set. + * + * OUTPUT PARAMETERS + * p2debug_flags - Flags are updated + * + * RETURN VALUE + * none + * + * NOTES + * If p2debug_flags is null, no operation takes place. + * If mask is (-1), all flags will be set. + * If mask is 0, no operation takes place. + * + */ +void +dlep_debug_set_flag (uint32_t *p2debug_flags, uint32_t mask) +{ + if (p2debug_flags) { + if (mask) { + *p2debug_flags |= mask; + } + } + return; +} + + +/** + * NAME + * dlep_debug_clear_flag + * + * SYNOPSIS + * #include "dlep_debug.h" + * void + * dlep_debug_clear_flag(uint32_t *p2debug_flags, uint32_t mask) + * + * DESCRIPTION + * Clears specific debug flag(s) + * + * INPUT PARAMETERS + * p2debug_flags - Pointer to the component debug flags. + * + * mask - bit mask indicating which flags to clear. + * + * OUTPUT PARAMETERS + * p2debug_flags - Flags are updated + * + * RETURN VALUE + * none + * + * NOTES + * If p2debug_flags is null, no operation takes place. + * If mask is (-1), all flags will be cleared. + * If mask is 0, no operation takes place. + * + */ +void +dlep_debug_clear_flag (uint32_t *p2debug_flags, uint32_t mask) +{ + if (p2debug_flags) { + if (mask) { + *p2debug_flags &= ~mask; + } + } + return; +} + + +/** + * NAME + * dlep_debug_is_flag_set + * + * SYNOPSIS + * #include "dlep_debug.h" + * boolean_t + * dlep_debug_is_flag_set(uint32_t debug_flags, uint32_t mask) + * + * DESCRIPTION + * Returns the status of debug flag(s) + * + * INPUT PARAMETERS + * debug_flags - Component debugs. + * + * mask - debug flag(s). + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE flag(s) set + * FALSE flag(s) clear + * + * EXAMPLES + * dlep_debug_is_flag_set(&component_flags, SOME_DEBUG) + * + * dlep_debug_is_flag_set(&component_flags, (SOME_DEBUG | ANOTHER_DEBUG) ) + * + */ +boolean_t +dlep_debug_is_flag_set (uint32_t debug_flags, uint32_t flag) +{ + return ( ((debug_flags & flag) ? TRUE : FALSE) ); +} + + +/** + * NAME + * dlep_debug_set_all + * + * SYNOPSIS + * #include "dlep_debug.h" + * void + * dlep_debug_set_all(uint32_t *p2debug_flags) + * + * DESCRIPTION + * This function should be used to set all debugs. + * + * INPUT PARAMETERS + * p2debug_flags - Pointer to component debug flags. + * + * OUTPUT PARAMETERS + * p2debug_flags - Flags are updated + * + * RETURN VALUE + * none + * + */ +void +dlep_debug_set_all (uint32_t *p2debug_flags) +{ + if (p2debug_flags) { + *p2debug_flags = DLEP_DEBUG_ALL_FLAGS; + } + return; +} + +/** + * NAME + * dlep_debug_clear_all + * + * SYNOPSIS + * #include "dlep_debug.h" + * void + * dlep_debug_clear_all(uint32_t *p2debug_flags) + * + * DESCRIPTION + * This function should be used to clear all debugs. + * + * INPUT PARAMETERS + * p2debug_flags - Pointer to component debug flags. + * + * OUTPUT PARAMETERS + * p2debug_flags - Flags are updated + * + * RETURN VALUE + * none + * + */ +void +dlep_debug_clear_all (uint32_t *p2debug_flags) +{ + if (p2debug_flags) { + *p2debug_flags = 0; + } + return; +} + + +/** + * NAME + * dlep_debug_init + * + * SYNOPSIS + * #include "dlep_debug.h" + * void + * dlep_debug_int(uint32_t *p2debug_flags, uint32_t initial_mask) + * + * DESCRIPTION + * Init the debug flagss. + * + * INPUT PARAMETERS + * p2debug_flags - Pointer to component debug flags. + * + * initial_mask + * + * OUTPUT PARAMETERS + * p2debug_flags - Flags are updated + * + * RETURN VALUE + * none + * + */ +void +dlep_debug_init (uint32_t *p2debug_flags, uint32_t initial_mask) +{ + if (p2debug_flags) { + *p2debug_flags = initial_mask; + } + return; +} + + diff --git a/dlep_radio_ipv4/dlep_debug.h b/dlep_radio_ipv4/dlep_debug.h new file mode 100644 index 0000000..3262893 --- /dev/null +++ b/dlep_radio_ipv4/dlep_debug.h @@ -0,0 +1,103 @@ +/*---------------------------------------------------------------------- + * dlep_debug.h -- Debug flags and supporting macros + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_DEBUG_H__ +#define __DLEP_DEBUG_H__ + +#include "safe_types.h" + +extern uint32_t dlep_debug_flags; + + + +/* + * Use these macros to abstract the preprocessor + * so internal information is not displayed in + * debugs. + */ +#define ENABLE_FUNCTION_AND_LINE + +#ifdef ENABLE_FUNCTION_AND_LINE +#define DEBUG_FILE __FILE__ +#define DEBUG_FUNCTION __FUNCTION__ +#define DEBUG_LINE __LINE__ +#define DEBUG_DATE __DATE__ +#define DEBUG_TIME __TIME__ +#else +#define DEBUG_FILE " " +#define DEBUG_FUNCTION " " +#define DEBUG_LINE 0 +#define DEBUG_DATE " " +#define DEBUG_TIME " " +#endif + + +/* + * abstracted for porting + */ +#define DLEP_DEBUG printf + + +/* + * surgical debug flags for DLEP. + */ +#define DLEP_DEBUG_ALL_FLAGS ( -1 ) + +#define DLEP_ERROR_TRACE_FLAG ( 0x01 ) +#define DLEP_UDP_TRACE_FLAG ( 0x02 ) + +#define DLEP_INCOMING_TRACE_FLAG ( 0x04 ) +#define DLEP_OUTGOING_TRACE_FLAG ( 0x08 ) + +#define DLEP_PEER_TRACE_FLAG ( 0x10 ) +#define DLEP_NEIGHBOR_TRACE_FLAG ( 0x20 ) + +#define DLEP_METRICS_TRACE_FLAG ( 0x40 ) +#define DLEP_SCRATCH_TRACE_FLAG ( 0x80 ) +#define DLEP_DECODER_TRACE_FLAG ( 0x100 ) + + + +extern void dlep_debug_set_flag(uint32_t *p2debug_flags, uint32_t mask); + +extern void dlep_debug_clear_flag(uint32_t *p2debug_flags, uint32_t mask); + +extern boolean_t dlep_debug_is_flag_set(uint32_t debug_flags, uint32_t mask); + +extern void dlep_debug_set_all(uint32_t *p2debug_flags); + +extern void dlep_debug_clear_all(uint32_t *p2debug_flags); + +extern void dlep_debug_init(uint32_t *p2debug_flags, uint32_t mask); + + +#endif + diff --git a/dlep_radio_ipv4/dlep_debug_cli.c b/dlep_radio_ipv4/dlep_debug_cli.c new file mode 100644 index 0000000..402b9f2 --- /dev/null +++ b/dlep_radio_ipv4/dlep_debug_cli.c @@ -0,0 +1,334 @@ +/*------------------------------------------------------------------ + * dlep_debug_cli.c -- DLEP debug CLI support + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include + +#include "safe_types.h" +#include "cli.h" + +#include "rfc5444_types.h" + +#include "dlep_debug.h" +#include "dlep_debug_cli.h" + + +/* + * directory record + * + * static cli_record_t debug_dir; + */ + +/* + * allocate command records + */ +static cli_record_t debug_show_mask_cmd; +static cli_record_t debug_set_mask_cmd; +static cli_record_t debug_clear_mask_cmd; +static cli_record_t debug_enable_all_cmd; +static cli_record_t debug_disable_all_cmd; + + + + +/** + ** debug commands + **/ +static void +cli_debug_show_mask (uint32_t argc, char *argv[]) +{ + if (argv[1] && *argv[1] == '?') { + printf("peer_debug_show - displays enabled debugging levels \n"); + printf("\n"); + return; + } + + printf(" error - %s \n", + ((dlep_debug_flags&DLEP_ERROR_TRACE_FLAG)?"On":"Off")); + + printf(" udp - %s \n", + ((dlep_debug_flags&DLEP_UDP_TRACE_FLAG)?"On":"Off")); + + printf(" incoming - %s \n", + ((dlep_debug_flags&DLEP_INCOMING_TRACE_FLAG)?"On":"Off")); + + printf(" outgoing - %s \n", + ((dlep_debug_flags&DLEP_OUTGOING_TRACE_FLAG)?"On":"Off")); + + printf(" peer - %s \n", + ((dlep_debug_flags&DLEP_PEER_TRACE_FLAG)?"On":"Off")); + + printf(" neighbor - %s \n", + ((dlep_debug_flags&DLEP_NEIGHBOR_TRACE_FLAG)?"On":"Off")); + + printf(" metrics - %s \n", + ((dlep_debug_flags&DLEP_METRICS_TRACE_FLAG)?"On":"Off")); + + printf(" scratch - %s \n", + ((dlep_debug_flags&DLEP_SCRATCH_TRACE_FLAG)?"On":"Off")); + + printf(" decoder - %s \n", + ((dlep_debug_flags&DLEP_DECODER_TRACE_FLAG)?"On":"Off")); + + printf("\n"); + return; +} + + + +static void +cli_debug_set_mask (uint32_t argc, char *argv[]) +{ + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("debug_set [error|udp|incoming|outgoing|packet|peer|" + "neighbor|metrics|scratch|decoder] \n"); + printf("where \n"); + printf(" error - enables the error debug trace \n"); + printf(" udp - enables debug trace of the udp send-receive \n"); + + printf(" incoming - enables debug trace of incoming packets \n"); + printf(" outgoing - enables debug trace of outgoing packets \n"); + printf(" packet - enables both incoming and outgoing packet " + "trace \n"); + + printf(" peer - enables peer specific debug trace \n"); + printf(" neighbor - enables neighbor specific debug trace \n"); + + printf(" metrics - enables neighbor metrics trace \n"); + printf(" scratch - enables scratch pad trace \n"); + printf(" decoder - enables debug trace of TLV validation \n"); + + printf("\n"); + return; + } + + if (!strcmp(argv[1], "error")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_ERROR_TRACE_FLAG); + + } else if (!strcmp(argv[1], "udp")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_UDP_TRACE_FLAG); + + } else if (!strcmp(argv[1], "incoming")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_INCOMING_TRACE_FLAG); + + } else if (!strcmp(argv[1], "outgoing")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_OUTGOING_TRACE_FLAG); + + } else if (!strcmp(argv[1], "packet")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_INCOMING_TRACE_FLAG); + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_OUTGOING_TRACE_FLAG); + + } else if (!strcmp(argv[1], "peer")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_PEER_TRACE_FLAG); + + } else if (!strcmp(argv[1], "neighbor")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_NEIGHBOR_TRACE_FLAG); + + } else if (!strcmp(argv[1], "metrics")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_METRICS_TRACE_FLAG); + + } else if (!strcmp(argv[1], "scratch")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_SCRATCH_TRACE_FLAG); + + } else if (!strcmp(argv[1], "decoder")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_DECODER_TRACE_FLAG); + } else { + printf("Invalid debug flag, <%s> \n", argv[1]); + } + return; +} + + +static void +cli_debug_clear_mask (uint32_t argc, char *argv[]) +{ + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + + printf("debug_clear [error|udp|incoming|outgoing|packet|peer|neighbor|" + "metrics|scratch|decoder] \n"); + printf("where \n"); + printf(" error - disables the error debug trace \n"); + printf(" udp - disables debug trace for udp operations \n"); + + printf(" incoming - disables debug trace of incoming packets \n"); + printf(" outgoing - disables debug trace of outgoing packets \n"); + printf(" packet - enables both incoming and outgoing packet " + "trace \n"); + + printf(" peer - disables peer specific debug trace \n"); + printf(" neighbor - disables neighbor specific debug trace \n"); + + printf(" metrics - disables neighbor metrics trace \n"); + printf(" scratch - disables scratch pad trace \n"); + printf(" decoder - disables debug trace of TLV validation \n"); + + printf("\n"); + return; + } + + if (!strcmp(argv[1], "error")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_ERROR_TRACE_FLAG); + + } else if (!strcmp(argv[1], "udp")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_UDP_TRACE_FLAG); + + } else if (!strcmp(argv[1], "incoming")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_INCOMING_TRACE_FLAG); + + } else if (!strcmp(argv[1], "outgoing")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_OUTGOING_TRACE_FLAG); + + } else if (!strcmp(argv[1], "packet")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_INCOMING_TRACE_FLAG); + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_OUTGOING_TRACE_FLAG); + + } else if (!strcmp(argv[1], "peer")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_PEER_TRACE_FLAG); + + } else if (!strcmp(argv[1], "neighbor")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_NEIGHBOR_TRACE_FLAG); + + } else if (!strcmp(argv[1], "metrics")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_METRICS_TRACE_FLAG); + + } else if (!strcmp(argv[1], "scratch")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_SCRATCH_TRACE_FLAG); + + } else if (!strcmp(argv[1], "decoder")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_DECODER_TRACE_FLAG); + } + return; +} + + +static void +cli_debug_enable_all (uint32_t argc, char *argv[]) +{ + if (argv[1] && *argv[1] == '?') { + printf("debug_enable - enables all debugs \n"); + printf("\n"); + return; + } + dlep_debug_flags = (-1); + printf(" all peer debugs enabled \n"); + return; +} + + +static void +cli_debug_disable_all (uint32_t argc, char *argv[]) +{ + if (argv[1] && *argv[1] == '?') { + printf("debug_disable - disables all debugs \n"); + printf("\n"); + return; + } + dlep_debug_flags = (0); + printf(" all peer debugs disabled \n"); + return; +} + + +/** + * NAME + * dlep_debug_cli_init + * + * SYNOPSIS + * void + * dlep_debug_cli_init() + * + * DESCRIPTION + * Registers the dlep debug commands with the cli + * facility. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_debug_cli_init (void) +{ + RC_CLI_t rc; + + /* + * Create directory and commands + **rc = cli_mkdir("peer", &cli_debug_dir, &debug_dir); + */ + + /* debug commands */ + rc = cli_mkcmd("debug_show", cli_debug_show_mask, + &cli_debug_dir, &debug_show_mask_cmd); + + rc = cli_mkcmd("debug_set", cli_debug_set_mask, + &cli_debug_dir, &debug_set_mask_cmd); + + rc = cli_mkcmd("debug_clear", cli_debug_clear_mask, + &cli_debug_dir, &debug_clear_mask_cmd); + + rc = cli_mkcmd("debug_enable", cli_debug_enable_all, + &cli_debug_dir, &debug_enable_all_cmd); + + rc = cli_mkcmd("debug_disable", cli_debug_disable_all, + &cli_debug_dir, &debug_disable_all_cmd); + + return; +} + + diff --git a/dlep_radio_ipv4/dlep_debug_cli.h b/dlep_radio_ipv4/dlep_debug_cli.h new file mode 100644 index 0000000..1245a9b --- /dev/null +++ b/dlep_radio_ipv4/dlep_debug_cli.h @@ -0,0 +1,40 @@ +/*---------------------------------------------------------------------- + * dlep_debug_cli.h -- debug cli prototypes for DLEP + * + * October 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_DEBUG_CLI_H__ +#define __DLEP_DEBUG_CLI_H__ + + +extern void +dlep_debug_cli_init(void); + +#endif + diff --git a/dlep_radio_ipv4/dlep_message_builder.c b/dlep_radio_ipv4/dlep_message_builder.c new file mode 100644 index 0000000..ed7f356 --- /dev/null +++ b/dlep_radio_ipv4/dlep_message_builder.c @@ -0,0 +1,2373 @@ +/*---------------------------------------------------------------------- + * dlep_message_builder.c -- Routines to build the DLEP messages + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" +#include "packet_dump.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" +#include "rfc5444_encoder_tlv.h" +#include "rfc5444_encoder.h" + +#include "dlep_sim_options.h" +#include "dlep_debug.h" +#include "dlep_porter.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" +#include "rfc5444_experimental_tlv.h" + +#include "dlep_message_builder.h" +#include "dlep_client_timer.h" + +extern int TCP_READY; +extern int init; + +/* + * Local API to increment a sequence number. Sequence numbers + * are simply request-response correlators. They are not + * checked for 'sequencing' or lost messages. The originator + * determines the sequence number so it can correlate the + * response. + */ +static uint16_t +dlep_get_next_sequence_number (uint16_t sequence_number) +{ + sequence_number++; + if (!sequence_number) { + sequence_number++; + } + return (sequence_number); +} + + +/** + * NAME + * send_dlep_attached_peer_discovery + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_attached_peer_discovery( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a attached peer discovery message + * from the radio to the router to initiate the discovery process. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_attached_peer_discovery (dlep_context_peer_t *p2peer) +{ + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + TCP_READY = 0; +// printf("\n INSIDE send_dlep_attached_peer_discovery "); + p2es = rfc5444_encoder_packet_start(); + + /* Adding message header */ + rfc5444_encoder_message_block_start(p2es, + RFC5444_SIG_ATT_PEER_DISCOVERY); + + packet_dump("OUTGOING-", + p2es->packet_ptr, + 1); + /* required */ + rfc5444_version_tlv(p2es, + RFC5444_DLEP_MAJOR_VERSION, + RFC5444_DLEP_MINOR_VERSION); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_detached_peer_discovery + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_detached_peer_discovery( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a detached peer discovery message + * from the radio to the router to initiate the discovery process. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_detached_peer_discovery (dlep_context_peer_t *p2peer) +{ + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + /* + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); +*/ + +// added for D5 + +rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_DET_PEER_DISCOVERY); + +/* This function call to add message lenth */ + +#if 0 +rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_REQ); +#endif +#if 0 + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +/* + // added for testing, will remove it +// rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_DET_PEER_DISCOVERY); + */ + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2peer->sequence = + dlep_get_next_sequence_number(p2peer->sequence); + p2peer->expected_peer_offer_sequence = p2peer->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + +#endif + /* required */ + rfc5444_version_tlv(p2es, + RFC5444_DLEP_MAJOR_VERSION, + RFC5444_DLEP_MINOR_VERSION); + + /* optional */ + rfc5444_peer_tlv(p2es, p2config->local_type_description); +#if 0 + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); +#if 0 + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } +#endif + + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_peer_offer + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_offer(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer offer message + * from the router to the radio in response to the + * peer attached/detached discovery message. This + * confirms discovery. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_peer_offer (dlep_context_peer_t *p2peer) +{ + + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + p2es = rfc5444_encoder_packet_start(); + + /* Adding Message header */ + + rfc5444_encoder_signal_block_start(p2es, + RFC5444_SIG_PEER_OFFER, + DLEP_SIGNAL_FLAGS); + + rfc5444_peer_tlv(p2es, p2config->local_type_description); + + rfc5444_ipv4_connection_point_tlv(p2es, p2config->local_tcp_port, + &p2config->local_ipv4); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending peer offer : \n"); + printf(" signal code=%u RFC5444_SIG_PEER_OFFER \n", + RFC5444_SIG_PEER_OFFER); + } + + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + + /* Oppening TCP socket */ +// dlep_tcp_porter_open(p2config); + + rfc5444_encoder_free(p2es); + + return; +} + + + /** + * NAME + * send_dlep_peer_init + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_init( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer init message + * from the radio to the router to initiate the TCP synchronization process. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ + void + send_dlep_peer_init (dlep_context_peer_t *p2peer) + { + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_INIT_REQ); + + /* required */ + rfc5444_version_tlv(p2es, + RFC5444_DLEP_MAJOR_VERSION, + RFC5444_DLEP_MINOR_VERSION); + + rfc5444_heartbeat_interval_tlv(p2es, p2config->peer_heartbeat_interval); + + rfc5444_link_metric_mdr_rx_tlv(p2es, 100000000); + p2peer->mdr_rx=100000000; + + rfc5444_link_metric_mdr_tx_tlv(p2es, 100000000); + p2peer->mdr_tx=100000000; + + rfc5444_link_metric_cdr_rx_tlv(p2es, 100000000); + p2peer->cdr_rx=100000000; + rfc5444_link_metric_cdr_tx_tlv(p2es, 250); + p2peer->cdr_tx =250; + + rfc5444_link_metric_latency_tlv1(p2es, 250); + p2peer->latency = 250; + + rfc5444_link_metric_resources_tx_tlv(p2es, 100); + p2peer->resources_tx = 100; + rfc5444_link_metric_resources_rx_tlv(p2es, 100); + p2peer->resources_rx = 100; + + rfc5444_link_metric_rlq_rx_tlv(p2es, 100); + p2peer->rlq_rx = 100; + rfc5444_link_metric_rlq_tx_tlv(p2es, 100); + p2peer->rlq_tx = 100; + + + + /* optional */ + rfc5444_peer_tlv(p2es, p2config->local_type_description); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } +#if 0 + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + + + printf("\n CALLING dlep_tcp_connect"); +#endif + +#if 0 + dlep_tcp_connect(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); +#endif + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + /* Setting this flag inorder for dlep_tcp_receive to get called after tcp connect + * and first dlep_tcp_send is called inorder to avoid infinite call in loop. + */ + TCP_READY = 1; + + rfc5444_encoder_free(p2es); +// printf("\n PEER INIT REQUEST Sent"); + + return; +} + + /** + * NAME + * send_dlep_peer_init_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_init( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer init message response + * from the radio to the router. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ + void + send_dlep_peer_init_ack (dlep_context_peer_t *p2peer) + { + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_INIT_RES); + if(init == 1) { + p2peer->status_code = RFC5444_REQUEST_DENIED; + } + rfc5444_status_tlv(p2es, p2peer->status_code); + + rfc5444_peer_tlv(p2es, p2config->local_type_description); + + rfc5444_heartbeat_interval_tlv(p2es, p2config->peer_heartbeat_interval); + + rfc5444_link_metric_mdr_rx_tlv(p2es, 100000000); + p2peer->mdr_rx=100000000; + + rfc5444_link_metric_mdr_tx_tlv(p2es, 100000000); + p2peer->mdr_tx=100000000; + + rfc5444_link_metric_cdr_rx_tlv(p2es, 100000000); + p2peer->cdr_rx=100000000; + + rfc5444_link_metric_cdr_tx_tlv(p2es, 100000000); + p2peer->cdr_tx = 100000000; + + rfc5444_link_metric_latency_tlv1(p2es, 250); + p2peer->latency = 250; + + /* rfc5444_link_metric_latency_tlv(p2es, 250); + p2peer->latency = 250; */ + + rfc5444_link_metric_rlq_rx_tlv(p2es, 100); + p2peer->rlq_rx = 100; + + rfc5444_link_metric_rlq_tx_tlv(p2es, 100); + p2peer->rlq_tx = 100; + + rfc5444_link_metric_resources_tlv(p2es, 100); + p2peer->resources = 100; + + rfc5444_mtu_tlv(p2es, 100); + p2peer->mtu = 100; + + rfc5444_ipv4_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2config->local_ipv4); + ipv4_zero_address(&p2peer->ipv4_address); + + rfc5444_ipv4_attached_subnet_tlv(p2es, RFC5444_EXISTING_ADD_ADDRESS); + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } +#if 0 + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + + + printf("\n CALLING dlep_tcp_connect"); +#endif + +#if 0 + dlep_tcp_connect(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); +#endif + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Session initialization response : \n"); + printf(" Message code=%u RFC5444_MSG_PEER_INIT_RES\n",RFC5444_MSG_PEER_INIT_RES); + + } + + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + /* Setting this flag inorder for dlep_tcp_receive to get called after tcp connect + * and first dlep_tcp_send is called inorder to avoid infinite call in loop. + */ + TCP_READY = 1; + + rfc5444_encoder_free(p2es); + + return; +} + + +/** + * NAME + * send_dlep_peer_heartbeat + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_heartbeat( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer heartbeat to + * maintain a persistent presence with the peer. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_peer_heartbeat (dlep_context_peer_t *p2peer) +{ + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + +// printf("\n INSIDE send_dlep_peer_heartbeat"); + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_HEARTBEAT); + +#if 0 + /* + * Get a unique sequence number + */ + p2peer->sequence = + dlep_get_next_sequence_number(p2peer->sequence); + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_end(p2es); +#if 0 +#ifdef MULTIPLE_PEER_MESSAGES_PACKED + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_HEARTBEAT); + + /* + * Get a unique sequence number + * HB does not have an ACK, so the sequence number is not important. + */ + p2peer->sequence = + dlep_get_next_sequence_number(p2peer->sequence); + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); +#endif +#endif + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + /* if (TCP_READY ) { + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + } else { // Else send with UDP socket if heartbeat sent before TCP connection. + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + } */ + + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending heartbeat message : \n"); + printf(" Message code=%u RFC5444_MSG_PEER_HEARTBEAT\n", + RFC5444_MSG_PEER_HEARTBEAT); + } + + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_peer_update_request + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_update_request( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer update message + * from the router to the radio. It is used to indicate + * a new layer 3 address or the removal of a layer 3 + * address. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_peer_update_request (dlep_context_peer_t *p2peer) +{ + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_UPDATE_REQ); + +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2peer->sequence = dlep_get_next_sequence_number(p2peer->sequence); + p2peer->expected_peer_update_response_sequence = p2peer->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + /* if (p2peer->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2peer->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2peer->update_ipv4_operation, + &p2peer->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2peer->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2peer->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2peer->update_ipv6_operation, + &p2peer->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } */ +#if 0 + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_link_metric_mdr_rx_tlv(p2es, p2peer->mdr_rx); + rfc5444_link_metric_mdr_tx_tlv(p2es, p2peer->mdr_tx); + rfc5444_link_metric_cdr_rx_tlv(p2es, p2peer->cdr_rx); + rfc5444_link_metric_cdr_tx_tlv(p2es, p2peer->cdr_tx); + rfc5444_link_metric_latency_tlv1(p2es, p2peer->latency); + rfc5444_link_metric_resources_tlv(p2es, p2peer->resources); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2peer->rlq_tx); + rfc5444_link_metric_rlq_rx_tlv(p2es, p2peer->rlq_rx); + rfc5444_mtu_tlv(p2es, p2peer->mtu); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session update request :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_UPDATE_REQ\n", + RFC5444_MSG_PEER_UPDATE_REQ); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + + return; +} + + +/** + * NAME + * send_dlep_peer_update_response + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_update_response( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer update response message + * from the radio to the router. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_peer_update_response (dlep_context_peer_t *p2peer) +{ + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_UPDATE_RES); +#if 0 + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_status_tlv(p2es, p2peer->status_code); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_status_tlv(p2es, p2peer->status_code); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session update response :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_UPDATE_RES\n", + RFC5444_MSG_PEER_UPDATE_RES); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_peer_termination + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_termination(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer termination message + * from the router to the radio or from the radio to the + * router to termiante the association. As result all + * neighbor neighbors are also terminated. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_peer_termination (dlep_context_peer_t *p2peer) +{ + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_REQ); + +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2peer->sequence = dlep_get_next_sequence_number( + p2peer->sequence); + p2peer->expected_peer_offer_sequence = p2peer->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +// printf("\n Adding Status TLV"); + rfc5444_status_tlv(p2es, p2peer->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + rfc5444_encoder_message_block_end(p2es); +#endif +#ifdef MULTIPLE_PEER_MESSAGES_PACKED + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_REQ); + + /* + * acks will not align with incremented sequence + * + * p2peer->sequence = dlep_get_next_sequence_number( + * p2peer->sequence); + * p2peer->expected_peer_offer_sequence = p2peer->sequence; + */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_status_tlv(p2es, p2peer->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session termination :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_TERM_REQ\n", + RFC5444_MSG_PEER_TERM_REQ); + + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_peer_termination_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_termination_ack(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer termination ACK + * message from the router to the radio or from the radio + * to the router in response to the peer terminate request. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_peer_termination_ack (dlep_context_peer_t *p2peer) +{ + + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_RES); +#if 0 + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + +// rfc5444_status_tlv(p2es, p2peer->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session termination message :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_TERM_RES\n", + RFC5444_MSG_PEER_TERM_REQ); + } + + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_up + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_up(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor up message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_up (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + printf("sending nei up\n"); + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_UP_REQ); + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + /* add the IPv4 address if there is one to add */ + //if (p2neighbor->ipv4_address.v4_addr.v4_addr32) { + rfc5444_ipv4_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv4_address); + ipv4_zero_address(&p2neighbor->ipv4_address); + //} + + /* add the IPv6 address if there is one to add + if (p2neighbor->ipv6_address.v6_addr.v6_addr32[0] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[1] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[2] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[3]) { + rfc5444_ipv6_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv6_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + } */ + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_rx); + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_rx); + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv1(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_mtu_tlv(p2es, p2neighbor->mtu); + + //rfc5444_ipv4_attached_subnet_tlv(p2es, RFC5444_EXISTING_ADD_ADDRESS); + + + rfc5444_encoder_message_block_end(p2es); +#if 0 +//ifdef MULTIPLE_NEIGHBOR_MESSAGES_PACKED + /**** neighbor down ****/ + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_DOWN_REQ); + + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + p2neighbor->expected_neighbor_term_ack_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + /**** neighbor up ****/ + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_UP_REQ); + + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + p2neighbor->expected_neighbor_init_ack_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + /* add the IPv4 address if there is one to add */ + if (p2neighbor->ipv4_address.v4_addr.v4_addr32) { + rfc5444_ipv4_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv4_address); + ipv4_zero_address(&p2neighbor->ipv4_address); + } + + /* add the IPv6 address if there is one to add */ + if (p2neighbor->ipv6_address.v6_addr.v6_addr32[0] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[1] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[2] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[3]) { + rfc5444_ipv6_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv6_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + } + + rfc5444_link_metric_mdr_tlv(p2es, p2neighbor->mdr); + + rfc5444_link_metric_cdr_tlv(p2es, p2neighbor->cdr); + + rfc5444_link_metric_latency_tlv1(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); +#endif + + rfc5444_encoder_packet_end(p2es); + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination up:\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_UP_REQ\n", + RFC5444_MSG_NEIGHBOR_UP_REQ); + + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_up_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_up_ack(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor up ack message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_up_ack (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_UP_RES); +#if 0 + /* echo the sequence number */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); +#if 0 + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_metrics + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_metrics(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor metrics message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context with the + * metrics data set + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_metrics (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_METRICS); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + /* if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + } */ + + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + rfc5444_ipv6_subnet_tlv(p2es, + p2neighbor->update_ipv6_operation, p2neighbor->ipv6_subnet_prefix,&p2neighbor->update_ipv6_subnet_address); + p2neighbor->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_rx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_rx); + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv1(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + rfc5444_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + + rfc5444_mtu_tlv(p2es, p2neighbor->mtu); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination update to metrics:\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_METRICS\n", + RFC5444_MSG_NEIGHBOR_METRICS); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + +void +send_dlep_neighbor_credit_grant_req (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + + p2es = rfc5444_encoder_packet_start(); + +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_METRICS); + +#if 0 + /* + * Get a unique sequence number */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv1(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_credit_grand_request_tlv(p2es, p2neighbor->cgr); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + + /* + * start the ack timer. Using same neighbor_up_ack_tmo Neighbor Up Time. + */ + (void)stw_system_timer_start(&p2neighbor->neighbor_update_ack_tmr, + p2peer->neighbor_up_ack_tmo, + p2peer->neighbor_up_ack_tmo, + &dlep_neighbor_update_ack_tmr, + (void *)p2neighbor); + + return; +} + + +void +send_dlep_neighbor_credit_reject (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + + p2es = rfc5444_encoder_packet_start(); + + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_METRICS); + + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv1(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_rx_tlv(p2es, p2neighbor->resources_tx); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_address_request + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_address_request(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a peer heartbeat. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_address_request (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_ADDRESS_REQ); + + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = + dlep_get_next_sequence_number(p2neighbor->sequence); + p2neighbor->expected_neighbor_address_response_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_rx); + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_rx); + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv1(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_mtu_tlv(p2es, p2neighbor->mtu); + + rfc5444_ipv4_attached_subnet_tlv(p2es, RFC5444_EXISTING_ADD_ADDRESS); + + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_address_response + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_address_response(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor address response. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_address_response (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_ADDRESS_RES); + + /* + * echo the neighbor sequence number + */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_down + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_down(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor down message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_down (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_DOWN_REQ); +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + p2neighbor->expected_neighbor_term_ack_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + +// rfc5444_status_tlv(p2es, p2neighbor->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination down :\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_DOWN_REQ\n", + RFC5444_MSG_NEIGHBOR_DOWN_REQ); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_down_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_down_ack(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor down ack message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_down_ack (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_DOWN_RES); +#if 0 + /* echo the sequence number */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination down response :\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_DOWN_RES\n", + RFC5444_MSG_NEIGHBOR_DOWN_RES); + + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_link_char_request + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_link_char_request(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor, + * uint64_t cdr, + * uint16_t latency) + * + * DESCRIPTION + * This function is used to send a link characteristic message from + * the server to the client. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * cdr - requested data rate + * + * latency - maximum latency requested + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_link_char_request (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor, + uint64_t cdr, + uint64_t latency) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_LINK_CHAR_REQ); + +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = + dlep_get_next_sequence_number(p2neighbor->sequence); + p2neighbor->expected_neighbor_link_char_response_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (cdr) { + rfc5444_link_metric_cdr_tx_tlv(p2es, cdr); + rfc5444_link_metric_cdr_rx_tlv(p2es, cdr); + } + + + if (latency) { + rfc5444_link_metric_latency_tlv1(p2es, latency); + } + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_link_char_response + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_link_char_response(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a link characteristic response from + * the client to the server. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_link_char_response (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_LINK_CHAR_RES); +#if 0 + /* echo the sequence number */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_tx); + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv1(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_mtu_tlv(p2es, p2neighbor->mtu); + +#if 0 + rfc5444_link_metric_resources_rx_tlv(p2es, p2neighbor->resources_tx); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination link char response :\n"); + printf(" Message code=%u FC5444_MSG_LINK_CHAR_RES\n", + RFC5444_MSG_LINK_CHAR_RES); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + diff --git a/dlep_radio_ipv4/dlep_message_builder.h b/dlep_radio_ipv4/dlep_message_builder.h new file mode 100644 index 0000000..faa037b --- /dev/null +++ b/dlep_radio_ipv4/dlep_message_builder.h @@ -0,0 +1,133 @@ +/*---------------------------------------------------------------------- + * dlep_message_builder.h -- Routines to build the DLEP messages + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_MESSAGE_BUILDER_H__ +#define __DLEP_MESSAGE_BUILDER_H__ + +#include "dlep_context_peer.h" +#include "dlep_context_neighbor.h" + + + +/* + * Router-Radio Level Mesages + */ + +extern void +send_dlep_attached_peer_discovery(dlep_context_peer_t *p2peer); + +extern void +send_dlep_detached_peer_discovery(dlep_context_peer_t *p2peer); + +extern void +send_dlep_peer_offer(dlep_context_peer_t *p2peer); + +extern void +send_dlep_peer_init(dlep_context_peer_t *p2peer); + +extern void +send_dlep_peer_init_ack(dlep_context_peer_t *p2peer); + +extern void +send_dlep_peer_heartbeat(dlep_context_peer_t *p2peer); + + +extern void +send_dlep_peer_update_request(dlep_context_peer_t *p2peer); + +extern void +send_dlep_peer_update_response(dlep_context_peer_t *p2peer); + + +extern void +send_dlep_peer_termination(dlep_context_peer_t *p2peer); + +extern void +send_dlep_peer_termination_ack(dlep_context_peer_t *p2peer); + + +/* + * Neighbor Level Mesages + */ + +extern void +send_dlep_neighbor_up(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_up_ack(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_metrics(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_credit_grant_req(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_credit_reject(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_address_request(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_address_response(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + + +extern void +send_dlep_neighbor_down(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_down_ack(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_link_char_request(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor, + uint64_t cdr, + uint64_t latency); + + +extern void +send_dlep_neighbor_link_char_response(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + + + + +#endif + diff --git a/dlep_radio_ipv4/dlep_porter.c b/dlep_radio_ipv4/dlep_porter.c new file mode 100644 index 0000000..faa1fa1 --- /dev/null +++ b/dlep_radio_ipv4/dlep_porter.c @@ -0,0 +1,913 @@ +/*---------------------------------------------------------------------- + * dlep_porter.c -- APIs for UDP socket use + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "safe_types.h" +#include "dlep_debug.h" +#include "dlep_config.h" +#include "dlep_context_peer.h" +#include "dlep_porter.h" + +// ADDED FOR DEBUG +// #include + +#define MSG_MIN_LEN ( 4 ) +#define MSG_MAX_LEN ( 1400 ) + +extern int TCP_READY; + +extern int TCP_CLIENT_READY; +extern int errno; + +/** + * NAME + * dlep_porter_init + * + * SYNOPSIS + * void + * dlep_porter_init(dlep_config_t *p2config) + * + * DESCRIPTION + * This function is used to initialize the transport data prior + * to allocating resources. + * + * INPUT PARAMETERS + * p2config - pointer to the config data + * + * OUTPUT PARAMETERS + * None. + * + * RETURN VALUE + * None. + * + */ +void +dlep_porter_init (dlep_config_t *p2config) +{ + if (!p2config) { + return; + } + + return; +} + + +void +dlep_tcp_porter_open(dlep_config_t *p2config) + +{ + int status; + + if (!p2config) { + return; + } + + /* At this stage open tcp socket alone in order to use in + * select system call later. */ + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Opening the tcp socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + p2config->dlep_tcp_sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); +// added for debug +// fcntl(p2config->dlep_tcp_sockfd, F_SETFL, O_NONBLOCK); + if (p2config->dlep_tcp_sockfd < 0) { + DLEP_DEBUG("%s-%u Error: not able to open TCP socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + exit (0); + } + + + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Binding the tcp socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + + memset(&p2config->dlep_addr, 0, sizeof(struct sockaddr_in)); + p2config->dlep_addr.sin_family = AF_INET; + p2config->dlep_addr.sin_port = htons(p2config->local_tcp_port); + p2config->dlep_addr.sin_addr.s_addr = INADDR_ANY; + + status = bind(p2config->dlep_tcp_sockfd, + (struct sockaddr *)&p2config->dlep_addr, + sizeof(struct sockaddr_in)); + + if (status < 0) { + + printf("\n not able to bind"); + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: not able to bind TCP " + "socket to port %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2config->local_tcp_port); + } + exit (0); + } + printf("\n waiting connect from router\n"); + status = listen(p2config->dlep_tcp_sockfd,5); + if (status) { + perror("ERROR on listen"); + exit(2); + } +/* + p2config->client_lenght = sizeof(p2config->client); + p2config->dlep_tcp_client_sockfd = accept(p2config->dlep_tcp_sockfd, + (struct sockaddr *)&p2config->client, &p2config->client_lenght); + + if (p2config->dlep_tcp_client_sockfd < 0) { + perror("ERROR on accept"); + exit(1); + } + + + printf(" dlep_tcp_sockfd after accept =%d",p2config->dlep_tcp_client_sockfd); + + TCP_READY = 1; +*/ + +#if 0 + int sockfd, newsockfd, portno, clilen; + char buffer[256]; + struct sockaddr_in serv_addr, cli_addr; + int n; + + /* First call to socket() function */ + sockfd = socket(AF_INET, SOCK_STREAM, 0); + + if (sockfd < 0) + { + perror("ERROR opening socket"); + exit(1); + } + + /* Initialize socket structure */ + bzero((char *) &serv_addr, sizeof(serv_addr)); + portno = 5001; + + serv_addr.sin_family = AF_INET; + serv_addr.sin_addr.s_addr = INADDR_ANY; + serv_addr.sin_port = htons(portno); + + /* Now bind the host address using bind() call.*/ + if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) + { + //perror("ERROR on binding"); + exit(1); + } + + /* Now start listening for the clients, here process will + * go in sleep mode and will wait for the incoming connection + */ + + listen(sockfd,5); + clilen = sizeof(cli_addr); + + /* Accept actual connection from the client */ + newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen); + if (newsockfd < 0) + { + perror("ERROR on accept"); + exit(1); + } + + /* If connection is established then start communicating */ + bzero(buffer,256); + // n = read( newsockfd,buffer,255 ); + + if (n < 0) + { + perror("ERROR reading from socket"); + exit(1); + } + + printf("Here is the message: %s\n",buffer); + + /* Write a response to the client */ +// n = write(newsockfd,"I got your message",18); + + if (n < 0) + { + perror("ERROR writing to socket"); + exit(1); + } + + return 0; +#endif + return; + +} + + +/** + * NAME + * dlep_porter_open + * + * SYNOPSIS + * void + * dlep_porter_open(dlep_config_t *p2config) + * + * DESCRIPTION + * This function is used to open and bind to a local + * socket fd. + * + * INPUT PARAMETERS + * p2config - pointer to the config data + * + * OUTPUT PARAMETERS + * None. + * + * RETURN VALUE + * None. + * + */ +void +dlep_porter_open (dlep_config_t *p2config) +{ + int status; + p2config->reuse = 1; + + if (!p2config) { + return; + } + +// if (p2config->start_on_discovery) { + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Opening the UDP socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + + p2config->dlep_udp_sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); + if (p2config->dlep_udp_sockfd < 0) { + DLEP_DEBUG("%s-%u Error: not able to open UDP socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + exit (0); + } + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Binding the udp socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + + if(setsockopt(p2config->dlep_udp_sockfd, SOL_SOCKET, SO_REUSEADDR, + (char *)&p2config->reuse, sizeof(p2config->reuse)) < 0) + { + //perror("Setting SO_REUSEADDR error"); + close(p2config->dlep_udp_sockfd); + exit(1); + } + + memset(&p2config->dlep_addr, 0, sizeof(struct sockaddr_in)); + p2config->dlep_addr.sin_family = AF_INET; + p2config->dlep_addr.sin_port = htons(p2config->local_udp_port); + p2config->dlep_addr.sin_addr.s_addr = htonl(INADDR_ANY); + + status = bind(p2config->dlep_udp_sockfd, + (struct sockaddr *)&p2config->dlep_addr, + sizeof(struct sockaddr_in)); + if (status < 0) { + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: not able to bind UDP " + "socket to port %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2config->local_udp_port); + } + exit (0); + } + + p2config->group.imr_multiaddr.s_addr = inet_addr("224.0.0.117"); +// p2config->group.imr_interface.s_addr = INADDR_ANY; +// p2config->group.imr_interface.s_addr = inet_addr("20.1.1.4"); + p2config->group.imr_interface.s_addr = inet_addr(p2config->local_ipv4_dot); + + if(setsockopt(p2config->dlep_udp_sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, + (char *)&p2config->group, sizeof(p2config->group)) < 0) + { + //perror("Adding multicast group error"); + close(p2config->dlep_udp_sockfd); + exit(1); + } else { + printf("Adding multicast group...OK.\n"); + } + + +// listen(32, p2config->dlep_udp_sockfd); +// } + +#if 0 + /* At this stage open tcp socket alone in order to use in + * select system call later. */ + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Opening the tcp socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + p2config->dlep_tcp_sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); +// added for debug +// fcntl(p2config->dlep_tcp_sockfd, F_SETFL, O_NONBLOCK); + if (p2config->dlep_tcp_sockfd < 0) { + DLEP_DEBUG("%s-%u Error: not able to open TCP socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + exit (0); + } + + + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Binding the tcp socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + + memset(&p2config->dlep_addr, 0, sizeof(struct sockaddr_in)); + p2config->dlep_addr.sin_family = AF_INET; + p2config->dlep_addr.sin_port = htons(p2config->local_tcp_port); + p2config->dlep_addr.sin_addr.s_addr = inet_addr("224.0.0.109"); + +// changing for multicast support +// p2config->dlep_addr.sin_addr.s_addr = htonl(INADDR_ANY); + +#endif //changed for d7 +#if 0 + status = bind(p2config->dlep_tcp_sockfd, + (struct sockaddr *)&p2config->dlep_addr, + sizeof(struct sockaddr_in)); + if (status < 0) { + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: not able to bind TCP " + "socket to port %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2config->local_tcp_port); + } + exit (0); + } +#endif //not d7 changes +// listen(32, p2config->dlep_tcp_sockfd); + + + return; +} + + +void +dlep_tcp_connect (dlep_config_t *p2config, + dlep_context_peer_t *p2peer, + void *msg, + uint32_t length) +{ + int status; + + if (!p2config) { + return; + } + + + memset(&p2peer->msg_addr, 0, sizeof(struct sockaddr_in)); + + p2peer->msg_addr.sin_family = AF_INET; + + p2peer->msg_addr.sin_port = htons(p2peer->peer_tcp_port); + + //p2peer->msg_addr.sin_addr.s_addr = htonl(p2peer->peer_ipv4.v4_addr.v4_addr32); + p2peer->msg_addr.sin_addr.s_addr = p2peer->peer_ipv4.v4_addr.v4_addr32; + + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Connecting the TCP socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + + + status = connect(p2config->dlep_tcp_sockfd, + (struct sockaddr *)&p2peer->msg_addr, + sizeof(struct sockaddr_in)); + if (status < 0) { + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: not able to connect to TCP " + "socket to port %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_tcp_port); + } +// exit (0); + printf("\n Do Manual start once server ready "); + } + + + +// listen(32, p2config->dlep_sockfd); + return; +} + + +/** + * NAME + * dlep_udp_receive + * + * SYNOPSIS + * int + * dlep_udp_receive(dlep_config_t *p2config, + * struct sockaddr_in *rcvd_msg_addr, + * socklen_t *rcvd_msg_socket_length, + * void *msg, + * uint32_t length) + * + * DESCRIPTION + * This function is used to receive a UDP message. + * This is a blocking call. + * + * INPUT PARAMETERS + * p2config - pointer to the config data + * + * rcvd_msg_addr - pointer to the receive socket data + * + * rcvd_socket_length - pointer to the receive socket length + * + * msg - pointer to the message buffer to receive the data + * + * length - Maximum number of bytes to receive, that + * the buffer can hold. + * + * OUTPUT PARAMETERS + * None. + * + * RETURN VALUE + * number of bytes read + * <= 0 error condition + * + */ +int +dlep_udp_receive (dlep_config_t *p2config, + struct sockaddr_in *rcvd_msg_addr, + socklen_t *rcvd_socket_length, + void *msg, + uint32_t length) +{ + int num_bytes; + + if (!p2config) { + return (0); + } + + if (!msg) { + return (0); + } + + if (length < MSG_MIN_LEN || length > MSG_MAX_LEN) { + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: msg length invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + return (0); + } + + /* + * Since we use the sig_alarm, we must handle + * interrupting the recv_from. + */ + *rcvd_socket_length = sizeof(struct sockaddr); + num_bytes = -1; + while (num_bytes < 0) { + num_bytes = recvfrom(p2config->dlep_udp_sockfd, + msg, + length, + MSG_WAITALL, + (struct sockaddr *)rcvd_msg_addr, + rcvd_socket_length); + + if (num_bytes < 0) { + if (errno == EINTR) { + continue; + } + + perror("recvfrom: udp failed "); + memset(msg, 0 , 128); + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: recv_from error = %d \n", + DEBUG_FUNCTION, + DEBUG_LINE, + num_bytes); + } + + } else { + rcvd_msg_addr->sin_port = htons(rcvd_msg_addr->sin_port); + + p2config->client_udp.sin_port = htons(rcvd_msg_addr->sin_port); + p2config->client_udp.sin_addr = rcvd_msg_addr->sin_addr; + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Received from !!!!!!%s at port %u %u bytes \n", + DEBUG_FUNCTION, + DEBUG_LINE, + //inet_ntoa(rcvd_msg_addr->sin_addr), + inet_ntoa(p2config->client_udp.sin_addr), + //rcvd_msg_addr->sin_port, + htons(p2config->client_udp.sin_port), + num_bytes); + } + break; + } + } + + return (num_bytes); +} + + + + +/** + * NAME + * dlep_tcp_receive + * + * SYNOPSIS + * int + * dlep_tcp_receive(dlep_config_t *p2config, + * struct sockaddr_in *rcvd_msg_addr, + * socklen_t *rcvd_msg_socket_length, + * void *msg, + * uint32_t length) + * + * DESCRIPTION + * This function is used to receive a TCP message. + * This is a blocking call. + * + * INPUT PARAMETERS + * p2config - pointer to the config data + * + * rcvd_msg_addr - pointer to the receive socket data + * + * rcvd_socket_length - pointer to the receive socket length + * + * msg - pointer to the message buffer to receive the data + * + * length - Maximum number of bytes to receive, that + * the buffer can hold. + * + * OUTPUT PARAMETERS + * None. + * + * RETURN VALUE + * number of bytes read + * <= 0 error condition + * + */ +int +dlep_tcp_receive (dlep_config_t *p2config, + struct sockaddr_in *rcvd_msg_addr, + socklen_t *rcvd_socket_length, + void *msg, + uint32_t length) +{ + int num_bytes; + //static int count; + int bytes_read ,bytes_left, fd; + unsigned short msg_len = 0; + char msg_hdr[4]; + char *buf_ptr; + + bytes_read = bytes_left = 0; + buf_ptr = msg_hdr; + + if (!p2config) { + + printf("\n INNN config"); + return (0); + } + fd = p2config->dlep_tcp_client_sockfd; + + + if (!msg) { + return (0); + } + + if (length < MSG_MIN_LEN || length > MSG_MAX_LEN) { + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: msg length invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + return (0); + } + + /* + * Since we use the sig_alarm, we must handle + * interrupting the recv_from. + */ + //*rcvd_socket_length = sizeof(struct sockaddr); + //num_bytes = -1; +#if 0 + while (num_bytes < 0) { + num_bytes = recvfrom(p2config->dlep_tcp_client_sockfd, + msg, + length, + MSG_WAITALL, + (struct sockaddr *)rcvd_msg_addr, + rcvd_socket_length); + + if (num_bytes < 0) { + if (errno == EINTR) { + continue; + } + count++; + if (count < 6) + perror("recvfrom: tcp failed "); + memset(msg, 0 , 128); + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: recv_from error = %d \n", + DEBUG_FUNCTION, + DEBUG_LINE, + num_bytes); + } + + } else { + // rcvd_msg_addr->sin_port = htons(rcvd_msg_addr->sin_port); + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Received from %s at port %u %u bytes \n", + DEBUG_FUNCTION, + DEBUG_LINE, + inet_ntoa(rcvd_msg_addr->sin_addr), + rcvd_msg_addr->sin_port, + num_bytes); + } + break; + } + } +#endif +#define MSG_HDR_SIZE 4 + bytes_read = recv(fd, msg_hdr, MSG_HDR_SIZE, MSG_PEEK); + /* fall through case where bytes_read == MSG_HDR_SIZE */ + buf_ptr++; + buf_ptr++; + +#define GETSHORT(ptr) ((unsigned char *)ptr)[0] << 8 | ((unsigned char *)ptr)[1] +// #define GETSHORT(ptr) (*((unsigned short *) (ptr))) + msg_len = GETSHORT(buf_ptr); + + /* Read the full message */ + msg_len += MSG_HDR_SIZE; + bytes_left = msg_len; + + + while (bytes_left > 0) { + bytes_read = recv(fd, msg, bytes_left, 0); + if (bytes_read == 0) { + close(p2config->dlep_tcp_client_sockfd); + TCP_CLIENT_READY = 0; + } +/* + uint8_t *ptr = msg; + int len = bytes_read; + for(;len!=0; --len) { + printf("%x",*ptr); + } +*/ + if(bytes_read < 0) { + return (-1); + } + + //*length += bytes_read; + msg += bytes_read; + bytes_left -= bytes_read; + } + num_bytes = msg_len - bytes_left; + +// return (MANET_INFRA_SUCCESS); + return (num_bytes); +} + + + + +/** + * NAME + * dlep_udp_send + * + * SYNOPSIS + * void + * dlep_send(dlep_config_t *p2config, + * dlep_context_peer_t *p2peer, + * void *msg, + * uint32_t length) + * + * DESCRIPTION + * This function is used to send a UDP mesage. + * + * INPUT PARAMETERS + * p2config - pointer to the config data + * + * p2peer - pointer to the peer context + * + * msg - Pointer to the message to be sent + * + * length - Number of bytes in mesage to send + * + * OUTPUT PARAMETERS + * None. + * + * RETURN VALUE + * None. + * + */ +void +dlep_send (dlep_config_t *p2config, + dlep_context_peer_t *p2peer, + void *msg, + uint32_t length) +{ + int send_bytes; + + if (!p2peer) { + return; + } + + if (!msg) { + return; + } + +// perror("send: udp "); + + memset(&p2peer->msg_addr, 0, sizeof(struct sockaddr_in)); + + p2peer->msg_addr.sin_family = AF_INET; +// Debug + + p2peer->msg_addr.sin_port = htons(p2peer->peer_udp_port); + + //p2peer->msg_addr.sin_addr.s_addr = htonl(p2peer->peer_ipv4.v4_addr.v4_addr32); + p2peer->msg_addr.sin_addr.s_addr = p2peer->peer_ipv4.v4_addr.v4_addr32; + + send_bytes = sendto(p2config->dlep_udp_sockfd, + msg, + length, + 0, + //(struct sockaddr *)&p2peer->msg_addr, + (struct sockaddr *)&p2config->client_udp, + sizeof(struct sockaddr_in)); + if (send_bytes < 0) { + perror("sendto: udp failed "); + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u send to %s at " + "port %d bytes=%d \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + inet_ntoa(p2peer->msg_addr.sin_addr), + p2peer->peer_udp_port, + send_bytes); + } + } else { + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u sent iiiii to %s at " + "port %d bytes=%d \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + //inet_ntoa(p2peer->msg_addr.sin_addr), + inet_ntoa(p2config->client_udp.sin_addr), + //p2peer->peer_udp_port, + htons(p2config->client_udp.sin_port), + send_bytes); + } + } + + return; +} + + + + +void +dlep_tcp_send (dlep_config_t *p2config, + dlep_context_peer_t *p2peer, + void *msg, + uint32_t length) +{ + int send_bytes; + uint32_t ttl=255; + + if (!p2peer) { + return; + } + + if (!msg) { + return; + } + + + //perror("send: tcp "); + memset(&p2peer->msg_addr, 0, sizeof(struct sockaddr_in)); + + p2peer->msg_addr.sin_family = AF_INET; + + p2peer->msg_addr.sin_port = htons(p2peer->peer_tcp_port); + + //p2peer->msg_addr.sin_addr.s_addr = htonl(p2peer->peer_ipv4.v4_addr.v4_addr32); + p2peer->msg_addr.sin_addr.s_addr = p2peer->peer_ipv4.v4_addr.v4_addr32; + if (p2peer->ttl) { + if(setsockopt(p2config->dlep_tcp_client_sockfd, IPPROTO_IP, IP_TTL, + (char *)&p2peer->ttl, sizeof(p2peer->ttl)) < 0) { + // perror("setsockopt failed 1"); + close(p2config->dlep_tcp_client_sockfd); + exit(1); + } + } + + send_bytes = sendto(p2config->dlep_tcp_client_sockfd, + msg, + length, + 0, + // (struct sockaddr *)&p2peer->msg_addr, + (struct sockaddr *)&p2config->client, + sizeof(struct sockaddr_in)); + if (send_bytes < 0) { + perror("sendto: tcp failed "); + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u send to %s at " + "port %d bytes=%d \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + inet_ntoa(p2peer->msg_addr.sin_addr), + p2peer->peer_tcp_port, + send_bytes); + } + } else { + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u sent to %s at " + "port %d bytes=%d \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + // inet_ntoa(p2peer->msg_addr.sin_addr), + inet_ntoa(p2config->client.sin_addr), + // p2peer->peer_tcp_port, + htons(p2config->client.sin_port), + send_bytes); + } + } + if (p2peer->ttl) { + p2peer->ttl = 0; + if(setsockopt(p2config->dlep_tcp_client_sockfd, IPPROTO_IP, IP_TTL, + (char *)&ttl, sizeof(ttl)) < 0) { + // perror("setsockopt failed 2"); + close(p2config->dlep_tcp_client_sockfd); + exit(1); + } + } + + return; +} diff --git a/dlep_radio_ipv4/dlep_porter.h b/dlep_radio_ipv4/dlep_porter.h new file mode 100644 index 0000000..8a3180a --- /dev/null +++ b/dlep_radio_ipv4/dlep_porter.h @@ -0,0 +1,103 @@ +/*---------------------------------------------------------------------- + * dlep_porter.h -- APIs for UDP socket use + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_PORTER_H__ +#define __DLEP_PORTER_H__ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "safe_types.h" +#include "dlep_config.h" + +#include "dlep_context_peer.h" + + +extern void +dlep_porter_init(dlep_config_t *p2config); + + +extern void +dlep_porter_open(dlep_config_t *p2config); + +extern void +dlep_tcp_porter_open(dlep_config_t *p2config); + + +extern void +dlep_tcp_open(dlep_config_t *p2config); + + +extern void +dlep_tcp_connect(dlep_config_t *p2config, + dlep_context_peer_t *p2ctx, + void *msg, + uint32_t length); + + +extern int +dlep_udp_receive(dlep_config_t *p2config, + struct sockaddr_in *rcvd_msg_addr, + socklen_t *rcvd_msg_socket_length, + void *msg, + uint32_t length); + +extern int +dlep_tcp_receive(dlep_config_t *p2config, + struct sockaddr_in *rcvd_msg_addr, + socklen_t *rcvd_msg_socket_length, + void *msg, + uint32_t length); + + +extern void +dlep_send(dlep_config_t *p2config, + dlep_context_peer_t *p2ctx, + void *msg, + uint32_t length); + +extern void +dlep_tcp_send(dlep_config_t *p2config, + dlep_context_peer_t *p2ctx, + void *msg, + uint32_t length); + + +#endif + diff --git a/dlep_radio_ipv4/dlep_radio b/dlep_radio_ipv4/dlep_radio new file mode 100644 index 0000000000000000000000000000000000000000..6c90125473fefb718fbe3fe22fc92b71de643a4f GIT binary patch literal 370735 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�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 z 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 literal 0 HcmV?d00001 diff --git a/dlep_radio_ipv4/dlep_radio_sub b/dlep_radio_ipv4/dlep_radio_sub new file mode 100644 index 0000000000000000000000000000000000000000..6bd24d69e30099ab5be975161e9dff088a142caf GIT binary patch literal 386374 zcmdpfdtjVX`v0UlM3n?ZYm2m6;<|NjDW)`xOUWYCr7OK^(Tg^r*fMQWI!4J_Y~9Ni zUDvv`)2PfSlAwrtmSWiA9Vx=HqDp_C&vVXs-}BC;3A^9@<2N*O&Uv2moaa2Zb9v8u z=E|}YkLgxW5HO!^fg=LU6&Hu3Nc{~2!sCLH=bunuaG(%>2L}2FHbtJ05dQHK(kb(u z)TGUKp+XC6g75B3chd#kLMoxZ`>I^Pd>an=?Que+5dYv4lD`AW6hZSH2$V=U>yg(| z4KFPlBjx71@79tH6b@3~rXH!WUb(JUuIriaI?b5*HvMDY_^+>G2j3y&m=EzQFkJq6 z-y#c?m48|_j_KA-RmIj#j}lDt{rncHqWL!U{(ySqv#TG&=kG6^H0Iy~e}Cb)eJ-3d zrF!N*GY22M&%p=oJ7em;`wRcYAjmErds2mvHuBg8Ikw#k|ENpC&;7jr-V264`PG-b z|NX+CPbVBT<;DwcCTwr~Gx84{`)-TRe8#f$y44fPk%#s@XPbyzmW%j zQJ(T2@|541r+iGFcK?(Ie~&!)o98M2YaTkZ#$5XPI8XVGdCEuSDSs+Y`EhypEX{*o zm#5sxQ(l~h{&{)uOY-0!mZ!Wi51j+^l%JHR{D3_4kIGa2bsjqX@|3@ur~GAa_7w2%R!^^0dIT@zbYI zogNrFb;^|SW2*v_ri`yTcS_aN(Fy_er&U+Y;GeM*M^8svGpbm5{DnlGQ8jLoP^y}G z0r9J*UKp5g-gw~87+*E1YSQHK(*u*oPeukjqn#;J&%JQ!*wIy!rcMcrnKWe_2~4f7 z3QQkA_F~oY=yBtu3K^d;_QI(%#w)tj7m_6VH+5Q7VDjh-L5C0!liCxePn}F^Xv9=N zjY;Q?9xIJam^OXVl&T4!F=brU)WGPmW5q7$Po=XX8aZVnM9!;1ð8A6OTLU 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

      V>5=1IC71+dFV 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 literal 0 HcmV?d00001 diff --git a/dlep_radio_ipv4/dlep_server_neighbor_fsm.h b/dlep_radio_ipv4/dlep_server_neighbor_fsm.h new file mode 100644 index 0000000..a0faed7 --- /dev/null +++ b/dlep_radio_ipv4/dlep_server_neighbor_fsm.h @@ -0,0 +1,102 @@ +/*---------------------------------------------------------------------- + * dlep_server_neighbor_fsm.h -- server neighbor state machine + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_SERVER_SESSION_FSM_H__ +#define __DLEP_SERVER_SESSION_FSM_H__ + +#include "safe_types.h" +#include "dlep_context_peer.h" +#include "dlep_context_neighbor.h" + + +/* + * normalized server events for neighbors + */ +typedef enum { + neighbor_init_e = 0, + neighbor_update_metrics_e, + neighbor_update_addr_req_e, + neighbor_term_user_req_e, + neighbor_term_e, + neighbor_term_ack_e, + neighbor_down_ack_tmo_e, + neighbor_link_char_res_e, +} dlep_server_neighbor_events_e; + + +/* + * normalized server states + */ +typedef enum { + neighbor_initializing_s = 0, + neighbor_update_s, + neighbor_terminating_s, +} dlep_server_neighbor_states_e; + + + + +extern uint32_t +dlep_server_neighbor_fsm_get_state( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_server_neighbor_fsm_show_counter( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_server_neighbor_fsm_show_state_table( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_server_neighbor_fsm_show_history( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_server_neighbor_fsm_engine(uint32_t normalized_event, + dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_neighbor_fsm_destroy(dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_neighbor_fsm_create(dlep_context_neighbor_t *p2neighbor); + + +#endif + diff --git a/dlep_radio_ipv4/dlep_sim_options.h b/dlep_radio_ipv4/dlep_sim_options.h new file mode 100644 index 0000000..4d6cf73 --- /dev/null +++ b/dlep_radio_ipv4/dlep_sim_options.h @@ -0,0 +1,79 @@ +/*---------------------------------------------------------------------- + * dlep_sim_options.h -- Sim build options + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_SIM_OPTIONS_H__ +#define __DLEP_SIM_OPTIONS_H__ + +/* + * This file defines several build #defines that can be used to + * change the behavior of the simulator code for testing, etc. + */ + + +/** + ** Enable the definition of this macro to pack multiple + ** peer messages in a packet. + ** + ** #define MULTIPLE_PEER_MESSAGES_PACKED ( 1 ) + **/ +// #define MULTIPLE_PEER_MESSAGES_PACKED ( 1 ) + + +/** + ** Enable the definition of this macro to pack multiple + ** neighbor messages in a packet. + ** + ** #define MULTIPLE_NEIGHBOR_MESSAGES_PACKED ( 1 ) + **/ +//#define MULTIPLE_NEIGHBOR_MESSAGES_PACKED ( 1 ) + + +/** + ** Enable the insertion of the experimental TLVs for testing + ** + ** #define EXPERIMENTAL_TLVS ( 1 ) + **/ +// #define EXPERIMENTAL_TLVS ( 1 ) + + +/* + * defintion of this macro will enable dynamic + * metrics during periodic updates for testing. + * + * #define DYNAMIC_METRICS_ENABLED + */ +//#define DYNAMIC_METRICS_ENABLED + + + + +#endif + diff --git a/dlep_radio_ipv4/dlep_source_cli.c b/dlep_radio_ipv4/dlep_source_cli.c new file mode 100644 index 0000000..fb745a1 --- /dev/null +++ b/dlep_radio_ipv4/dlep_source_cli.c @@ -0,0 +1,143 @@ +/*------------------------------------------------------------------ + * dlep_source_cli.c -- source CLI commands + * + * October 2011, Bo Berry + * + * Copyright (c) 2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include +#include + +#include "cli.h" + +#include "dlep_source_cli.h" +//SENDIL +#include "sim_dlep_radio_cli.h" + + + +/* + * directory record + */ +cli_record_t cli_source_dir; + + +/* + * allocate command records + */ +static cli_record_t source_command_cmd; + + + +/** + ** source commands + **/ + +static void +source_commands (uint32_t argc, char *argv[]) +{ + FILE *fp; + +#define MAX_INPUT_LENGTH ( 512 ) + char input_string[MAX_INPUT_LENGTH]; + + + if (argv[1] && *argv[1] == '?') { + printf("source_commands - source commands from the file\n"); + printf("\n"); + printf(" - the file that contains commands being sourced \n"); + printf("\n"); + return; + } + + printf("sourcing file %s \n", argv[1]); + + fp = fopen(argv[1], "r"); + if (!fp) { + printf("Error: problem opening source file: %s\n", + argv[1]); + return; + } + + while (fgets(input_string, MAX_INPUT_LENGTH, fp)) { + if (input_string[0] == '\0') { + continue; + } else if (input_string[0] == '#') { + continue; + } + + dlep_cli_engine(input_string); + } + + return; +} + + + +/** + * NAME + * dlep_source_cli_init + * + * SYNOPSIS + * void + * dlep_source_cli_init() + * + * DESCRIPTION + * Registers the dlep source command with the cli + * facility. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_source_cli_init (void) +{ + RC_CLI_t rc; + + /* + * Create directory and commands + */ + rc = cli_mkdir("source", NULL, &cli_source_dir); + + + rc = cli_mkcmd("source_commands", + source_commands, + &cli_source_dir, + &source_command_cmd); + + return; +} + diff --git a/dlep_radio_ipv4/dlep_source_cli.h b/dlep_radio_ipv4/dlep_source_cli.h new file mode 100644 index 0000000..99bf642 --- /dev/null +++ b/dlep_radio_ipv4/dlep_source_cli.h @@ -0,0 +1,40 @@ +/*---------------------------------------------------------------------- + * dlep_source_cli.h -- source cli commands + * + * August 2011, Bo Berry + * + * Copyright (c) 2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_SOURCE_CLI_H__ +#define __DLEP_SOURCE_CLI_H__ + + +extern void +dlep_source_cli_init(void); + +#endif + diff --git a/dlep_radio_ipv4/dlep_tcp_sockfd b/dlep_radio_ipv4/dlep_tcp_sockfd new file mode 100644 index 0000000..18605ff --- /dev/null +++ b/dlep_radio_ipv4/dlep_tcp_sockfd @@ -0,0 +1,259 @@ +dlep_client_peer_event_handlers.c: secs_to_milliseconds(p2config->peer_offer_interval), +dlep_client_peer_event_handlers.c: secs_to_milliseconds(p2config->peer_offer_interval), +dlep_client_peer_event_handlers.c: close(p2config->dlep_udp_sockfd); +dlep_client_peer_event_handlers.c: close(p2config->dlep_tcp_sockfd); +dlep_client_peer_event_handlers.c: if (p2config->start_on_discovery) { +dlep_client_peer_event_handlers.c: secs_to_milliseconds(p2config->peer_offer_interval), +dlep_client_peer_event_handlers.c: secs_to_milliseconds(p2config->peer_offer_interval), +dlep_client_peer_event_handlers.c: secs_to_milliseconds(p2config->peer_offer_interval), +dlep_client_peer_event_handlers.c: secs_to_milliseconds(p2config->peer_offer_interval), +dlep_client_peer_event_handlers.c: close(p2config->dlep_udp_sockfd); +dlep_client_peer_event_handlers.c: close(p2config->dlep_tcp_sockfd); +dlep_client_peer_event_handlers.c: if (p2config->start_on_discovery) { +dlep_client_peer_event_handlers.c: secs_to_milliseconds(p2config->peer_offer_interval), +dlep_client_peer_event_handlers.c: secs_to_milliseconds(p2config->peer_offer_interval), +dlep_client_peer_event_handlers.c: close(p2config->dlep_udp_sockfd); +dlep_client_peer_event_handlers.c: close(p2config->dlep_tcp_sockfd); +dlep_client_peer_event_handlers.c: if (p2config->start_on_discovery) { +dlep_client_peer_event_handlers.c: secs_to_milliseconds(p2config->peer_offer_interval), +dlep_client_peer_event_handlers.c: secs_to_milliseconds(p2config->peer_offer_interval), +dlep_client_peer_event_handlers.c: close(p2config->dlep_udp_sockfd); +dlep_client_peer_event_handlers.c: close(p2config->dlep_tcp_sockfd); +dlep_client_peer_event_handlers.c: if (p2config->start_on_discovery) { +dlep_client_peer_event_handlers.c: secs_to_milliseconds(p2config->peer_offer_interval), +dlep_client_peer_event_handlers.c: secs_to_milliseconds(p2config->peer_offer_interval), +dlep_config.c: strcpy(p2config->filename, "dlep_sim.cfg"); +dlep_config.c: strcpy(p2config->sim_name, "dlep"); +dlep_config.c: p2config->local_udp_port = 0; +dlep_config.c: p2config->local_tcp_port = 0; +dlep_config.c: p2config->local_ipv4_dot[0] = '\0'; +dlep_config.c: ipv4_zero_address(&p2config->local_ipv4); +dlep_config.c: p2config->router_udp_port = 0; +dlep_config.c: p2config->router_tcp_port = 0; +dlep_config.c: p2config->router_ipv4_dot[0] = '\0'; +dlep_config.c: ipv4_zero_address(&p2config->router_ipv4); +dlep_config.c: p2config->start_on_launch = TRUE; +dlep_config.c: strcpy(p2config->local_type_description, "no type description"); +dlep_config.c: p2config->local_id = 0; +dlep_config.c: p2config->peer_offer_interval = +dlep_config.c: p2config->peer_heartbeat_interval = +dlep_config.c: p2config->peer_heartbeat_missed_threshold = +dlep_config.c: p2config->peer_term_ack_tmo = +dlep_config.c: p2config->peer_term_missed_ack_threshold = +dlep_config.c: p2config->neighbor_up_ack_tmo = +dlep_config.c: p2config->neighbor_up_missed_ack_threshold = +dlep_config.c: p2config->neighbor_update_interval_tmo = +dlep_config.c: p2config->neighbor_activity_timer = +dlep_config.c: p2config->neighbor_down_ack_tmo = +dlep_config.c: p2config->neighbor_down_missed_ack_threshold = +dlep_config.c: p2config->sim_name, +dlep_config.c: p2config->filename); +dlep_config.c: p2config->local_udp_port); +dlep_config.c: p2config->local_tcp_port); +dlep_config.c: p2config->local_ipv4_dot); +dlep_config.c: if (p2config->router_udp_port) { +dlep_config.c: p2config->router_udp_port); +dlep_config.c: if (p2config->router_tcp_port) { +dlep_config.c: p2config->router_tcp_port); +dlep_config.c: if (p2config->router_udp_port && p2config->router_tcp_port) { +dlep_config.c: p2config->router_ipv4_dot); +dlep_config.c: p2config->local_type_description); +dlep_config.c: p2config->local_id); +dlep_config.c: p2config->peer_offer_interval); +dlep_config.c: p2config->peer_heartbeat_interval); +dlep_config.c: p2config->peer_heartbeat_missed_threshold); +dlep_config.c: p2config->peer_term_ack_tmo); +dlep_config.c: p2config->peer_term_missed_ack_threshold); +dlep_config.c: p2config->neighbor_up_ack_tmo); +dlep_config.c: p2config->neighbor_up_missed_ack_threshold); +dlep_config.c: p2config->neighbor_update_interval_tmo); +dlep_config.c: p2config->neighbor_activity_timer); +dlep_config.c: p2config->neighbor_down_ack_tmo); +dlep_config.c: p2config->neighbor_down_missed_ack_threshold); +dlep_config.c: fp = fopen(p2config->filename, "r"); +dlep_config.c: p2config->filename); +dlep_config.c: strncpy(p2config->sim_name, argv[1], DLEP_SIM_NAME_LEN); +dlep_config.c: p2config->start_on_launch = FALSE; +dlep_config.c: p2config->start_on_discovery = TRUE; +dlep_config.c: p2config->local_udp_port = strtoul(argv[1], NULL, 10); +dlep_config.c: p2config->local_tcp_port = strtoul(argv[1], NULL, 10); +dlep_config.c: strcpy(p2config->local_ipv4_dot, argv[1]); +dlep_config.c: ipv4_dot_decimal2digits(&p2config->local_ipv4, argv[1]); +dlep_config.c: p2config->router_udp_port = strtoul(argv[1], NULL, 10); +dlep_config.c: p2config->router_tcp_port = strtoul(argv[1], NULL, 10); +dlep_config.c: strcpy(p2config->router_ipv4_dot, argv[1]); +dlep_config.c: ipv4_dot_decimal2digits(&p2config->router_ipv4, argv[1]); +dlep_config.c: p2config->router_ipv4.v4_addr.v4_addr32 = +dlep_config.c: htonl(p2config->router_ipv4.v4_addr.v4_addr32); +dlep_config.c: strncpy(p2config->local_type_description, +dlep_config.c: p2config->local_type_description[RFC5444_TLV_PEER_TYPE_MAX_LENGTH] = '\0'; +dlep_config.c: p2config->local_id = temp; +dlep_config.c: p2config->peer_heartbeat_interval = strtoul(argv[1], NULL, 10); +dlep_config.c: if (p2config->peer_heartbeat_interval < +dlep_config.c: p2config->peer_heartbeat_interval = +dlep_config.c: if (p2config->peer_heartbeat_interval > +dlep_config.c: p2config->peer_heartbeat_interval = +dlep_config.c: p2config->peer_heartbeat_missed_threshold = +dlep_config.c: if (p2config->peer_heartbeat_missed_threshold < +dlep_config.c: p2config->peer_heartbeat_missed_threshold = +dlep_config.c: if (p2config->peer_heartbeat_missed_threshold > +dlep_config.c: p2config->peer_heartbeat_missed_threshold = +dlep_config.c: p2config->peer_term_ack_tmo = strtoul(argv[1], NULL, 10); +dlep_config.c: if (p2config->peer_term_ack_tmo < +dlep_config.c: p2config->peer_term_ack_tmo = +dlep_config.c: if (p2config->peer_term_ack_tmo > +dlep_config.c: p2config->peer_term_ack_tmo = +dlep_config.c: p2config->peer_term_missed_ack_threshold = +dlep_config.c: if (p2config->peer_term_missed_ack_threshold < +dlep_config.c: p2config->peer_term_missed_ack_threshold = +dlep_config.c: if (p2config->peer_term_missed_ack_threshold > +dlep_config.c: p2config->peer_term_missed_ack_threshold = +dlep_config.c: p2config->neighbor_up_ack_tmo = strtoul(argv[1], NULL, 10); +dlep_config.c: if (p2config->neighbor_up_ack_tmo < +dlep_config.c: p2config->neighbor_up_ack_tmo = +dlep_config.c: if (p2config->neighbor_up_ack_tmo > +dlep_config.c: p2config->neighbor_up_ack_tmo = +dlep_config.c: p2config->neighbor_up_missed_ack_threshold = +dlep_config.c: if (p2config->neighbor_up_missed_ack_threshold < +dlep_config.c: p2config->neighbor_up_missed_ack_threshold = +dlep_config.c: if (p2config->neighbor_up_missed_ack_threshold > +dlep_config.c: p2config->neighbor_up_missed_ack_threshold = +dlep_config.c: p2config->neighbor_update_interval_tmo = +dlep_config.c: if (p2config->neighbor_update_interval_tmo > 0) { +dlep_config.c: if (p2config->neighbor_update_interval_tmo < +dlep_config.c: p2config->neighbor_update_interval_tmo = +dlep_config.c: if (p2config->neighbor_update_interval_tmo > +dlep_config.c: p2config->neighbor_update_interval_tmo = +dlep_config.c: p2config->neighbor_activity_timer = strtoul(argv[1], NULL, 10); +dlep_config.c: if (!p2config->neighbor_activity_timer) { +dlep_config.c: if (p2config->neighbor_activity_timer < +dlep_config.c: p2config->neighbor_activity_timer = +dlep_config.c: if (p2config->neighbor_activity_timer > +dlep_config.c: p2config->neighbor_activity_timer = +dlep_config.c: p2config->neighbor_down_ack_tmo = strtoul(argv[1], NULL, 10); +dlep_config.c: if (p2config->neighbor_down_ack_tmo < +dlep_config.c: p2config->neighbor_down_ack_tmo = +dlep_config.c: if (p2config->neighbor_down_ack_tmo > +dlep_config.c: p2config->neighbor_down_ack_tmo = +dlep_config.c: p2config->neighbor_down_missed_ack_threshold = +dlep_config.c: if (p2config->neighbor_down_missed_ack_threshold < +dlep_config.c: p2config->neighbor_down_missed_ack_threshold = +dlep_config.c: if (p2config->neighbor_down_missed_ack_threshold > +dlep_config.c: p2config->neighbor_down_missed_ack_threshold = +dlep_context_peer.c: p2config->peer_term_ack_tmo; +dlep_context_peer.c: p2config->peer_term_missed_ack_threshold; +dlep_context_peer.c: p2config->peer_heartbeat_interval; +dlep_context_peer.c: p2config->peer_heartbeat_missed_threshold; +dlep_context_peer.c: p2config->neighbor_up_ack_tmo; +dlep_context_peer.c: p2config->neighbor_up_missed_ack_threshold; +dlep_context_peer.c: p2config->neighbor_update_interval_tmo; +dlep_context_peer.c: p2config->neighbor_activity_timer; +dlep_context_peer.c: p2config->neighbor_down_ack_tmo; +dlep_context_peer.c: p2config->neighbor_down_missed_ack_threshold; +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: rfc5444_peer_tlv(p2es, p2config->local_type_description); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: rfc5444_peer_tlv(p2es, p2config->local_type_description); +dlep_message_builder.c: rfc5444_heartbeat_interval_tlv(p2es, p2config->peer_heartbeat_interval); +dlep_message_builder.c: rfc5444_peer_tlv(p2es, p2config->local_type_description); +dlep_message_builder.c: rfc5444_heartbeat_interval_tlv(p2es, p2config->peer_heartbeat_interval); +dlep_message_builder.c: rfc5444_peer_tlv(p2es, p2config->local_type_description); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_message_builder.c: p2config->peer_heartbeat_interval); +dlep_porter.c: p2config->dlep_tcp_sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); +dlep_porter.c:// fcntl(p2config->dlep_tcp_sockfd, F_SETFL, O_NONBLOCK); +dlep_porter.c: memset(&p2config->dlep_addr, 0, sizeof(struct sockaddr_in)); +dlep_porter.c: p2config->dlep_addr.sin_family = AF_INET; +dlep_porter.c: p2config->dlep_addr.sin_port = htons(p2config->local_tcp_port); +dlep_porter.c: p2config->dlep_addr.sin_addr.s_addr = INADDR_ANY; +dlep_porter.c: status = bind(p2config->dlep_tcp_sockfd, +dlep_porter.c: (struct sockaddr *)&p2config->dlep_addr, +dlep_porter.c: p2config->local_tcp_port); +dlep_porter.c: status = listen(p2config->dlep_tcp_sockfd,5); +dlep_porter.c: p2config->client_lenght = sizeof(p2config->client); +dlep_porter.c: p2config->dlep_tcp_client_sockfd= accept(p2config->dlep_tcp_sockfd, +dlep_porter.c: (struct sockaddr *)&p2config->client, &p2config->client_lenght); +dlep_porter.c: if (p2config->dlep_tcp_client_sockfd < 0) { +dlep_porter.c: printf(" dlep_tcp_sockfd after accept =%d",p2config->dlep_tcp_client_sockfd); +dlep_porter.c:// if (p2config->start_on_discovery) { +dlep_porter.c: p2config->dlep_udp_sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); +dlep_porter.c: if (p2config->dlep_udp_sockfd < 0) { +dlep_porter.c: memset(&p2config->dlep_addr, 0, sizeof(struct sockaddr_in)); +dlep_porter.c: p2config->dlep_addr.sin_family = AF_INET; +dlep_porter.c: p2config->dlep_addr.sin_port = htons(p2config->local_udp_port); +dlep_porter.c: p2config->dlep_addr.sin_addr.s_addr = htonl(INADDR_ANY); +dlep_porter.c: status = bind(p2config->dlep_udp_sockfd, +dlep_porter.c: (struct sockaddr *)&p2config->dlep_addr, +dlep_porter.c: p2config->local_udp_port); +dlep_porter.c:// listen(32, p2config->dlep_udp_sockfd); +dlep_porter.c: p2config->dlep_tcp_sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); +dlep_porter.c:// fcntl(p2config->dlep_tcp_sockfd, F_SETFL, O_NONBLOCK); +dlep_porter.c: if (p2config->dlep_tcp_sockfd < 0) { +dlep_porter.c: memset(&p2config->dlep_addr, 0, sizeof(struct sockaddr_in)); +dlep_porter.c: p2config->dlep_addr.sin_family = AF_INET; +dlep_porter.c: p2config->dlep_addr.sin_port = htons(p2config->local_tcp_port); +dlep_porter.c: p2config->dlep_addr.sin_addr.s_addr = htonl(INADDR_ANY); +dlep_porter.c: status = bind(p2config->dlep_tcp_sockfd, +dlep_porter.c: (struct sockaddr *)&p2config->dlep_addr, +dlep_porter.c: p2config->local_tcp_port); +dlep_porter.c: listen(32, p2config->dlep_tcp_sockfd); +dlep_porter.c: status = connect(p2config->dlep_tcp_sockfd, +dlep_porter.c:// listen(32, p2config->dlep_sockfd); +dlep_porter.c: num_bytes = recvfrom(p2config->dlep_udp_sockfd, +dlep_porter.c: num_bytes = recvfrom(p2config->dlep_tcp_sockfd, +dlep_porter.c: send_bytes = sendto(p2config->dlep_udp_sockfd, +dlep_porter.c: send_bytes = sendto(p2config->dlep_tcp_sockfd, +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: rfc5444_peer_tlv(p2es, p2config->local_type_description); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: rfc5444_peer_tlv(p2es, p2config->local_type_description); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: rfc5444_peer_tlv(p2es, p2config->local_type_description); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +fuzz_message_builder.c: p2config->peer_heartbeat_interval); +sim_dlep_radio.c: strcpy(p2config->filename, args); +sim_dlep_radio.c: printf(" Config file = %s \n", p2config->filename); +sim_dlep_radio.c: p2peer = dlep_peer_allocate(&p2config->local_ipv4, +sim_dlep_radio.c: p2config->local_udp_port, +sim_dlep_radio.c: p2config->local_tcp_port); +sim_dlep_radio.c: p2peer->peer_udp_port = p2config->router_udp_port; +sim_dlep_radio.c:// if (!p2config->start_on_discovery) { +sim_dlep_radio.c: p2peer->peer_tcp_port = p2config->router_tcp_port; +sim_dlep_radio.c: p2config->router_ipv4.v4_addr.v4_addr32; +sim_dlep_radio.c: p2peer->client_id = p2config->local_id; +sim_dlep_radio.c: if (p2config->start_on_launch) { +sim_dlep_radio.c: if (p2config->start_on_discovery) { +sim_dlep_radio.c: cli_set_prompt(p2config->sim_name); +sim_dlep_radio.c: FD_SET(p2config->dlep_udp_sockfd, &readfds); +sim_dlep_radio.c: FD_SET(p2config->dlep_tcp_sockfd, &readfds); +sim_dlep_radio.c:// highsock = p2config->dlep_udp_sockfd + 1; +sim_dlep_radio.c: highsock = p2config->dlep_tcp_sockfd + 1; +sim_dlep_radio.c:// printf("\n UDP sock %d, TCP sock %d",p2config->dlep_udp_sockfd,p2config->dlep_tcp_sockfd); +sim_dlep_radio.c: if (FD_ISSET(p2config->dlep_udp_sockfd, &readfds)) { +sim_dlep_radio.c: if (FD_ISSET(p2config->dlep_tcp_sockfd, &readfds)&& TCP_READY) { +sim_dlep_radio.c: printf(" INSIDE tcp socket set tsock %d",p2config->dlep_tcp_sockfd); +sim_dlep_radio_cli.c:/* if (p2config->start_on_discovery) { diff --git a/dlep_radio_ipv4/fsm.c b/dlep_radio_ipv4/fsm.c new file mode 100644 index 0000000..a26961a --- /dev/null +++ b/dlep_radio_ipv4/fsm.c @@ -0,0 +1,788 @@ +/*------------------------------------------------------------------ + * fsm.c -- Finite State Machine + * + * February 2005, Bo Berry + * + * Copyright (c) 2005-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include + +#include "fsm.h" + + +/* + * These are the maximum states and events that fsm uses + * for sizing during create. + */ +#define FSM_MAX_STATES ( 64 ) +#define FSM_MAX_EVENTS ( 64 ) + + + +/** + * NAME + * fsm_display_table + * + * SYNOPSIS + * #include "fsm.h" + * void + * fsm_display_table(fsm_t *fsm) + * + * DESCRIPTION + * Displays the designated state machine table to console. + * + * INPUT PARAMETERS + * fsm - handle to fsm + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +fsm_display_table (fsm_t *fsm) +{ + uint32_t i; + uint32_t j; + state_tuple_t *state_ptr; + event_tuple_t *event_ptr; + + state_description_t *p2state_description; + event_description_t *p2event_description; + + if (fsm == NULL) { + return; + } + + if (fsm->tag != FSM_TAG) { + return; + } + + p2state_description = fsm->state_description_table; + p2event_description = fsm->event_description_table; + + printf("\nFSM: %s \n", fsm->fsm_name); + printf(" number_states = %d\n", fsm->number_states); + printf(" number_events = %d\n", fsm->number_events); + printf(" curr_state = %s\n", + p2state_description[fsm->curr_state].description ); + printf("\n"); + + /* + * For the normalized state table, list the normalized + * events and state transitions. + */ + for (i=0; inumber_states; i++) { + + state_ptr = &fsm->state_table[i]; + + printf(" State: %s \n", + p2state_description[state_ptr->state_id].description); + printf(" Event / Next State \n"); + printf("----------------------------\n"); + + for (j=0; jnumber_events; j++) { + + event_ptr = &state_ptr->p2event_tuple[j]; + + /* + * Display the name of the state associated with the next state. + */ + printf(" %u-%s / %s \n", + j, + p2event_description[j].description, + p2state_description[event_ptr->next_state].description); + } + printf("\n"); + } + printf("\n"); + return; +} + + +/** + * NAME + * fsm_show_history + * + * SYNOPSIS + * #include "fsm.h' + * void + * fsm_show_history(fsm_t *fsm) + * + * DESCRIPTION + * Displays history of the state transitions. + * + * INPUT PARAMETERS + * *fsm - handle of the state machine + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +fsm_show_history (fsm_t *fsm) +{ + uint32_t i, j; + fsm_history_t *history_ptr; + + state_description_t *p2state_description; + event_description_t *p2event_description; + + if (fsm == NULL) { + return; + } + + if (fsm->tag != FSM_TAG) { + return; + } + + p2state_description = fsm->state_description_table; + p2event_description = fsm->event_description_table; + + printf("\nFSM: %s History \n", fsm->fsm_name); + printf("Current State / Event / New State / rc \n"); + printf("------------------------------------------------\n"); + + j = fsm->history_index; + for (i=0; ihistory[i]; + + if (history_ptr->stateID == FSM_NULL_STATE_ID) { + continue; + } + + printf(" %u-%s / %u-%s / %u-%s / %u\n", + history_ptr->prevStateID, + p2state_description[history_ptr->prevStateID].description, + history_ptr->eventID, + p2event_description[history_ptr->eventID].description, + history_ptr->stateID, + p2state_description[history_ptr->stateID].description, + history_ptr->handler_rc); + + if (j==0) { + j=FSM_HISTORY; + } + j--; + } + + printf("\n"); + return; +} + + +/** + * NAME + * fsm_get_state + * + * SYNOPSIS + * #include "fsm.h" + * RC_FSM_t + * fsm_get_state(fsm_t *fsm, uint32_t*p2state) + * + * DESCRIPTION + * Function to return the current state. + * + * INPUT PARAMETERS + * *fsm - state machine handle + * + * p2state - Pointer to a state variable to be updated. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * error otherwise + * + */ +RC_FSM_t +fsm_get_state (fsm_t *fsm, uint32_t *p2state) +{ + if (fsm == NULL) { + return (RC_FSM_NULL); + } + + if (fsm->tag != FSM_TAG) { + return (RC_FSM_INVALID_HANDLE); + } + + *p2state = fsm->curr_state; + return (RC_FSM_OK); +} + + +/** + * NAME + * fsm_set_exception_state + * + * SYNOPSIS + * #include "fsm.h" + * RC_FSM_t + * fsm_set_exception_state(fsm_t *fsm, + * uint32_t exception_state) + * + * DESCRIPTION + * To be called from an event handler to alter + * the next state from the event table when an + * exception has been detected + * + * INPUT PARAMETERS + * *fsm - state machine handle + * + * exception_state - New state to be transitioned + * when the event handler returns. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * error otherwise + * + */ +RC_FSM_t +fsm_set_exception_state (fsm_t *fsm, uint32_t exception_state) +{ + if (fsm == NULL) { + return (RC_FSM_NULL); + } + + if (fsm->tag != FSM_TAG) { + return (RC_FSM_INVALID_HANDLE); + } + + /* + * Change the state of this FSM to the requested state. + */ + if (exception_state > fsm->number_states-1) { + return (RC_FSM_INVALID_STATE); + } + + fsm->exception_state = exception_state; + fsm->exception_state_indicator = TRUE; + return (RC_FSM_OK); +} + + +/** + * NAME + * fsm_destroy + * + * SYNOPSIS + * #include "fsm.h" + * RC_FSM_t + * fsm_destroy(fsm_t **fsm) + * + * DESCRIPTION + * Destroys the specified state machine. + * + * INPUT PARAMETERS + * fsm - pointer to fsm handle + * + * OUTPUT PARAMETERS + * fsm - is nulled + * + * RETURN VALUE + * RC_FSM_OK + * error otherwise + * + */ +RC_FSM_t +fsm_destroy (fsm_t **fsm) +{ + fsm_t *p2fsm; + + if (fsm == NULL) { + return (RC_FSM_NULL); + } + + p2fsm = *fsm; + if (p2fsm->tag != FSM_TAG) { + return (RC_FSM_INVALID_HANDLE); + } + + free(p2fsm->history); + *fsm = NULL; + free(p2fsm); + return (RC_FSM_OK); +} + + +/** + * NAME + * fsm_create + * + * SYNOPSIS + * #include "fsm.h" + * RC_FSM_t + * fsm_create(fsm_t **fsm, + * char *name, + * uint32_t initial_state, + * state_description_t *state_description_table, + * event_description_t *event_description_table, + * state_tuple_t *state_table) + * + * DESCRIPTION + * Creates and initializes a state machine. The + * initial state is specified by the user. + * + * INPUT PARAMETERS + * fsm pointer to fsm handle to be returned + * once created + * + * name pointer to fsm name + * + * initial_state Initial start state + * + * state_description_table + * Pointer to the user table which + * provides a description of each state. + * The table is used when displaying + * state info to the console. + * + * event_description_table + * Pointer to the user table which + * provides a description of each event. + * The table is used when displaying + * state info to the console. + * + * state_table Pointer to user defined state + * table. The state table is indexed + * by the normalized state ID, 0, 1, ... + * Each state table tuple must reference + * an event table. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * error otherwise + * + */ +RC_FSM_t +fsm_create (fsm_t **fsm, + char *name, + uint32_t initial_state, + state_description_t *state_description_table, + event_description_t *event_description_table, + state_tuple_t *state_table) +{ + fsm_t *temp_fsm; + uint32_t i; + uint32_t j; + state_tuple_t *state_ptr; + event_tuple_t *event_ptr; + + if (fsm == NULL) { + return (RC_FSM_NULL); + } + + if (state_description_table == NULL) { + printf("\n Description table == NULL"); + return (RC_FSM_INVALID_STATE_TABLE); + } + + if (event_description_table == NULL) { + + printf("\n event table == NULL"); + return (RC_FSM_INVALID_EVENT_TABLE); + } + + if (state_table == NULL) { + + printf("\n state_table == NULL"); + return (RC_FSM_INVALID_STATE_TABLE); + } + + + /* + * allocate memory to manage state machine + */ + temp_fsm = (fsm_t *)malloc( sizeof(fsm_t) ); + if (temp_fsm == NULL) { + printf("ME1\n"); + return (RC_FSM_NO_RESOURCES); + } + + /* + * default a name if needed + */ + if (name) { + strncpy(temp_fsm->fsm_name, name, FSM_NAME_LEN); + } else { + strncpy(temp_fsm->fsm_name, "State Machine", FSM_NAME_LEN); + } + + /* + * initialize fsm config parms + */ + temp_fsm->tag = FSM_TAG; /* for sanity cchecks */ + + temp_fsm->curr_state = initial_state; + temp_fsm->next_state = initial_state; + temp_fsm->exception_state_indicator = FALSE; + + /* save the event description table */ + temp_fsm->state_description_table = state_description_table; + temp_fsm->event_description_table = event_description_table; + + /* save the pointer to the state table */ + temp_fsm->state_table = state_table; + + /* + * Find the size of the state table + */ + temp_fsm->number_states = 0; + for (i=0; inumber_states++; + } else { + free(temp_fsm); + + printf("\n IN FSM invalied state tABLE"); + return (RC_FSM_INVALID_STATE_TABLE); + } + } else { + break; + } + } + if (temp_fsm->number_states < 1 || + temp_fsm->number_states > FSM_MAX_STATES-1) { + free(temp_fsm); + printf("ME2\n"); + return (RC_FSM_INVALID_STATE_TABLE); + } +#if 0 + printf("number states=%u \n", temp_fsm->number_states); +#endif + + /* + * check zero based range for state + */ + if (initial_state > temp_fsm->number_states-1) { + free(temp_fsm); + printf("ME3\n"); + return (RC_FSM_INVALID_STATE); + } + + + /* + * Find the size of the event table + */ + temp_fsm->number_events = 0; + for (i=0; inumber_events++; + } + if (temp_fsm->number_events < 1 || + temp_fsm->number_events > FSM_MAX_EVENTS-1) { + free(temp_fsm); + printf("ME5\n"); + return (RC_FSM_INVALID_EVENT_TABLE); + } +#if 0 + printf("number events=%u \n", temp_fsm->number_events); +#endif + + /* + * Now verify the state table - event table relationships and + * that the IDs are normalized. + */ + for (i=0; inumber_states; i++) { + state_ptr = &temp_fsm->state_table[i]; + + event_ptr = state_ptr->p2event_tuple; + + for (j=0; jnumber_events; j++) { +#if 0 + printf(" %u eventID=%u \n", + j, + event_ptr[j].eventID); +#endif + if (j != event_ptr[j].eventID) { + free(temp_fsm); + printf("ME6\n"); + return (RC_FSM_INVALID_EVENT_TABLE); + } + } + } + + /* + * allocate memory for history + */ + temp_fsm->history = malloc(FSM_HISTORY * sizeof(fsm_history_t)); + if (temp_fsm->history == NULL) { + free(temp_fsm); + printf("ME7\n"); + return (RC_FSM_NO_RESOURCES); + } + + /* + * initialize history buffer + */ + temp_fsm->history_index = 0; + for (i=0; ihistory[i].prevStateID = FSM_NULL_STATE_ID; + temp_fsm->history[i].stateID = FSM_NULL_STATE_ID; + temp_fsm->history[i].eventID = FSM_NULL_EVENT_ID; + temp_fsm->history[i].handler_rc = RC_FSM_NULL; + } + + /* return handle to the user */ + *fsm = temp_fsm; + return (RC_FSM_OK); +} + + +/* + * internal routine to record a state transition history + */ +static void +fsm_record_history (fsm_t *fsm, + uint32_t normalized_event, + uint32_t nextState, + RC_FSM_t handler_rc) +{ + fsm_history_t *history_ptr; + + /* + * get next index to record a little history + */ + fsm->history_index = (fsm->history_index+1)%FSM_HISTORY; + + /* + * Get a local pointer to the history buffer to populate + */ + history_ptr = &fsm->history[fsm->history_index]; + + history_ptr->prevStateID = fsm->curr_state; + history_ptr->stateID = nextState; + history_ptr->eventID = normalized_event; + history_ptr->handler_rc = handler_rc; + return; +} + + +/** + * NAME + * fsm_engine + * + * SYNOPSIS + * #include "fsm.h" + * RC_FSM_t + * fsm_engine(fsm_t *fsm, + * uint32_t normalized_event, + * void *p2event_buffer, + * void *p2parm) + * + * DESCRIPTION + * Drives a state machine defined by normalized event + * and a states. + * + * INPUT PARAMETERS + * *fsm state machine handle + * + * normalized_event the event id to process + * + * *p2event pointer to the raw event which + * is driving the event. This is + * passed through to the handler. + * + * *p2parm pointer parameter that is simply + * passed through to each event + * handler. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * error otherwise + * + */ +RC_FSM_t +fsm_engine (fsm_t *fsm, + uint32_t normalized_event, + void *p2event_buffer, + void *p2parm) +{ + event_tuple_t *event_ptr; + event_cb_t event_handler; + RC_FSM_t rc; + + /* + * verify pointers & handles are valid + */ + + if (fsm == NULL) { + + printf("\n RETURN 2 DEBUG "); + return (RC_FSM_NULL); + } + + if (fsm->tag != FSM_TAG) { + + printf("\n RETURN 3 DEBUG "); + return (RC_FSM_INVALID_HANDLE); + } + + /* + * verify that "event id" is valid: [0-(number_events-1)] + */ + if (normalized_event > fsm->number_events-1) { + fsm_record_history(fsm, normalized_event, + fsm->curr_state, RC_FSM_INVALID_EVENT); + printf("\n RETURN 4 DEBUG "); + return (RC_FSM_INVALID_EVENT); + } + + /* + * Index into the state table to get to the event table + * so we can get the next state and the event handler. + */ + event_ptr = + &fsm->state_table[fsm->curr_state].p2event_tuple[normalized_event]; + + /* + * If the handler was NULL then we have a quiet event , + * no processing possible. + */ + event_handler = event_ptr->event_handler; + if (event_handler == NULL) { + fsm_record_history(fsm, + normalized_event, + event_ptr->next_state, + RC_FSM_INVALID_EVENT_HANDLER); + printf("\n RETURN 5 DEBUG "); + return (RC_FSM_OK); + } + + printf(" "); + rc = (*event_handler)(p2event_buffer, p2parm); + + /* + * Event handler wants to stop processing events. There is no access + * to the fsm data structure in case the state machine has ended. + */ + if (rc == RC_FSM_STOP_PROCESSING) { + printf("\n RETURN 6 DEBUG "); + return (rc); + } + + /* + * If the return code is not OK, simply record the + * result without a state change. + */ + if (rc != RC_FSM_OK) { + fsm_record_history(fsm, normalized_event, + event_ptr->next_state, rc); + return (rc); + } + + /* + * If the exception state indicator is set, use the exception + * state provided by the event handler. This is an unexpected + * state transition. Else use the event table next state. + */ + if (fsm->exception_state_indicator) { + /* + * event handler detected an exception to the state transition + */ + fsm->exception_state_indicator = FALSE; + fsm->next_state = fsm->exception_state; + + } else { + /* + * we have a valid event table transition + */ + fsm->next_state = event_ptr->next_state; + } + + /* + * Validate the next state from the event table + * knowing that the event id is 0,1,2,... + * Then use the event id to directly index into the state + * table to set the next state. + */ + if (fsm->next_state > (fsm->number_states-1)) { + fsm_record_history(fsm, + normalized_event, + fsm->next_state, + RC_FSM_INVALID_STATE); + rc = RC_FSM_INVALID_STATE; + + } else { + + /* record a bit of history. */ + fsm_record_history(fsm, + normalized_event, + fsm->next_state, + rc); + + /* + * and update the current state completing the transition + */ + fsm->curr_state = fsm->next_state; + } + return (rc); +} + diff --git a/dlep_radio_ipv4/fsm.h b/dlep_radio_ipv4/fsm.h new file mode 100644 index 0000000..59f2c9a --- /dev/null +++ b/dlep_radio_ipv4/fsm.h @@ -0,0 +1,340 @@ +/*------------------------------------------------------------------ + * fsm.h - Finite State Machine definitions + * + * February 2005, Bo Berry + * + * Copyright (c) 2005-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __FSM_H__ +#define __FSM_H__ + +#include "safe_types.h" + + +/* + * return codes utilized by the fsm APIs and + * user event handlers + */ +typedef enum { + /* indicates success - state change */ + RC_FSM_OK = 0, + + /* indicates that the fsm handle was NULL */ + RC_FSM_NULL, + + /* indicates that the fsm handle pointed to somethinf else! */ + RC_FSM_INVALID_HANDLE, + + RC_FSM_INVALID_EVENT_HANDLER, + + /* indicates that an error was found in the state table */ + RC_FSM_INVALID_STATE_TABLE, + + /* indicates that the next state was out of bounds */ + RC_FSM_INVALID_STATE, + + /* indicates that an error was found in the event table */ + RC_FSM_INVALID_EVENT_TABLE, + + /* indicates that the next event was out of bounds */ + RC_FSM_INVALID_EVENT, + + /* indicates that there was no memory available */ + RC_FSM_NO_RESOURCES, + + /* event handler indicating that the event can be + * ignored, no transition + */ + RC_FSM_IGNORE_EVENT, + + /* event handler indicating that the state machine is + * being deallocated and no further access to the fsm + * strucutre should be made - history + */ + RC_FSM_STOP_PROCESSING, +} RC_FSM_t; + + + +#define FSM_NULL_STATE_ID ( -1 ) +#define FSM_NULL_EVENT_ID ( -1 ) + + +/* + * typedef RC_FSM_t (*event_cb_t)(void *p2event, void *p2parm) + * + * DESCRIPTION + * Provides typedef for the event handler functions. + * + * Once the state's normalized event ID and index has been + * determined, the associated event call-back is invoked + * to effect the state processing and transition. + * + * INPUT PARAMETERS + * p2event pointer to the raw event to be processed + * by the event handler. + * + * p2parm pointer parameter that is simply + * passed through from fsm_engine to each + * event handler. + * + * RETURN VALUE + * RC_FSM_OK + * error otherwise + */ +typedef RC_FSM_t (*event_cb_t)(void *p2event, void *p2parm); + + +/* + * User provided Normalized Event Description Table. + * + * An Example + * typedef enum { + * start_init_e = 0, + * init_rcvd_e, + * init_tmo_e, + * init_ack_e, + * start_term_e, + * term_rcvd_e, + * term_ack_e, + * } session_events_e; + * + * static event_description_t normalized_event_table[] = + * {{start_init_e, "Start Session Init"}, + * {init_rcvd_e, "Session Init"}, + * {init_tmo_e, "Session Init ACK TMO"}, + * {init_ack_e, "Session Init ACK"}, + * {start_term_e, "Start Session Termination"}, + * {term_rcvd_e, "Session Terminate"}, + * {term_ack_e, "Session Terminate ACK"}, + * {FSM_NULL_EVENT_ID, NULL}}; / required to end table / + * + */ +typedef struct { + uint32_t event_id; + char *description; +} event_description_t; + + +/* + * User provided Normalized State DESCRIPTION Table. + * + * An example + * typedef enum { + * idle_s = 0, + * wait_for_init_ack_s, + * established_s, + * wait_for_term_ack_s, + * } demo_states_e; + * + * static state_description_t normalized_state_table[] = + * {{start_init_e, "Start Session Init"}, + * {idle_s, Idle State"}, + * {wait_for_init_ack_s, "Wait for Init Ack State"}, + * {established_s, "Established State"}, + * {wait_for_term_ack_s, "Wait for Terminate Ack State"}, + * {FSM_NULL_STATE_ID, NULL}}; / required to end table / + * + */ +typedef struct { + uint32_t state_id; + char *description; +} state_description_t; + + + +/* + * User provided Event Table - one table per state is + * required. The table must have an entry for each + * normalized event, ordered from 0 - n. + * + * event_id is the normalized value. + * + * event_handler is the user provided call-back function that is + * invoked to handle the event and effect the state transition. + * If the event_handler is NULL, no processing is + * associated with the event - no state transition. + * + * next_state is the next state as result of the event. It is + * possible that a state transition associated with an event + * remain in the current state. + * + * An example: + * static event_tuple_t state_wait_for_init_ack_events[] = + * {{start_init_e, event_ignore, wait_for_init_ack_s}, + * {init_rcvd_e, event_ignore, wait_for_init_ack_s}, + * {init_tmo_e, event_init_ack_tmo, wait_for_init_ack_s}, + * {init_ack_e, event_init_ack_rcvd, established_s}, + * {start_term_e, event_term_rcvd, wait_for_term_ack_s}, + * {term_rcvd_e, event_term_rcvd, idle_s}, + * {term_ack_e, event_ignore, wait_for_term_ack_s}}; + */ +typedef struct { + uint32_t eventID; /* normalized event id */ + event_cb_t event_handler; /* if NULL==no transaction processing */ + uint32_t next_state; /* normalized next state - can be + * the same state */ +} event_tuple_t; + + +/* + * User provided Normalized State Table. This table represents all + * the states and the event table associated with each state. + * + * An example: + * static state_tuple_t demo_state_table[] = + * {{idle_s, state_idle_events}, + * {wait_for_init_ack_s, state_wait_for_init_ack_events}, + * {established_s, state_established_events}, + * {wait_for_term_ack_s, state_wait_for_term_ack_events}, + * {FSM_NULL_STATE_ID, NULL}}; / requied to end table / + */ +typedef struct { + uint32_t state_id; + event_tuple_t *p2event_tuple; +} state_tuple_t; + + +/* + * Historical record of state changes + */ +typedef struct { + uint32_t number; + uint32_t prevStateID; + uint32_t stateID; + uint32_t eventID; + RC_FSM_t handler_rc; +} fsm_history_t; + + +#define FSM_HISTORY ( 64 ) + +/* + * Finite State Machine structure + * + */ +#define FSM_TAG ( 0xba5eba11 ) +#define FSM_NAME_LEN ( 32 ) + +typedef struct { + /* for fsm validation */ + uint32_t tag; + + uint32_t curr_state; + uint32_t next_state; + + /* + * This is set by an event handle to cover an excpetion + * state transition that is different from the event + * table next state transition. + */ + uint32_t exception_state; + boolean_t exception_state_indicator; + + char fsm_name[FSM_NAME_LEN]; + + /* number states in table */ + uint32_t number_states; + + /* number events in each state-event table */ + uint32_t number_events; + + /* debug and trace flags*/ + uint32_t flags; + + /* pointer to the state table */ + state_tuple_t *state_table; + + /* description of normalized states and events */ + state_description_t *state_description_table; + event_description_t *event_description_table; + + /* starts at 0 and wraps */ + uint32_t history_index; + /* memory is malloc'ed to record history */ + fsm_history_t *history; +} fsm_t; + + +/* + * show state machine table + */ +extern void +fsm_display_table(fsm_t *fsm); + + +/* + * shows state machine history + */ +extern void +fsm_show_history(fsm_t *fsm); + + +/* get state */ +extern RC_FSM_t +fsm_get_state(fsm_t *fsm, uint32_t *p2state); + + +/* + * allows event handler to update the next state based upon + * an unexpected condition when processing the event. + */ +extern RC_FSM_t +fsm_set_exception_state(fsm_t *fsm, uint32_t exception_state); + + +/* + * destroy a state machine + */ +extern RC_FSM_t +fsm_destroy(fsm_t **fsm); + + +/* + * create and config a state machine + */ +extern RC_FSM_t +fsm_create(fsm_t **fsm, + char *fsm_name, + uint32_t initial_state, + state_description_t *state_description_table, + event_description_t *event_description_table, + state_tuple_t *state_table); + + +/* + * API to drive a state machine + */ +extern RC_FSM_t +fsm_engine(fsm_t *fsm, + uint32_t normalized_event, + void *p2event_bufer, + void *p2parm); + + +#endif /* __FSM_H__ */ + diff --git a/dlep_radio_ipv4/fuzz_dlep_cli.h b/dlep_radio_ipv4/fuzz_dlep_cli.h new file mode 100644 index 0000000..1da0faf --- /dev/null +++ b/dlep_radio_ipv4/fuzz_dlep_cli.h @@ -0,0 +1,40 @@ +/*------------------------------------------------------------------ + * fuzz_dlep_cli.h -- fuzz CLI support + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __FUZZ_DLEP_CLI_H__ +#define __FUZZ_DLEP_CLI_H__ + + +extern +void fuzz_dlep_cli_init(void); + +#endif + diff --git a/dlep_radio_ipv4/fuzz_encoder_tlv.h b/dlep_radio_ipv4/fuzz_encoder_tlv.h new file mode 100644 index 0000000..d5d462b --- /dev/null +++ b/dlep_radio_ipv4/fuzz_encoder_tlv.h @@ -0,0 +1,114 @@ +/*---------------------------------------------------------------------- + * fuzz_encoder_tlv.h -- routine prototypes to encode TLVs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __FUZZ_ENCODER_TLV_H__ +#define __FUZZ_ENCODER_TLV_H__ + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_encoder.h" + + + +extern uint8_t +*fuzz_identification_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t router_id, + uint32_t client_id, + uint8_t heartbeat_interval); + +extern uint8_t +*fuzz_version_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint16_t version_major, + uint16_t version_minor); + + +extern uint8_t +*fuzz_peer_tlv(rfc5444_encoder_state_t *p2encoder_state, + char *peer_type_string); + + +extern uint8_t +*fuzz_mac_address_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t mac_address[]); + + +extern uint8_t +*fuzz_ipv4_address_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv4_address_t *ipv4); + +extern uint8_t +*fuzz_ipv6_address_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv6_address_t *ipv6_dest_addr); + + +extern uint8_t +*fuzz_link_metric_mdr_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t mdr); + +extern uint8_t +*fuzz_link_metric_cdr_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t cdr); + +extern uint8_t +*fuzz_link_metric_latency_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint16_t latency); + +extern uint8_t +*fuzz_link_metric_resources_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources); + +extern uint8_t +*fuzz_link_metric_rlq_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t rlq); + +extern uint8_t +*fuzz_status_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t termination_code); + + +extern uint8_t +*fuzz_datarate_request_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t requested_cdr); + + +extern uint8_t +*fuzz_datarate_request_ack_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t requested_cdr, + uint32_t granted_cdr); + +#endif + + diff --git a/dlep_radio_ipv4/fuzz_message_builder.h b/dlep_radio_ipv4/fuzz_message_builder.h new file mode 100644 index 0000000..db76512 --- /dev/null +++ b/dlep_radio_ipv4/fuzz_message_builder.h @@ -0,0 +1,119 @@ +/*---------------------------------------------------------------------- + * fuzz_message_builder.h -- Routines to build fuzzed DLEP messages + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __FUZZ_MESSAGE_BUILDER_H__ +#define __FUZZ_MESSAGE_BUILDER_H__ + +#include "dlep_context_peer.h" +#include "dlep_context_neighbor.h" + + + +/* + * Router-Radio Level Mesages + */ + +extern void +send_fuzz_attached_peer_discovery(dlep_context_peer_t *p2peer); + +extern void +send_fuzz_detached_peer_discovery(dlep_context_peer_t *p2peer); + +extern void +send_fuzz_peer_offer(dlep_context_peer_t *p2peer); + + +extern void +send_fuzz_peer_heartbeat(dlep_context_peer_t *p2peer); + + +extern void +send_fuzz_peer_update_request(dlep_context_peer_t *p2peer); + +extern void +send_fuzz_peer_update_response(dlep_context_peer_t *p2peer); + + +extern void +send_fuzz_peer_terminate(dlep_context_peer_t *p2peer); + +extern void +send_fuzz_peer_terminate_ack(dlep_context_peer_t *p2peer); + + +/* + * Neighbor Level Mesages + */ + +extern void +send_fuzz_neighbor_up(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_fuzz_neighbor_up_ack(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_fuzz_neighbor_metrics(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_fuzz_neighbor_address_request(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_fuzz_neighbor_address_response(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + + +extern void +send_fuzz_neighbor_down(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_fuzz_neighbor_down_ack(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_fuzz_neighbor_link_char_request(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor, + uint64_t cdr, + uint64_t latency); + + +extern void +send_fuzz_neighbor_link_char_response(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + + + +#endif + diff --git a/dlep_radio_ipv4/fuzz_packet.c b/dlep_radio_ipv4/fuzz_packet.c new file mode 100644 index 0000000..352b899 --- /dev/null +++ b/dlep_radio_ipv4/fuzz_packet.c @@ -0,0 +1,131 @@ +/*---------------------------------------------------------------------- + * fuzz_packet.c -- Routines to read a fuzzed packet file + * + * October 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "safe_types.h" +#include "fuzz_packet.h" + + +#define FUZZ_PACKET_LENGTH ( 2048 ) + + +/** + * NAME + * fuzz_packet_load + * + * DESCRIPTION + * This function reads the designated file that contains + * a fuzzed DLEP packet. The fuzzed packet is used for testing. + * + * INPUT PARAMETERS + * + * OUTPUT PARAMETERS + * + * RETURN VALUE + * length - number of bytes in packet + * + */ +uint32_t +fuzz_packet_load (char *fuzzy_filename, uint8_t *p2packet) +{ + uint32_t i; + uint32_t key_index; + uint32_t line_count; + + FILE *fp; + + +#define MAX_INPUT_LENGTH ( 512 ) + char directed_filename[MAX_INPUT_LENGTH]; + char input_string[MAX_INPUT_LENGTH]; + +#define ARGC_MAX ( 8 ) + uint32_t argc; + char *argv[ARGC_MAX]; + + + if (!fuzzy_filename || !p2packet) { + return (0); + } + + strcpy(directed_filename, "fuzzy_dir/"); + strcat(directed_filename, fuzzy_filename); + + fp = fopen(directed_filename, "r"); + if (!fp) { + printf("Error: problem opening fuzzed file: %s\n", + directed_filename); + return (0); + } + + key_index = 0; + line_count = 0; + while (fgets(input_string, MAX_INPUT_LENGTH, fp)) { + line_count++; + + if (input_string[0] == '\0') { + continue; + } else if (input_string[0] == '#') { + continue; + } + + argv[0] = strtok(input_string, " ,\t\n"); + /* empty line */ + if (argv[0] == NULL) { + continue; + } + p2packet[key_index] = strtoul(argv[0], NULL, 16); + key_index++; + + argc = 1; + for (i=1; i +#include + +#include "ipv4_address.h" + + +/** + * NAME + * ipv4_print_address + * + * SYNOPSIS + * #include "man_ipv4_address.h" + * void + * ipv4_print_address(char *p2label, + * ipv4_address_t *ipv4_src_addr) + * + * DESCRIPTION + * Use this function to printf an IPv4 address in dot-decimal + * notation. + * + * INPUT PARAMETERS + * p2label - label to be printed + * ipv4_src_addr - pointer to the IPv4 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +ipv4_print_address (char *p2label, ipv4_address_t *ipv4_src_addr) +{ + if (!ipv4_src_addr) { + return; + } + + if (p2label) { + printf("%s %d.%d.%d.%d \n", + p2label, + ipv4_src_addr->v4_addr.v4_addr8[3], + ipv4_src_addr->v4_addr.v4_addr8[2], + ipv4_src_addr->v4_addr.v4_addr8[1], + ipv4_src_addr->v4_addr.v4_addr8[0]); + + } else { + printf("IPv4: %d.%d.%d.%d \n", + ipv4_src_addr->v4_addr.v4_addr8[3], + ipv4_src_addr->v4_addr.v4_addr8[2], + ipv4_src_addr->v4_addr.v4_addr8[1], + ipv4_src_addr->v4_addr.v4_addr8[0]); + } + + return; +} + + +/** + * NAME + * ipv4_dot_decimal2digits + * + * SYNOPSIS + * #include "man_ipv4_address.h" + * void + * ipv4_dot_decimal2digits(ipv4_address_t *ipv4_dest_addr, + * char *input) + * + * DESCRIPTION + * This function converts an IPv4 dot-decimal notation, + * such as 192.168.1.1, into binary. + * + * INPUT PARAMETERS + * ipv4_dest_addr - pointer to the IPv4 address + * + * input - pointer to the Ascii IPv4 string + * + * OUTPUT PARAMETERS + * ipv4_dest_addr - updated with the IPv4 address + * + * RETURN VALUE + * None + * + * EXAMPLES + * ipv4_dest_addr->v4_addr.v4_addr8[3] = 192; + * ipv4_dest_addr->v4_addr.v4_addr8[2] = 168; + * ipv4_dest_addr->v4_addr.v4_addr8[1] = 1; + * ipv4_dest_addr->v4_addr.v4_addr8[0] = 1; + * + * If there is an error, the remaining ipv4[i] are 0. + * + */ +void +ipv4_dot_decimal2digits (ipv4_address_t *ipv4_dest_addr, char *input) +{ + char *ptr; + + if (!ipv4_dest_addr) { + return; + } + + ipv4_zero_address(ipv4_dest_addr); + + if (!input) { + return; + } + + /* most significant */ + ipv4_dest_addr->v4_addr.v4_addr8[3] = strtoul(input, &ptr, 10); + if (*ptr != '.') { + return; + } + ptr++; + ipv4_dest_addr->v4_addr.v4_addr8[2] = strtoul(ptr, &ptr, 10); + if (*ptr != '.') { + return; + } + ptr++; + ipv4_dest_addr->v4_addr.v4_addr8[1] = strtoul(ptr, &ptr, 10); + if (*ptr != '.') { + return; + } + ptr++; + ipv4_dest_addr->v4_addr.v4_addr8[0] = strtoul(ptr, NULL, 10); + + return; +} + + diff --git a/dlep_radio_ipv4/ipv4_address.h b/dlep_radio_ipv4/ipv4_address.h new file mode 100644 index 0000000..2532b42 --- /dev/null +++ b/dlep_radio_ipv4/ipv4_address.h @@ -0,0 +1,398 @@ +/*------------------------------------------------------------------ + * ipv4_address.h -- Miscellaneous IPv4 Address Support Routines + * + * July 2008, Bo Berry + * + * Copyright (c) 2009-2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __IPV4_ADDRESS_H__ +#define __IPV4_ADDRESS_H__ + +#include "safe_types.h" +#include "network_order.h" + + + +/* + * IPv4 Address Notations + * + * Dot Decimal: 192.0.2.235 + * + * Hexidecimal: 0xC00002EB + * + * + * Classless Inter-Domain Routing (CIDR) + * + * CIDR ranges for private networks: + * + * Number of Classful Largest + * NAME Address range addresses DESCRIPTION CIDR block + *--------------------------------------------------------------------- + * 24-bit 10.0.0.0 – + * 10.255.255.255 16,777,216 Single Class A 10.0.0.0/8 + * 20-bit 172.16.0.0 – + * 172.31.255.255 1,048,576 16 contiguous Class + * B blocks 172.16.0.0/12 + * 16-bit 192.168.0.0 – + * 192.168.255.255 65,536 Contiguous range of + * 256 class C blocks 192.168.0.0/16 + * + * Link-local addressing + * Address block edfined in RFC3330 for the special use in + * link-local addressing. These addresses are only valid on the link, + * such as a local network segment or point-to-point connection, that + * a host is connected to. + * Range: 169.254.0.0/16 + * + * Local-host (local loopback) + * Addresses within this range are internal to the lost and should + * never appear outside the host computer. Packets sent to this + * address are returned as incoming packets on the same virtual + * network device. + * Range: 127.0.0.0 – 127.255.255.255 (127.0.0.0/8 in CIDR notation) + * + */ + + + +/* + * IPv4 Multicast Addresses: 224.0.0.0 thru 239.255.255.255 + * The multicast addresses from 224.0.0.0 to 224.0.0.255 are reserved for + * multicast routing information. Application programs should use multicast + * addresses outside this range. + */ +#define IPV4_MULTICAST_LOW ( 0xE0000000 ) +#define IPV4_MULTICAST_HIGH ( 0xEF000000 ) + + + +/* + * IPv4 length values + */ +#define IPV4_ADDR_STRING_LEN ( 16 ) +#define IPV4_ADDR_LEN_IN_BITS ( 32 ) +#define IPV4_ADDR_LEN_IN_BYTES ( 4 ) +#define IPV4_ADDR_LEN_IN_LONGS ( 1 ) + + +/* + * IPv4 Address Type (32 bits) + */ +typedef struct ipv4_address_ { + union { + uint8_t v4_addr8[IPV4_ADDR_LEN_IN_BYTES]; + uint32_t v4_addr32; + } v4_addr; +} ipv4_address_t; + + + + +/** + * NAME + * ipv4_put_address + * + * SYNOPSIS + * static inline uint8_t + * *ipv4_put_address(uint8_t *mp, ipv4_address_t *ipv4_src_addr) + * + * DESCRIPTION + * Use this function to copy the source IPv4 address to the + * destination pointer mp. + * + * INPUT PARAMETERS + * mp - destination buffer pointer + * + * ipv4_src_addr - pointer to the source address + * + * OUTPUT PARAMETERS + * mp - updated + * + * RETURN VALUE + * Pointer to the next byte in the destination space, mp + * + */ +static inline uint8_t +*ipv4_put_address (uint8_t *mp, ipv4_address_t *ipv4_src_addr) +{ + if (!ipv4_src_addr || !mp) { + return (mp); + } + + NETWORK_ORDER_PUTLONG(mp, ipv4_src_addr->v4_addr.v4_addr32); + mp = mp + sizeof(ipv4_address_t); + + return (mp); +} + + +/** + * NAME + * ipv4_get_address + * + * SYNOPSIS + * static inline uint8_t + * *ipv4_get_address(ipv4_address_t *ipv4_dest_addr, uint8_t *mp) + * + * DESCRIPTION + * Use this function to copy an IPv4 address from the buffer + * pointer mp to the destination ipv4_dest_addr. + * + * INPUT PARAMETERS + * ipv4_dest_addr - destination pointer to receive the IPv4 address + * + * mp - source pointer to copy from + * + * OUTPUT PARAMETERS + * ipv4_dest_addr - updated + * + * RETURN VALUE + * Pointer to the next byte in the source space, mp + * + */ +static inline uint8_t +*ipv4_get_address (ipv4_address_t *ipv4_dest_addr, uint8_t *mp) +{ + if (!ipv4_dest_addr || !mp) { + return (mp); + } + + NETWORK_ORDER_GETLONG(mp, ipv4_dest_addr->v4_addr.v4_addr32); + mp = mp + sizeof(ipv4_address_t); + + return (mp); +} + + +/** + * NAME + * ipv4_address_is_multicast + * + * SYNOPSIS + * static inline boolean_t + * ipv4_address_is_multicast(ipv4_address_t *ipv4_addr) + * + * DESCRIPTION + * Use this function determine if the IPv4 address is multicast. + * + * INPUT PARAMETERS + * ipv4_addr pointer to the IPv4 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE - yes, it is a multicast address + * FALSE - nope! + * + */ +static inline boolean_t +ipv4_address_is_multicast (ipv4_address_t *ipv4_addr) +{ + ipv4_address_t ipv4_multicast; + + if (!ipv4_addr) { + return (FALSE); + } + + ipv4_multicast.v4_addr.v4_addr32 = + ipv4_addr->v4_addr.v4_addr32 & 0xFF000000; + + if (ipv4_multicast.v4_addr.v4_addr32 >= IPV4_MULTICAST_LOW && + ipv4_multicast.v4_addr.v4_addr32 <= IPV4_MULTICAST_HIGH) { + return (TRUE); + } else { + return (FALSE); + } +} + + +/** + * NAME + * ipv4_address_to_broadcast + * + * SYNOPSIS + * static inline ipv4_address_t + * ipv4_address_to_broadcast(ipv4_address_t *ipv4_addr) + * ipv4_address_t *ipv4_subnet, + * ipv4_address_t *ipv4_broadcast) + * + * DESCRIPTION + * This function returns a broadcast address given an + * IPv4 address and its subnet. + * + * INPUT PARAMETERS + * ipv4_addr - pointer to the IPv4 address + * + * ipv4_subnet - pointer to the IPv4 subnet mask + * + * ipv4_broadcast - pointer to the IPv4 subnet mask + * + * OUTPUT PARAMETERS + * ipv4_broadcast - updated + * + * RETURN VALUE + * IPv4 broadcast address + * + */ +static inline boolean_t +ipv4_address_to_broadcast (ipv4_address_t *ipv4_addr, + ipv4_address_t *ipv4_subnet, + ipv4_address_t *ipv4_broadcast) +{ + if (!ipv4_addr || !ipv4_subnet || ipv4_broadcast) { + return (FALSE); + } + + ipv4_broadcast->v4_addr.v4_addr32 = + (ipv4_addr->v4_addr.v4_addr32 | + (~ipv4_subnet->v4_addr.v4_addr32)); + return (TRUE); +} + + +/** + * NAME + * ipv4_zero_address + * + * SYNOPSIS + * static inline void + * ipv4_zero_address(ipv4_address_t *ipv4_addr) + * + * DESCRIPTION + * This function can be used to zero an IPv4 address. + * + * INPUT PARAMETERS + * ipv4_addr - pointer to the IPV4 address + * + * OUTPUT PARAMETERS + * ipv4_addr - zeroed + * + * RETURN VALUE + * none + * + */ +static inline void +ipv4_zero_address (ipv4_address_t *ipv4_addr) +{ + if (!ipv4_addr) { + return; + } + + ipv4_addr->v4_addr.v4_addr32 = 0; + return; +} + + +/** + * NAME + * ipv4_compare_address + * + * SYNOPSIS + * static inline boolean_t + * ipv4_compare_address(ipv4_address_t ipv4_dest_addr, + * ipv4_address_t ipv4_src_addr) + * + * DESCRIPTION + * This function can be used to compare two IPv4 addresses. + * + * INPUT PARAMETERS + * ipv4_dest_addr - pointer to the destination IPV4 address + * + * ipv4_src_addr - pointer to the source IPV4 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE == equal + * FALSE == not equal + * + */ +static inline boolean_t +ipv4_compare_address (ipv4_address_t *ipv4_dest_addr, + ipv4_address_t *ipv4_src_addr) +{ + if (ipv4_dest_addr->v4_addr.v4_addr32 == + ipv4_src_addr->v4_addr.v4_addr32) { + return (TRUE); + } else { + return (FALSE); + } +} + + + +/** + * NAME + * ipv4_copy_address + * + * SYNOPSIS + * static inline void + * ipv4_copy_address(ipv4_address_t *ipv4_dest_addr, + * ipv4_address_t *ipv4_src_addr) + * + * DESCRIPTION + * Use this function to compare two IPv4 addresses + * + * INPUT PARAMETERS + * ipv4_dest_addr - pointer to the destination IPv4 address + * + * ipv4_src_addr - pointer to the src IPv4 address + * + * OUTPUT PARAMETERS + * ipv4_dest_addr - updated + * + * RETURN VALUE + * none + * + */ +static inline void +ipv4_copy_address (ipv4_address_t *ipv4_dest_addr, + ipv4_address_t *ipv4_src_addr) +{ + if (!ipv4_dest_addr || !ipv4_src_addr) { + return; + } + + ipv4_dest_addr->v4_addr.v4_addr32 = ipv4_src_addr->v4_addr.v4_addr32; + return; +} + + + +extern void +ipv4_print_address(char *p2label, ipv4_address_t *ipv4_src_addr); + +extern void +ipv4_dot_decimal2digits(ipv4_address_t *ipv4_dest_addr, char *input); + +extern void +ipv4_dot_hex2digits(ipv4_address_t *ipv4_dest_addr, char *input); + +#endif + diff --git a/dlep_radio_ipv4/ipv6_address.c b/dlep_radio_ipv4/ipv6_address.c new file mode 100644 index 0000000..34751cd --- /dev/null +++ b/dlep_radio_ipv4/ipv6_address.c @@ -0,0 +1,158 @@ +/*---------------------------------------------------------------------- + * ipv6_address.c -- Miscellaneous IPv6 Address Support Routines + * + * June 2009, Bo Berry + * + * Copyright (c) 2009-2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include + +#include "ipv6_address.h" + + +/** + * NAME + * ipv6_print_address + * + * SYNOPSIS + * #include "man_ipv6_address.h" + * void + * ipv6_print_address(char *p2label, + * ipv6_address_t *ipv6_src_addr) + * + * DESCRIPTION + * Use this function to print an IPv6 address + * + * INPUT PARAMETERS + * p2label - label to be printed + * + * ipv6_src_addr - pointer to the IPv6 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +ipv6_print_address (char *p2label, ipv6_address_t *ipv6_src_addr) +{ + if (!ipv6_src_addr) { + return; + } + + if (p2label) { + printf("%s %08x:%08x:%08x:%08x \n", + p2label, + ipv6_src_addr->v6_addr.v6_addr32[0], + ipv6_src_addr->v6_addr.v6_addr32[1], + ipv6_src_addr->v6_addr.v6_addr32[2], + ipv6_src_addr->v6_addr.v6_addr32[3]); + + } else { + printf("IPv6: %08x:%08x:%08x:%08x \n", + ipv6_src_addr->v6_addr.v6_addr32[0], + ipv6_src_addr->v6_addr.v6_addr32[1], + ipv6_src_addr->v6_addr.v6_addr32[2], + ipv6_src_addr->v6_addr.v6_addr32[3]); + } + return; +} + + +/** + * NAME + * ipv6_ascii2digits + * + * SYNOPSIS + * #include "man_ipv6_address.h" + * void + * ipv6_ascii2digits(ipv6_address_t *ipv6_dest_addr, + * char *input) + * + * DESCRIPTION + * This function converts an ascii notation, + * 11111111:22222222:33333333:44444444 + * IPv6 address into binary. + * + * INPUT PARAMETERS + * ipv6_dest_addr - pointer to the IPv6 address + * + * input - pointer to the string + * + * OUTPUT PARAMETERS + * ipv6_dest_addr - updated + * + * RETURN VALUE + * none + * + * EXAMPLES + * ipv6_dest_addr->v6_addr.v6_addr32[0] = 11111111; + * ipv6_dest_addr->v6_addr.v6_addr32[1] = 22222222; + * ipv6_dest_addr->v6_addr.v6_addr32[2] = 33333333; + * ipv6_dest_addr->v6_addr.v6_addr32[3] = 44444444; + * + * If there is an error, the remaining ipv6[i] are 0. + * + */ +void +ipv6_ascii2digits (ipv6_address_t *ipv6_dest_addr, char *input) +{ + uint32_t i; + char *ptr; + + if (!ipv6_dest_addr) { + return; + } + + /* zero the users ipv6 */ + ipv6_zero_address(ipv6_dest_addr); + + if (!input) { + return; + } + + ipv6_dest_addr->v6_addr.v6_addr32[0] = strtoul(input, &ptr, 16); + if (*ptr != ':') { + return; + } + ptr++; + + for (i=1; i<7; i++) { + ipv6_dest_addr->v6_addr.v6_addr32[i] = strtoul(ptr, &ptr, 16); + if (*ptr != ':') { + return; + } + ptr++; + } + ipv6_dest_addr->v6_addr.v6_addr32[7] = strtoul(ptr, NULL, 16); + + return; +} + diff --git a/dlep_radio_ipv4/ipv6_address.h b/dlep_radio_ipv4/ipv6_address.h new file mode 100644 index 0000000..8630574 --- /dev/null +++ b/dlep_radio_ipv4/ipv6_address.h @@ -0,0 +1,426 @@ +/*------------------------------------------------------------------ + * ipv6_address.h -- Miscellaneous IPv6 Address Support Routines + * + * July 2008, Bo Berry + * + * Copyright (c) 2009-2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __IPV6_ADDRESS_H__ +#define __IPV6_ADDRESS_H__ + +#include "safe_types.h" +#include "network_order.h" + + +/* + * (few) IPv6 Address Definition + * + * 2001:0db8:3c4d:0015:0000:0000:abcd:ef12 + * ______________|____|___________________ + * global prefix subnet Interface ID + * + * IPv6 Address Ranges + * IPv6 Prefix Allocation + * -------------------------------------- + * 0000::/8 Reserved by IETF + * 2000::/3 Global Unicast + * FC00::/7 Unique Local Unicast + * FE80::/10 Link Local Unicast + * FF00::/8 Multicast + */ + + +/* defined for 32-bit overlay */ +#define IPV6_GLOBAL_PREFIX ( 0x20000000 ) /* 2000::/3 */ +#define IPV6_MULTICAST_PREFIX ( 0xFF000000 ) /* ff00::/8 */ +#define IPV6_UNIQUE_LOCAL_PREFIX ( 0xFC000000 ) /* fc00::/7 */ +#define IPV6_LINK_LOCAL_PREFIX ( 0xFE800000 ) /* fe80::/1 */ +#define IPV6_LINK_LOCAL_LOOPBACK_SUFFIX ( 0x0001 ) /* ::1/128 */ + + +/* + * IPv6 length values and prefixes + * + * http://www.iana.org/assignments/ipv6-multicast-addresses/ + * http://en.wikipedia.org/wiki/IPv6 + */ +#define IPV6_ADDR_STRING_LEN ( 42 ) +#define IPV6_ADDR_LEN_IN_BITS ( 128 ) +#define IPV6_ADDR_LEN_IN_BYTES ( 16 ) +#define IPV6_ADDR_LEN_IN_SHORTS ( 8 ) +#define IPV6_ADDR_LEN_IN_LONGS ( 4 ) + + + +/* + * IPv6 Address Type (128 bits) + */ +typedef struct ipv6_address_ { + union { + uint16_t v6_addr16[IPV6_ADDR_LEN_IN_SHORTS]; + uint32_t v6_addr32[IPV6_ADDR_LEN_IN_LONGS]; + } v6_addr; +} ipv6_address_t; + + + +/** + * NAME + * ipv6_put_address + * + * SYNOPSIS + * static inline uint8_t + * *ipv6_put_address(uint8_t *mp, ipv6_address_t *ipv6_src_addr) + * + * DESCRIPTION + * Use this function to copy the source IPv6 address to the + * destination pointer mp. + * + * INPUT PARAMETERS + * mp - destination buffer pointer + * + * ipv6_src_addr - ponter to the source IPv6 address + * + * OUTPUT PARAMETERS + * mp - updated + * + * RETURN VALUE + * Pointer to the next byte in the destination space, mp + * + */ +static inline uint8_t +*ipv6_put_address (uint8_t *mp, ipv6_address_t *ipv6_src_addr) +{ + if (!ipv6_src_addr || !mp) { + return (mp); + } + + NETWORK_ORDER_PUTLONG(mp, ipv6_src_addr->v6_addr.v6_addr32[0]); + mp = mp + sizeof(uint32_t); + + NETWORK_ORDER_PUTLONG(mp, ipv6_src_addr->v6_addr.v6_addr32[1]); + mp = mp + sizeof(uint32_t); + + NETWORK_ORDER_PUTLONG(mp, ipv6_src_addr->v6_addr.v6_addr32[2]); + mp = mp + sizeof(uint32_t); + + NETWORK_ORDER_PUTLONG(mp, ipv6_src_addr->v6_addr.v6_addr32[3]); + mp = mp + sizeof(uint32_t); + + return (mp); +} + + +/** + * NAME + * ipv6_get_address + * + * SYNOPSIS + * static inline uint8_t + * *ipv6_get_address(ipv6_address_t *ipv6_dest_addr, uint8_t *mp) + * + * DESCRIPTION + * Use this function to copy an IPv6 address from the buffer + * pointer mp to the destination ipv6_dest_addr. + * + * INPUT PARAMETERS + * ipv6_dest_addr - destination pointer to receive the IPv6 address + * + * mp - source pointer to copy from + * + * OUTPUT PARAMETERS + * ipv6_dest_addr - updated + * + * RETURN VALUE + * Pointer to the next byte in the source space, mp + * + */ +static inline uint8_t +*ipv6_get_address (ipv6_address_t *ipv6_dest_addr, uint8_t *mp) +{ + if (!ipv6_dest_addr || !mp) { + return (mp); + } + + NETWORK_ORDER_GETLONG(mp, ipv6_dest_addr->v6_addr.v6_addr32[0]); + mp = mp + sizeof(uint32_t); + + NETWORK_ORDER_GETLONG(mp, ipv6_dest_addr->v6_addr.v6_addr32[1]); + mp = mp + sizeof(uint32_t); + + NETWORK_ORDER_GETLONG(mp, ipv6_dest_addr->v6_addr.v6_addr32[2]); + mp = mp + sizeof(uint32_t); + + NETWORK_ORDER_GETLONG(mp, ipv6_dest_addr->v6_addr.v6_addr32[3]); + mp = mp + sizeof(uint32_t); + + return (mp); +} + +/** + * NAME + * ipv6_zero_address + * + * SYNOPSIS + * static inline void + * ipv6_zero_address(ipv6_address_t *ipv6_dest_addr) + * + * DESCRIPTION + * Use this function to zero an IPv6 address + * A zero address is reserved by the IETF. + * + * INPUT PARAMETERS + * ipv6_dest_addr - pointer to the IPv6 address + * + * OUTPUT PARAMETERS + * ipv6_dest_addr - zeroed + * + * RETURN VALUE + * none + * + */ +static inline void +ipv6_zero_address (ipv6_address_t *ipv6_dest_addr) +{ + if (!ipv6_dest_addr) { + return; + } + + ipv6_dest_addr->v6_addr.v6_addr32[0] = 0; + ipv6_dest_addr->v6_addr.v6_addr32[1] = 0; + ipv6_dest_addr->v6_addr.v6_addr32[2] = 0; + ipv6_dest_addr->v6_addr.v6_addr32[3] = 0; + return; +} + + +/** + * NAME + * ipv6_address_is_global + * + * SYNOPSIS + * static inline boolean_t + * ipv6_address_is_global(ipv6_address_t *ipv6_src_addr) + * + * DESCRIPTION + * Use this function to determine if the IPv6 address is global. + * 2000::/3 Global Unicast + * + * INPUT PARAMETERS + * ipv6_src_addr - pointer to the IPv6 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE - yes + * FALSE - nope! + * + */ +static inline boolean_t +ipv6_address_is_global (ipv6_address_t *ipv6_src_addr) +{ + + if (IPV6_GLOBAL_PREFIX == + (ipv6_src_addr->v6_addr.v6_addr32[0] & IPV6_GLOBAL_PREFIX)) { + return (TRUE); + } else { + return (FALSE); + } +} + + +/** + * NAME + * ipv6_address_is_multicast + * + * SYNOPSIS + * static inline boolean_t + * ipv6_address_is_multicast(ipv6_address_t *ipv6_src_addr) + * + * DESCRIPTION + * Use this function to determine if the IPv6 address is multicast. + * FF00::/8 Multicast + * + * INPUT PARAMETERS + * ipv6_src_addr - pointer to the IPv6 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE - yes + * FALSE - nope! + * + */ +static inline boolean_t +ipv6_address_is_multicast (ipv6_address_t *ipv6_src_addr) +{ + + if (IPV6_MULTICAST_PREFIX == + (ipv6_src_addr->v6_addr.v6_addr32[0] & IPV6_MULTICAST_PREFIX)) { + return (TRUE); + } else { + return (FALSE); + } +} + + +/** + * NAME + * ipv6_address_is_linklocal + * + * SYNOPSIS + * static inline boolean_t + * ipv6_address_is_linklocal(ipv6_address_t *ipv6_src_addr) + * + * DESCRIPTION + * Use this function to determine if the IPv6 address is link local. + * FE80::/10 Link Local Unicast + * + * INPUT PARAMETERS + * ipv6_src_addr - pointer to the IPv6 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE - yes + * FALSE - nope! + * + */ +static inline boolean_t +ipv6_address_is_linklocal (ipv6_address_t *ipv6_src_addr) +{ + if (IPV6_LINK_LOCAL_PREFIX == + (ipv6_src_addr->v6_addr.v6_addr32[0] & IPV6_LINK_LOCAL_PREFIX)) { + return (TRUE); + } else { + return (FALSE); + } +} + + +/** + * NAME + * static inline boolean_t + * ipv6_compare_address(ipv6_address_t *ipv6_dest_addr, + * ipv6_address_t *ipv6_src_addr) + * + * DESCRIPTION + * Use this function to compare two IPv6 addresses + * + * INPUT PARAMETERS + * ipv6_dest_addr - pointer to the destination IPv6 address + * + * ipv6_src_addr - pointer to the src IPv6 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE - addresses equal + * FALSE - not equal + * + */ +static inline boolean_t +ipv6_compare_address (ipv6_address_t *ipv6_dest_addr, + ipv6_address_t *ipv6_src_addr) +{ + if (!ipv6_dest_addr || !ipv6_src_addr) { + return (FALSE); + } + + if (ipv6_dest_addr->v6_addr.v6_addr32[0] == + ipv6_src_addr->v6_addr.v6_addr32[0] && + ipv6_dest_addr->v6_addr.v6_addr32[1] == + ipv6_src_addr->v6_addr.v6_addr32[1] && + ipv6_dest_addr->v6_addr.v6_addr32[2] == + ipv6_src_addr->v6_addr.v6_addr32[2] && + ipv6_dest_addr->v6_addr.v6_addr32[3] == + ipv6_src_addr->v6_addr.v6_addr32[3]) { + return (TRUE); + } else { + return (FALSE); + } +} + + +/** + * NAME + * ipv6_copy_address + * + * SYNOPSIS + * static inline void + * ipv6_copy_address(ipv6_address_t *ipv6_dest_addr, + * ipv6_address_t *ipv6_src_addr) + * + * DESCRIPTION + * Use this function to compare two IPv6 addresses + * + * INPUT PARAMETERS + * ipv6_dest_addr - pointer to the destination IPv6 address + * + * ipv6_src_addr - pointer to the src IPv6 address + * + * OUTPUT PARAMETERS + * ipv6_dest_addr - updated + * + * RETURN VALUE + * none + * + */ +static inline void +ipv6_copy_address (ipv6_address_t *ipv6_dest_addr, + ipv6_address_t *ipv6_src_addr) +{ + if (!ipv6_dest_addr || !ipv6_src_addr) { + return; + } + + ipv6_dest_addr->v6_addr.v6_addr32[0] = + ipv6_src_addr->v6_addr.v6_addr32[0]; + ipv6_dest_addr->v6_addr.v6_addr32[1] = + ipv6_src_addr->v6_addr.v6_addr32[1]; + ipv6_dest_addr->v6_addr.v6_addr32[2] = + ipv6_src_addr->v6_addr.v6_addr32[2]; + ipv6_dest_addr->v6_addr.v6_addr32[3] = + ipv6_src_addr->v6_addr.v6_addr32[3]; + + return; +} + + + +extern void +ipv6_print_address(char *p2label, ipv6_address_t *ipv6_src_addr); + +extern void +ipv6_ascii2digits(ipv6_address_t *ipv6_dest_addr, char *input); + +#endif + diff --git a/dlep_radio_ipv4/mac_address.c b/dlep_radio_ipv4/mac_address.c new file mode 100644 index 0000000..f6fab64 --- /dev/null +++ b/dlep_radio_ipv4/mac_address.c @@ -0,0 +1,169 @@ +/*---------------------------------------------------------------------- + * mac_address.c -- MAC Address Support Routines + * + * January 2009, Bo Berry + * + * Copyright (c) 2009-2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include + +#include "mac_address.h" + + +/** + * NAME + * mac_print_address + * + * SYNOPSIS + * #include "man_mac_address.h" + * void + * mac_print_address (char *p2label, uint8_t mac[]) + * + * DESCRIPTION + * This function can be used to print the MAC address. If + * the p2label is non-NULL, the label prefixes the MAC. + * + * INPUT PARAMETERS + * p2label - Pointer to the label + * + * mac - Pointer to the mac address array + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +mac_print_address (char *p2label, uint8_t mac[]) +{ + if (p2label) { + printf("%s %02x:%02x:%02x:%02x:%02x:%02x \n", + p2label, + mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + + } else { + printf("MAC Address: %02x:%02x:%02x:%02x:%02x:%02x \n", + mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + } + return; +} + + +/** + * NAME + * mac_ascii2digits + * + * SYNOPSIS + * #include "man_mac_address.h" + * void + * mac_ascii2digits(uint8_t mac_dest_addr[], char *input) + * + * DESCRIPTION + * This function converts an ascii notation, 12:34:56:78:90:ab + * MAC address into an array. + * + * INPUT PARAMETERS + * mac_dest_addr - Pointer to the mac address array + * + * input - pointer the string + * + * OUTPUT PARAMETERS + * mac_dest_addr - updated + * + * RETURN VALUE + * none + * + * EXAMPLES + * mac_dest_addr[0] = 12; + * mac_dest_addr[1] = 34; + * mac_dest_addr[2] = 56; + * mac_dest_addr[3] = 78; + * mac_dest_addr[4] = 90; + * mac_dest_addr[5] = ab; + * + * If there is an error, the remaining mac[i] are 0. + * + */ +void +mac_ascii2digits (uint8_t mac_dest_addr[], char *input) +{ + uint32_t i; + uint8_t digit; + uint32_t maci; + + if (!mac_dest_addr) { + return; + } + + /* zero the users mac array */ + for (i=0; i= '0' && input[i] <='9') { + digit = (input[i] - '0') * (16); + } else if (input[i] >= 'a' && input[i] <='f') { + digit = (input[i] - 'a' + 10) * (16); + } else if (input[i] >= 'A' && input[i] <='F') { + digit = (input[i] - 'A' + 10) * (16); + } else { + return; + } + + i++; + if (input[i] >= '0' && input[i] <='9') { + digit += (input[i] - '0'); + } else if (input[i] >= 'a' && input[i] <='f') { + digit += (input[i] - 'a' + 10); + } else if (input[i] >= 'A' && input[i] <='F') { + digit += (input[i] - 'A' + 10); + } else { + return; + } + + mac_dest_addr[maci] = digit; + + i++; + if (input[i] != ':') { + return; + } + + maci++; + } + + return; +} + diff --git a/dlep_radio_ipv4/mac_address.h b/dlep_radio_ipv4/mac_address.h new file mode 100644 index 0000000..92e2f38 --- /dev/null +++ b/dlep_radio_ipv4/mac_address.h @@ -0,0 +1,361 @@ +/*---------------------------------------------------------------------- + * mac_address.h + * + * January 2009, Bo Berry + * + * Copyright (c) 2009-2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __MAC_ADDRESS_H__ +#define __MAC_ADDRESS_H__ + +#include "safe_types.h" +#include "network_order.h" + + +/* + * MAC in string Dot Notation: 11:22:33:44:55:66 + */ +#define MAC_DOT_LEN_IN_BYTES ( 18 ) + +/* + * MAC in byte array[] + */ +#define MAC_ADDR_LEN_IN_BYTES ( 6 ) + + + +/** + * NAME + * mac_put_address + * + * SYNOPSIS + * static inline uint8_t + * *mac_put_address(uint8_t *mp, uint8_t *mac_src_addr) + * + * DESCRIPTION + * Use this function to copy the source MAC address to + * the destination pointer mp, in network order. + * + * INPUT PARAMETERS + * mp - destination buffer pointer + * + * mac_src_addr - pointer to the source mac address, 6-bytes + * + * OUTNPUT PARAMETERS + * mp - updated + * + * RETURN VALUE + * Pointer to the next byte in the destination space, mp + * + */ +static inline uint8_t +*mac_put_address (uint8_t *mp, uint8_t *mac_src_addr) +{ + if (!mac_src_addr || !mp) { + return (mp); + } + + NETWORK_ORDER_PUTBYTE(mp, mac_src_addr[0]); + mp++; + NETWORK_ORDER_PUTBYTE(mp, mac_src_addr[1]); + mp++; + NETWORK_ORDER_PUTBYTE(mp, mac_src_addr[2]); + mp++; + NETWORK_ORDER_PUTBYTE(mp, mac_src_addr[3]); + mp++; + NETWORK_ORDER_PUTBYTE(mp, mac_src_addr[4]); + mp++; + NETWORK_ORDER_PUTBYTE(mp, mac_src_addr[5]); + mp++; + + return (mp); +} + + +/** + * NAME + * mac_get_address + * + * SYNOPSIS + * static inline uint8_t + * *mac_get_address(uint8_t *mac_dest_addr, uint8_t *mp) + * + * DESCRIPTION + * Use this function to copy a network ordered MAC address from + * the pointer mp to the destination array mac_dest_addr[]. + * + * INPUT PARAMETERS + * mac_dest_addr - pointer to the destination mac address, 6-bytes + * + * mp - source pointer to copy from + * + * OUTPUT PARAMETERS + * mac_dest_addr - updated + * + * RETURN VALUE + * Pointer to the next byte in the source space, mp + * + */ +static inline uint8_t +*mac_get_address (uint8_t *mac_dest_addr, uint8_t *mp) +{ + if (!mac_dest_addr || !mp) { + return (mp); + } + + NETWORK_ORDER_GETBYTE(mp, mac_dest_addr[0]); + mp++; + NETWORK_ORDER_GETBYTE(mp, mac_dest_addr[1]); + mp++; + NETWORK_ORDER_GETBYTE(mp, mac_dest_addr[2]); + mp++; + NETWORK_ORDER_GETBYTE(mp, mac_dest_addr[3]); + mp++; + NETWORK_ORDER_GETBYTE(mp, mac_dest_addr[4]); + mp++; + NETWORK_ORDER_GETBYTE(mp, mac_dest_addr[5]); + mp++; + + return (mp); +} + + +/** + * NAME + * mac_zero_address + * + * SYNOPSIS + * static inline void + * mac_zero_address(uint8_t *mac_src_addr) + * + * DESCRIPTION + * Use this function to zero a MAC address. + * + * INPUT PARAMETERS + * mac_src_addr - pointer to the source mac address, 6-bytes + * + * OUTPUT PARAMETERS + * mac_src_addr - updated + * + * RETURN VALUE + * None + * + */ +static inline void +mac_zero_address (uint8_t *mac_src_addr) +{ + if (!mac_src_addr) { + return; + } + + mac_src_addr[0] = 0; + mac_src_addr[1] = 0; + mac_src_addr[2] = 0; + mac_src_addr[3] = 0; + mac_src_addr[4] = 0; + mac_src_addr[5] = 0; + return; +} + + +/** + * NAME + * mac_set_to_broadcast + * + * SYNOPSIS + * static inline void + * mac_set_to_broadcast(uint8_t *mac_src_addr) + * + * DESCRIPTION + * Use this function to set the MAC address to the broadcast address. + * + * INPUT PARAMETERS + * mac_src_addr - pointer to the source mac address, 6-bytes + * + * OUTPUT PARAMETERS + * mac_src_addr - updated + * + * RETURN VALUE + * None + * + */ +static inline void +mac_set_to_broadcast (uint8_t *mac_src_addr) +{ + if (!mac_src_addr) { + return; + } + + mac_src_addr[0] = 0xFF; + mac_src_addr[1] = 0xFF; + mac_src_addr[2] = 0xFF; + mac_src_addr[3] = 0xFF; + mac_src_addr[4] = 0xFF; + mac_src_addr[5] = 0xFF; + return; +} + + +/** + * NAME + * mac_is_broadcast + * + * SYNOPSIS + * static inline boolean_t + * mac_is_broadcast(uint8_t *mac_src_addr) + * + * DESCRIPTION + * Use this function to determine if this is a broadcast MAC address + * + * INPUT PARAMETERS + * mac_src_addr - pointer to the source mac address, 6-bytes + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE - yes + * FALSE - no + * + */ +static inline boolean_t +mac_is_broadcast (uint8_t *mac_src_addr) +{ + if (!mac_src_addr) { + return (FALSE); + } + + if (mac_src_addr[0] == 0xFF && + mac_src_addr[1] == 0xFF && + mac_src_addr[2] == 0xFF && + mac_src_addr[3] == 0xFF && + mac_src_addr[4] == 0xFF && + mac_src_addr[5] == 0xFF) { + return (TRUE); + } else { + return (FALSE); + } +} + + +/** + * NAME + * mac_compare_address + * + * SYNOPSIS + * static inline boolean_t + * mac_compare_address(uint8_t *mac_dest_addr, + * uint8_t *mac_src_addr) + * + * DESCRIPTION + * Use this function to compare two MAC addresses + * + * INPUT PARAMETERS + * mac_src_addr - pointer to the source mac address, 6-bytes + * + * mac_dest_addr - pointer to the destination mac address, 6-bytes + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE - addresses equal + * FALSE - not equal + * + */ +static inline boolean_t +mac_compare_address (uint8_t *mac_dest_addr, + uint8_t *mac_src_addr) +{ + if (!mac_dest_addr || !mac_src_addr) { + return (FALSE); + } + + if (mac_dest_addr[0] == mac_src_addr[0] && + mac_dest_addr[1] == mac_src_addr[1] && + mac_dest_addr[2] == mac_src_addr[2] && + mac_dest_addr[3] == mac_src_addr[3] && + mac_dest_addr[4] == mac_src_addr[4] && + mac_dest_addr[5] == mac_src_addr[5]) { + return (TRUE); + } else { + return (FALSE); + } +} + + +/** + * NAME + * mac_copy_address + * + * SYNOPSIS + * static inline void + * mac_copy_address(uint8_t *mac_dest_addr, + * uint8_t *mac_src_addr) + * + * DESCRIPTION + * Use this function to copy a MAC address + * + * INPUT PARAMETERS + * mac_dest_addr - pointer to the destination mac address, 6-bytes + * + * mac_src_addr - pointer to the source mac address, 6-bytes + * + * OUTPUT PARAMETERS + * mac_dest_addr - updated + * + * RETURN VALUE + * none + * + */ +static inline void +mac_copy_address (uint8_t *mac_dest_addr, + uint8_t *mac_src_addr) +{ + if (!mac_dest_addr || !mac_src_addr) { + return; + } + + mac_dest_addr[0] = mac_src_addr[0]; + mac_dest_addr[1] = mac_src_addr[1]; + mac_dest_addr[2] = mac_src_addr[2]; + mac_dest_addr[3] = mac_src_addr[3]; + mac_dest_addr[4] = mac_src_addr[4]; + mac_dest_addr[5] = mac_src_addr[5]; + return; +} + + + +extern void +mac_print_address(char *p2label, uint8_t mac[]); + +extern void +mac_ascii2digits(uint8_t mac_dest_addr[], char *input); + +#endif + diff --git a/dlep_radio_ipv4/mdr_present b/dlep_radio_ipv4/mdr_present new file mode 100644 index 0000000..da98363 --- /dev/null +++ b/dlep_radio_ipv4/mdr_present @@ -0,0 +1,43 @@ +rfc5444_decoder_tlv.c: message_scratch_pad->major_version = major_version; +rfc5444_decoder_tlv.c: message_scratch_pad->major_version_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->minor_version = minor_version; +rfc5444_decoder_tlv.c: message_scratch_pad->minor_version_present = TRUE; +rfc5444_decoder_tlv.c: desc = message_scratch_pad->peer_type_description; +rfc5444_decoder_tlv.c: mac_copy_address(message_scratch_pad->mac_address, mac_addr); +rfc5444_decoder_tlv.c: message_scratch_pad->mac_address_present = TRUE; +rfc5444_decoder_tlv.c: ipv4_copy_address(&message_scratch_pad->ipv4_address, &ipv4_addr); +rfc5444_decoder_tlv.c: message_scratch_pad->ipv4_address_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->ipv4_operation = operation; +rfc5444_decoder_tlv.c: message_scratch_pad->ipv6_address_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->ipv6_operation = operation; +rfc5444_decoder_tlv.c: ipv6_copy_address(&message_scratch_pad->ipv6_address, &ipv6_addr); +rfc5444_decoder_tlv.c: message_scratch_pad->mdr_tx = mdr; +rfc5444_decoder_tlv.c: message_scratch_pad->mdr_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->mdr_rx = mdr; +rfc5444_decoder_tlv.c: message_scratch_pad->mdr_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->cdr_tx = cdr; +rfc5444_decoder_tlv.c: message_scratch_pad->cdr_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->cdr_rx = cdr; +rfc5444_decoder_tlv.c: message_scratch_pad->cdr_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->latency = latency; +rfc5444_decoder_tlv.c: message_scratch_pad->latency_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->resources_tx = resources; +rfc5444_decoder_tlv.c: message_scratch_pad->resources_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->resources_rx = resources; +rfc5444_decoder_tlv.c: message_scratch_pad->resources_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->rlq_tx = rlq; +rfc5444_decoder_tlv.c: message_scratch_pad->rlq_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->rlq_rx = rlq; +rfc5444_decoder_tlv.c: message_scratch_pad->rlq_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->status_code = status_code; +rfc5444_decoder_tlv.c: message_scratch_pad->status_code_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->eft = eft; +rfc5444_decoder_tlv.c: message_scratch_pad->port = port; +rfc5444_decoder_tlv.c: message_scratch_pad->mrw = mrw; +rfc5444_decoder_tlv.c: message_scratch_pad->rrw = rrw; +rfc5444_decoder_tlv.c: message_scratch_pad->cws_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->cgr = cgr; +rfc5444_decoder_tlv.c: message_scratch_pad->credit_req_present = TRUE; +rfc5444_decoder_tlv.c: message_scratch_pad->hbt = hbt; +rfc5444_decoder_tlv.c: message_scratch_pad->dlepv7_optional_signal |= (1 << opt_signals); +rfc5444_decoder_tlv.c: message_scratch_pad->dlepv7_optional_data_item |= (1 << opt_data_item ); diff --git a/dlep_radio_ipv4/network_order.h b/dlep_radio_ipv4/network_order.h new file mode 100644 index 0000000..a18c1ef --- /dev/null +++ b/dlep_radio_ipv4/network_order.h @@ -0,0 +1,234 @@ +/*---------------------------------------------------------------------- + * network_order.h -- macros to deal with byte order + * + * January 2009, Bo Berry + * + * Copyright (c) 2009-2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __NETWORK_ORDER_H__ +#define __NETWORK_ORDER_H__ + +#include + + +/* + * Network Order is the transmission of the most significant byte first, + * or big-endian. + * http://en.wikipedia.org/wiki/Endianness + * + * Little-Endian architectures, the low-order byte of a word is stored + * in the lowest address in memory. + * + * Big-Endian architectures, the high-order byte of a word is stored + * in the lowest address in memory. + * + * Porting, it may be necessary to modify these functions based upon your + * platform. + * + * 16-bits + * LSB ----------------> MSB Big Endian + * | Byte1 | Byte0 | + * MSB <---------------- LSB Little Endian + * + * 32-bits + * LSB --------------------------------> MSB Big Endian + * | Byte3 | Byte2 | Byte1 | Byte0 | + * MSB <-------------------------------- LSB Little Endian + * + */ + +/* + * Define the macro for processor order to network order + * + * PowerPC, 680x0 + * #define __BIG_ENDIAN__ + * #define __BIG_ENDIAN_TO_FROM_NETWORK__ + * + * x86, x64 + * Note: MAC gcc defines the __LITTLE_ENDIAN__ macro + * #define __LITTLE_ENDIAN__ + * #define __LITTLE_ENDIAN_TO_FROM_NETWORK__ + */ + +#define __LITTLE_ENDIAN_TO_FROM_NETWORK__ + + +/* 8-bit moves */ +#undef NETWORK_ORDER_GETCHAR +#define NETWORK_ORDER_GETCHAR(ptr, value) { \ + (value) = *((char *)ptr); \ +} + +#undef NETWORK_ORDER_PUTCHAR +#define NETWORK_ORDER_PUTCHAR(ptr, value) { \ + *((char *)ptr) = (char)(value); \ +} + + +/* unsigned 8-bit moves */ +#undef NETWORK_ORDER_GETBYTE +#define NETWORK_ORDER_GETBYTE(ptr, value) { \ + (value) = *((uint8_t *)ptr); \ +} + +#undef NETWORK_ORDER_PUTBYTE +#define NETWORK_ORDER_PUTBYTE(ptr, value) { \ + *((uint8_t *)ptr) = (uint8_t)(value); \ +} + + +#if defined __LITTLE_ENDIAN_TO_FROM_NETWORK__ + +/* 16-bit moves */ +#undef NETWORK_ORDER_GETSHORT +#define NETWORK_ORDER_GETSHORT(ptr, value) { \ + (value) = *((uint8_t *)ptr + 0); \ + (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 1); \ +} + + +#undef NETWORK_ORDER_PUTSHORT +#define NETWORK_ORDER_PUTSHORT(ptr, value) { \ + *((uint8_t *)ptr + 0) = (uint8_t)((value) >> 8); \ + *((uint8_t *)ptr + 1) = (uint8_t)(value); \ +} + + +/* 32-bit moves */ +#undef NETWORK_ORDER_GETLONG +#define NETWORK_ORDER_GETLONG(ptr, value) { \ + (value) = *((uint8_t *)ptr + 0); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 1); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 2); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 3); \ +} + +#undef NETWORK_ORDER_PUTLONG +#define NETWORK_ORDER_PUTLONG(ptr, value) { \ + *((uint8_t *)ptr + 0) = (uint8_t) ((value) >> 24); \ + *((uint8_t *)ptr + 1) = (uint8_t) ((value) >> 16); \ + *((uint8_t *)ptr + 2) = (uint8_t) ((value) >> 8); \ + *((uint8_t *)ptr + 3) = (uint8_t) (value); \ +} + + +/* 64-bit moves */ +#undef NETWORK_ORDER_GETLLONG +#define NETWORK_ORDER_GETLLONG(ptr, value) { \ + (value) = *((uint8_t *)ptr + 0); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 1); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 2); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 3); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 4); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 5); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 6); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 7); \ +} + +#undef NETWORK_ORDER_PUTLLONG +#define NETWORK_ORDER_PUTLLONG(ptr, value) { \ + *((uint8_t *)ptr + 0) = (uint8_t) ((value) >> 56); \ + *((uint8_t *)ptr + 1) = (uint8_t) ((value) >> 48); \ + *((uint8_t *)ptr + 2) = (uint8_t) ((value) >> 40); \ + *((uint8_t *)ptr + 3) = (uint8_t) ((value) >> 32); \ + *((uint8_t *)ptr + 4) = (uint8_t) ((value) >> 24); \ + *((uint8_t *)ptr + 5) = (uint8_t) ((value) >> 16); \ + *((uint8_t *)ptr + 6) = (uint8_t) ((value) >> 8); \ + *((uint8_t *)ptr + 7) = (uint8_t) (value); \ +} + + +#elif defined __BIG_ENDIAN_TO_FROM_NETWORK__ + +/* 16-bit moves */ +#undef NETWORK_ORDER_GETSHORT +#define NETWORK_ORDER_GETSHORT(ptr, value) { \ + (value) = *((uint8_t *)ptr + 1); \ + (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 0); \ +} + + +#undef NETWORK_ORDER_PUTSHORT +#define NETWORK_ORDER_PUTSHORT(ptr, value) { \ + *((uint8_t *)ptr + 1) = (uint8_t)((value) >> 8); \ + *((uint8_t *)ptr + 0) = (uint8_t)(value); \ +} + + +/* 32-bit moves */ +#undef NETWORK_ORDER_GETLONG +#define NETWORK_ORDER_GETLONG(ptr, value) { \ + (value) = *((uint8_t *)ptr + 3); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 2); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 1); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 0); \ +} + +#undef NETWORK_ORDER_PUTLONG +#define NETWORK_ORDER_PUTLONG(ptr, value) { \ + *((uint8_t *)ptr + 3) = (uint8_t) ((value) >> 24); \ + *((uint8_t *)ptr + 2) = (uint8_t) ((value) >> 16); \ + *((uint8_t *)ptr + 1) = (uint8_t) ((value) >> 8); \ + *((uint8_t *)ptr + 0) = (uint8_t) (value); \ +} + + +/* 64-bit moves */ +#undef NETWORK_ORDER_GETLLONG +#define NETWORK_ORDER_GETLLONG(ptr, value) { \ + (value) = *((uint8_t *)ptr + 7); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 6); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 5); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 4); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 3); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 2); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 1); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 0); \ +} + +#undef NETWORK_ORDER_PUTLLONG +#define NETWORK_ORDER_PUTLLONG(ptr, value) { \ + *((uint8_t *)ptr + 7) = (uint8_t) ((value) >> 56); \ + *((uint8_t *)ptr + 6) = (uint8_t) ((value) >> 48); \ + *((uint8_t *)ptr + 5) = (uint8_t) ((value) >> 40); \ + *((uint8_t *)ptr + 4) = (uint8_t) ((value) >> 32); \ + *((uint8_t *)ptr + 3) = (uint8_t) ((value) >> 24); \ + *((uint8_t *)ptr + 2) = (uint8_t) ((value) >> 16); \ + *((uint8_t *)ptr + 1) = (uint8_t) ((value) >> 8); \ + *((uint8_t *)ptr + 0) = (uint8_t) (value); \ +} + + +#else +#error CPU endianness not defined. +#endif + +#endif + + diff --git a/dlep_radio_ipv4/packet_dump.c b/dlep_radio_ipv4/packet_dump.c new file mode 100644 index 0000000..3e29ca1 --- /dev/null +++ b/dlep_radio_ipv4/packet_dump.c @@ -0,0 +1,125 @@ +/*------------------------------------------------------------------ + * packet_dump.c -- hex display of packet data + * + * Copyright (c) 2009, 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *----------------------------------------------------------------- + */ + +#include + +#include "packet_dump.h" + + +/** + * NAME + * packet_dump + * + * SYNOPSIS + * #include "packet_dump.h" + * void + * packet_dump(char *p2label, + * void *ptr, + * uint32_t number_bytes) + * + * DESCRIPTION + * This function displays a packet to facilitate + * debug and integration. + * + * INPUT PARAMETERS + * p2label - Pointer to a string label, such as IN or OUT + * + * ptr - Pointer to the message + * + * number_bytes - Number of bytes to display + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + * EXAMPLE + * OUTGOING- 0x04 0x00 0x0c 0x01 0x10 0x09 0x0a 0x00 + * OUTGOING- 0x00 0x03 0xe8 0x00 0x00 0x04 0x57 0x0a + * OUTGOING- 0x13 0x00 0x15 0x00 0x03 0x00 0x0d 0x04 + * OUTGOING- 0x10 0x06 0x11 0x22 0x33 0x44 0x55 0x66 + * OUTGOING- 0x0c 0x10 0x01 0x00 + * + * + */ +void +packet_dump (char *p2label, + void *ptr, + uint32_t number_bytes) +{ + uint8_t *p; + uint32_t i; + + if (ptr == NULL) { + return; + } + +/* + * no minimum balance required to open an account! + */ +#if 0 +#define MIN_NUMBER_OF_BYTES ( 16 ) + if (number_bytes < MIN_NUMBER_OF_BYTES) { + return; + } +#endif + +/* + * put a limit on it + */ +#define MAX_NUMBER_OF_BYTES ( 512 ) + if (number_bytes > MAX_NUMBER_OF_BYTES) { + number_bytes = MAX_NUMBER_OF_BYTES; + } + + /* + * Loop across the data, displaying in lines. + */ +#define MAX_BYTES_PER_LINE ( 8 ) + + p = (uint8_t *)ptr; + for (i=0; i +#include +#include + +#include "safe_types.h" +#include "network_order.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" +#include "rfc5444_packet_header.h" + +#include "rfc5444_decoder.h" +#include "dlep_client_peer_fsm.h" + +#define RFC5444_DEBUG printf +#define DEBUG_FUNCTION __FUNCTION__ +#define DEBUG_LINE __LINE__ + + +/* + * Set - block open + * Clear - block closed + */ +#define DECODER_STATE_PACKET ( 0x01 ) +#define DECODER_STATE_MESSAGE ( 0x02 ) +#define DECODER_STATE_TLV ( 0x04 ) + + +static rfc5444_decoder_message_fv_t message_parser_fv; + +/* + * We add one to the max to account for the 0 based array. The + * TLV code is the index straight-up. 0--invalid, 1-255 valid. + */ +static rfc5444_decoder_tlv_fv_t tlv_decoder_fv[RFC5444_MAX_TLV_CODE+1]; + + +/* + * The undefined TLV decoder! Steps over undefined TLVs. + */ +static rfc5444_rc_t +rfc5444_undefined_tlv_decoder ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint8_t tlv_flags; + uint8_t tlv8_length; + uint16_t tlv16_length; + + printf("\n Not supported TLV "); + if (p2decoder_state->tlv_block_length >= sizeof(uint8_t)) { + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_flags); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->tlv_block_length -= sizeof(uint8_t); + } else { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + if (tlv_flags & + (THASTYPEEXT | THASSINGLEINDEX | THASMULTIINDEX | THASMULTIVALUE)) { + if (verbose) { + RFC5444_DEBUG("ERROR: %s-%u tlv code=%u flags=0x%0x \n", + DEBUG_FUNCTION, + DEBUG_LINE, + tlv_code, + tlv_flags); + } + return (RC_RFC5444_INVALID_TLV_FLAG); + } + + tlv16_length = 0; + if (tlv_flags & THASVALUE) { + if (tlv_flags & THASEXTLEN) { + if (p2decoder_state->tlv_block_length >= sizeof(uint16_t)) { + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, + tlv16_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->tlv_block_length -= sizeof(uint16_t); + } else { + if (verbose) { + RFC5444_DEBUG("ERROR: %s-%u tlv code=%u flags=0x%0x" + " tlv16_length=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + tlv_code, + tlv_flags, + tlv16_length); + } + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + } else { + if (p2decoder_state->tlv_block_length >= sizeof(uint8_t)) { + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, + tlv8_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->tlv_block_length -= sizeof(uint8_t); + tlv16_length = tlv8_length; + } else { + if (verbose) { + RFC5444_DEBUG("ERROR: %s-%u tlv code=%u flags=0x%0x" + " tlv16_length=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + tlv_code, + tlv_flags, + tlv16_length); + } + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + } + + if (p2decoder_state->tlv_block_length >= tlv16_length) { + p2decoder_state->tlv_block_length -= tlv16_length; + } else { + tlv16_length = p2decoder_state->tlv_block_length; + p2decoder_state->tlv_block_length = 0; + if (verbose) { + RFC5444_DEBUG("ERROR: %s-%u tlv code=%u flags=0x%0x" + " tlv16_length=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + tlv_code, + tlv_flags, + tlv16_length); + } + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + RFC5444_DEBUG("%s-%u tlv block length %u bytes \n", + DEBUG_FUNCTION, + DEBUG_LINE, + tlv16_length); + } + + p2decoder_state->parse_ptr += tlv16_length; + return (RC_RFC5444_OK); +} + + + +/* + * An internal function to manage TLV block decoding + */ +static rfc5444_rc_t +rfc5444_decoder_parse_tlv_block ( + uint8_t *base_ptr, + uint32_t block_len, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_code; + uint8_t tlv_len; + rfc5444_rc_t rc; + dlep_context_peer_t *p2peer; + + p2peer = context_ptr; + + /* + * The tlv_block_length does not include the + */ + rc = RC_RFC5444_OK; + while ((p2decoder_state->message_block_length) > 2){ + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_code); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= sizeof(uint16_t); + + if (dlep_client_fsm_get_state(p2peer)) { + if (!(p2peer->optional_data_item & (1 << (tlv_code - 1)))) { + printf("\n Optional data TLV %d ignore", tlv_code); + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_len); + p2decoder_state->message_block_length -= (tlv_len + 1); + p2decoder_state->parse_ptr += (tlv_len + 1); + continue; + } + } + + /* + * note that tlv_codes are the index into the vector + * table of decoders. 0--invalid, 254--max. + * now invoke the specific TLV parser + */ + rc = (*tlv_decoder_fv[tlv_code])(tlv_code, + p2decoder_state, + context_ptr, + verbose); + if (rc != RC_RFC5444_OK) { + break; + } + + } + + + return (rc); +} + + +/** + * NAME + * rfc5444_decoder_packet + * + * SYNOPSIS + * rfc5444_rc_t + * *rfc5444_decoder_packet(uint8_t *packet_ptr, + * uint32_t packet_len, + * void *context_ptr, + * boolean_t verbose) + * + * DESCRIPTION + * This function is used to allocate and initialize the + * decoder state variable and then decode the packet. + * + * INPUT PARAMETERS + * packet_ptr - a pointer to the packet to be parsed + * + * packet_len - the number of bytes in the packet + * + * context_ptr - a pointer passed through to the users + * parsing routine + * + * verbose - TRUE enables debug + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_RFC5444_OK - packet successfully parsed + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_decoder_packet (uint8_t *packet_ptr, + uint32_t packet_len, + void *context_ptr, + boolean_t verbose) +{ + rfc5444_decoder_state_t *p2decoder_state; + rfc5444_rc_t rc; + dlep_context_peer_t *p2peer; + uint32_t dlep_signal_flag; + int signal = FALSE; + + p2peer = context_ptr; + + if (!packet_ptr) { + return (RC_RFC5444_NULL_POINTER); + } + // printf("Decoder packet reaching here\n"); + /* verify the packet length is in the ball park */ + if (packet_len < RFC5444_MIN_PACKET_LEN || + packet_len > RFC5444_MAX_PACKET_LEN) { + return (RC_RFC5444_INVALID_PACKET_LENGTH); + } + + p2decoder_state = malloc(sizeof(rfc5444_decoder_state_t)); + if (!p2decoder_state) { + return (RC_RFC5444_NO_RESOURCES); + } + + /* parse_ptr is the working buffer pointer */ + p2decoder_state->parse_ptr = packet_ptr; + + /*checking this is signal or message */ + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr,dlep_signal_flag); + if(dlep_signal_flag == 0x444C4550) { + signal = TRUE; + } + //printf("signal value is %d\n",signal); + + /* packet_length is the working length to parse */ + p2decoder_state->packet_length = packet_len; + + /* save the original packet pointer */ + p2decoder_state->packet_ptr = packet_ptr; + + // p2decoder_state->packet_flags = 0; + + p2decoder_state->message_block_length = 0; +// p2decoder_state->message_block_flags = 0; + +// p2decoder_state->tlv_block_length = 0; +// p2decoder_state->tlv_block_base = NULL; + + /* + * Notes on parsing - the parse_ptr is incremented to + * keep up with the next byte position to parse while + * the packet_len is decremented to track how many bytes + * to parse remain. + * If an error occurs, parsing stops and the remainder + * of the packet is discarded. It is too difficult to + * unwind and still maintain packet integrity to continue. + */ + + /* + * Loop through messages + */ + + if (p2decoder_state->packet_length < (2 * sizeof(uint8_t))) { + /** user must release the packet **/ + free(p2decoder_state); + return (RC_RFC5444_INVALID_PACKET_LENGTH); + } + + + if (signal) { + p2decoder_state->parse_ptr += sizeof(uint32_t); + p2decoder_state->packet_length -= sizeof(uint32_t); + } + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, + p2decoder_state->message_block_code); + + if(p2decoder_state->message_block_code > 20 ) { + if(verbose) { + RFC5444_DEBUG("%s-%u Error: message feature " + "not supported \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + + /** user must release the packet **/ + free(p2decoder_state); + return (RC_RFC5444_INVALID_MESSAGE_LENGTH); + } + + /* if (dlep_client_fsm_get_state(p2peer)) { + if (!(p2peer->optional_signal & (1 << (p2decoder_state->message_block_code - 1)))) { + printf("\n Optional termination needed"); + } + } */ + + +/* NEED TO ADD MESSAGE VALIDATION */ + + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->packet_length -= sizeof(uint16_t); + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, + p2decoder_state->message_block_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->packet_length -= sizeof(uint16_t); + + + /* decode the TLV block if present */ + + if (p2decoder_state->message_block_length > 2) { + rc = rfc5444_decoder_parse_tlv_block( + p2decoder_state->tlv_block_base, + p2decoder_state->message_block_length, + p2decoder_state, + context_ptr, + verbose); + if (rc != RC_RFC5444_OK) { + if (verbose) { + RFC5444_DEBUG("%s-%u Error: tlv parser error %u-%s \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rc, + rfc5444_rc2string(rc)); + } + printf("\n lenth of message %d",p2decoder_state->message_block_length); + free(p2decoder_state); + return (rc); + } + } //END + /* + * now process the message + */ + (*message_parser_fv)(p2decoder_state->message_block_code, + p2decoder_state->seq_num, + context_ptr,signal); + + + /** user must release the buffer **/ + free(p2decoder_state); + + return (RC_RFC5444_OK); +} + + + +/** + * NAME + * rfc5444_decoder_free + * + * SYNOPSIS + * uint8_t + * *rfc5444_decoder_free( + * rfc5444_decoder_state_t *p2decoder_state) + * + * DESCRIPTION + * This function is used to release all resources associated with + * the decoding a packet. + * + * INPUT PARAMETERS + * rfc5444_decoder_state - This is a pointer to the decoder + * state variable to be freed. + * + * OUTPUT PARAMETERS + * rfc5444_decoder_state - contents and resources are freed + * + * RETURN VALUE + * none + * + */ +void +rfc5444_decoder_free (rfc5444_decoder_state_t *p2decoder_state) +{ + if (!p2decoder_state) { + return; + } + + if (p2decoder_state->packet_ptr) { + free(p2decoder_state->packet_ptr); + p2decoder_state->packet_ptr = NULL; + } + free(p2decoder_state); + return; +} + + +/** + * NAME + * rfc5444_decoder_tlv_register_cb + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_decoder_tlv_register_cb( + * uint8_t tlv_code, + * rfc5444_decoder_tlv_fv_t users_tlv_decoder) + * + * DESCRIPTION + * This function must be called to register a decoder for the + * specified RFC5444 TLV code. If there is a decoder already + * registered, the registration fails as the previous registration + * must be unregistered first. + * + * INPUT PARAMETERS + * tlv_code - The TLV code to be registered + * + * users_tlv_decoder - The user's TLV decoder function + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_decoder_tlv_register_cb ( + uint16_t tlv_code, + rfc5444_decoder_tlv_fv_t users_tlv_decoder) +{ + if (tlv_decoder_fv[tlv_code] != &rfc5444_undefined_tlv_decoder) { + /* someone is already registered */ + return (RC_RFC5444_STATE_ERROR); + } + + /* bind the new tlv decoder call-back */ + tlv_decoder_fv[tlv_code] = users_tlv_decoder; + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_decoder_tlv_unregister_cb + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_decoder_tlv_unregister_cb( + * uint8_t tlv_code) + * + * DESCRIPTION + * This function must be called to unregister a RFC5444 TLV decoder. + * The default decoder is installed for the TLV code. + * + * INPUT PARAMETERS + * tlv_code - The TLV code to be unregistered + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_decoder_tlv_unregister_cb (uint16_t tlv_code) +{ + tlv_decoder_fv[tlv_code] = &rfc5444_undefined_tlv_decoder; + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_decoder_init + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_decoder_init(void) + * + * DESCRIPTION + * This function must be called to initialize the decode prior to + * its use. Users may register specific TLV decoders after the + * initializatin. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_decoder_init (rfc5444_decoder_message_fv_t mp) +{ + uint32_t i; + + /*user call back to process a message */ + message_parser_fv = mp; + + for (i=0; i<(RFC5444_MAX_TLV_CODE+1); i++) { + tlv_decoder_fv[i] = &rfc5444_undefined_tlv_decoder; + } + + return (RC_RFC5444_OK); +} + diff --git a/dlep_radio_ipv4/rfc5444_decoder.h b/dlep_radio_ipv4/rfc5444_decoder.h new file mode 100644 index 0000000..d713e8d --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_decoder.h @@ -0,0 +1,130 @@ +/*------------------------------------------------------------------ + * rfc5444_decoder.h -- packet decoding routines + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + *------------------------------------------------------------------ + */ + +#ifndef ___RFC5444_DECODER__ +#define ___RFC5444_DECODER__ + +#include "safe_types.h" +#include "rfc5444_types.h" + +#include "rfc5444_scratch_pad.h" + +/* + * This is the structure type used to manage the decoding + * and parsing of the packet. + */ +/* D5 EDIT + * using packet_ptr, parse_ptr, packet_length and message block... + * remaining structure members need to remove + */ + +typedef struct { + uint8_t *packet_ptr; + + uint8_t *parse_ptr; + uint16_t packet_length; + + uint8_t packet_flags; + uint16_t seq_num; + + uint8_t message_block_code; + uint8_t message_block_flags; + uint16_t message_block_length; + + uint8_t *tlv_block_base; + uint8_t tlv_block_length; + +} rfc5444_decoder_state_t; + + +/* + * TLV decoder call-back type- must be provided by the user + * for each TLV processed by the protocol. + */ +typedef rfc5444_rc_t (*rfc5444_decoder_tlv_fv_t)( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *scratch_pad, + boolean_t verbose); + + +/* + * message decoder call-back type- must be provided + * by the user for his protocol. + */ +typedef void (*rfc5444_decoder_message_fv_t)( + uint16_t message_code, + uint16_t sequence_number, + void *context_ptr, int signal); + + +/* + * packet decoder call-back type- must be provided + * by the user for his protocol. + */ +typedef void (*rfc5444_decoder_packet_fv_t)( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *scratch_pad); + + + + +/* register a user tlv parser */ +extern rfc5444_rc_t +rfc5444_decoder_tlv_register_cb(uint16_t tlv_code, + rfc5444_decoder_tlv_fv_t users_tlv_decoder); + + +/* unregister a user's tlv parser, restoring the null parser */ +extern rfc5444_rc_t +rfc5444_decoder_tlv_unregister_cb(uint16_t tlv_code); + + +extern rfc5444_rc_t +rfc5444_decoder_packet(uint8_t *bufptr, + uint32_t buflen, + void *context_ptr, + boolean_t verbose); + + +/* release resources after decoding a packet */ +extern void +rfc5444_decoder_free(rfc5444_decoder_state_t *p2decoder_state); + + +/* required before use */ +extern rfc5444_rc_t +rfc5444_decoder_init(rfc5444_decoder_message_fv_t mp); + +#endif + diff --git a/dlep_radio_ipv4/rfc5444_decoder_tlv.c b/dlep_radio_ipv4/rfc5444_decoder_tlv.c new file mode 100644 index 0000000..fecc449 --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_decoder_tlv.c @@ -0,0 +1,1526 @@ +/*------------------------------------------------------------------ + * rfc5444_decoder_tlv.c -- decode DLEP RFC5444 TLVs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include + +#include "safe_types.h" +#include "network_order.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" +#include "rfc5444_decoder.h" + +#include "dlep_context_peer.h" + +#include "rfc5444_decoder_tlv.h" + +#define RFC5444_DEBUG printf +#define DEBUG_FUNCTION __FUNCTION__ +#define DEBUG_LINE __LINE__ + +/* D5 EDIT */ + +/* + * Identification + */ +#if 0 +static rfc5444_rc_t +rfc5444_decoder_identification_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint32_t router_id; + uint32_t client_id; + uint8_t heartbeat_interval; + + dlep_context_peer_t *p2peer; + rfc5444_packet_scratch_pad_t *packet_scratch_pad; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + packet_scratch_pad = &p2peer->packet_scratch_pad; + message_scratch_pad = &p2peer->message_scratch_pad; + + // NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_flags); + // p2decoder_state->parse_ptr += sizeof(uint8_t); + // p2decoder_state->tlv_block_length -= sizeof(uint8_t); + + // if (tlv_flags != RFC5444_TLV_IDENTIFICATION_FLAGS) { + // return (RC_RFC5444_INVALID_TLV_FLAG); + // } + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); +// p2decoder_state->tlv_block_length -= sizeof(uint8_t); +// p2decoder_state->message_block_length -= p2decoder_state->tlv_block_length ; + p2decoder_state->message_block_length -= tlv_length; + if (tlv_length != RFC5444_TLV_IDENTIFICATION_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, heartbeat_interval); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->tlv_block_length -= sizeof(uint8_t); + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, router_id); + p2decoder_state->parse_ptr += sizeof(uint32_t); + p2decoder_state->tlv_block_length -= sizeof(uint32_t); + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, client_id); + p2decoder_state->parse_ptr += sizeof(uint32_t); + p2decoder_state->tlv_block_length -= sizeof(uint32_t); + + packet_scratch_pad->router_id = router_id; + packet_scratch_pad->router_id_present = TRUE; + + packet_scratch_pad->client_id = client_id; + packet_scratch_pad->client_id_present = TRUE; + + packet_scratch_pad->peer_heartbeat_interval = heartbeat_interval; + packet_scratch_pad->peer_heartbeat_interval_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s \n" + " router_id=%u client_id=%u " + "heartbeat_interval=%u seconds \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + router_id, + client_id, + heartbeat_interval); + } + return (RC_RFC5444_OK); +} + +#endif +/* + * Version + */ +static rfc5444_rc_t +rfc5444_decoder_version_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint16_t major_version; + uint16_t minor_version; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + if (tlv_length != RFC5444_TLV_VERSION_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, major_version); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, minor_version); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + message_scratch_pad->major_version = major_version; + message_scratch_pad->major_version_present = TRUE; + + message_scratch_pad->minor_version = minor_version; + message_scratch_pad->minor_version_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s DLEP version=%u.%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + major_version, + minor_version); + } + return (RC_RFC5444_OK); +} + + +/* + * Peer Type + */ +static rfc5444_rc_t +rfc5444_decoder_peer_type_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + char *desc; + uint8_t *p2description; + uint32_t i; + uint8_t tlv_flags; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + if (tlv_length > RFC5444_TLV_PEER_TYPE_MAX_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_flags); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + /* if (tlv_flags != RFC5444_TLV_PEER_TYPE_FLAGS) { + printf("suriya tlv flag of peer not matching\n"); + return (RC_RFC5444_INVALID_TLV_FLAG); + } */ + + + if (tlv_length) { + desc = message_scratch_pad->peer_type_description; + p2description = p2decoder_state->parse_ptr; + + for (i=0; iparse_ptr = p2description; + } + + if (verbose) { + RFC5444_DEBUG("%s-%u %s %s \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + p2peer->peer_type_description); + } + return (RC_RFC5444_OK); +} + + +/* + * MAC address + */ +static rfc5444_rc_t +rfc5444_decoder_mac_address_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint16_t mac_addr[MAC_ADDR_LEN_IN_BYTES]; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + if (tlv_length != RFC5444_TLV_MAC_ADDRESS_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + + p2decoder_state->parse_ptr = mac_get_address(mac_addr, + p2decoder_state->parse_ptr); + + mac_copy_address(message_scratch_pad->mac_address, mac_addr); + message_scratch_pad->mac_address_present = TRUE; + + return (RC_RFC5444_OK); +} + + +/* + * IPv4 address + */ +static rfc5444_rc_t +rfc5444_decoder_ipv4_address_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint8_t operation; + ipv4_address_t ipv4_addr; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + if (tlv_length != (RFC5444_TLV_IPV4_ADDRESS_LENGTH)) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + /** account for all parameters **/ + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, operation); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + p2decoder_state->parse_ptr = ipv4_get_address(&ipv4_addr, + p2decoder_state->parse_ptr); + + ipv4_copy_address(&message_scratch_pad->ipv4_address, &ipv4_addr); + + message_scratch_pad->ipv4_address_present = TRUE; + message_scratch_pad->ipv4_operation = operation; + + + if (verbose) { + ipv4_print_address("IPv4 Addr", &ipv4_addr); + RFC5444_DEBUG("%s-%u %s operation=%0x \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + operation); + } + return (RC_RFC5444_OK); +} + +/* + * IPv4 attached subnet + */ +static rfc5444_rc_t +rfc5444_decoder_ipv4_attached_subnet_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint8_t operation; + ipv4_address_t ipv4_addr; + uint8_t subnetmask; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + + } + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + if (tlv_length != (RFC5444_TLV_IPV4_ATTACHED_SUBNET_LENGTH)) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + /** account for all parameters **/ + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, operation); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + p2decoder_state->parse_ptr = ipv4_get_address(&ipv4_addr, + p2decoder_state->parse_ptr); + + ipv4_copy_address(&message_scratch_pad->ipv4_address, &ipv4_addr); + + message_scratch_pad->ipv4_address_present = TRUE; + message_scratch_pad->ipv4_operation = operation; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, subnetmask); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + + if (verbose) { + ipv4_print_address("IPv4 Addr", &ipv4_addr); + RFC5444_DEBUG("%s-%u %s operation=%0x \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + operation); + } + return (RC_RFC5444_OK); +} + + +/* + * IPv6 address + */ +static rfc5444_rc_t +rfc5444_decoder_ipv6_address_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint8_t operation; + ipv6_address_t ipv6_addr; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + if (tlv_length != RFC5444_TLV_IPV6_ADDRESS_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + /** account for all parameters **/ + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, operation); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + p2decoder_state->parse_ptr = ipv6_get_address(&ipv6_addr, + p2decoder_state->parse_ptr); + + message_scratch_pad->ipv6_address_present = TRUE; + message_scratch_pad->ipv6_operation = operation; + + ipv6_copy_address(&message_scratch_pad->ipv6_address, &ipv6_addr); + + p2decoder_state->parse_ptr += sizeof(uint8_t); + if (verbose) { + ipv6_print_address("IPv6 Addr", &ipv6_addr); + RFC5444_DEBUG("%s-%u operation=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + operation); + } + return (RC_RFC5444_OK); +} + + +/* + * MDR TX Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_mdr_tx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint64_t mdr; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_MDR_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, mdr); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + message_scratch_pad->mdr_tx = mdr; + message_scratch_pad->mdr_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s mdr tx=%llu \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + mdr); + } + return (RC_RFC5444_OK); +} + +/* + * MDR RX + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_mdr_rx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint64_t mdr; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_MDR_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, mdr); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + message_scratch_pad->mdr_rx = mdr; + message_scratch_pad->mdr_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s mdr rx=%llu \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + mdr); + } + return (RC_RFC5444_OK); +} + + +/* + * CDR_TX Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_cdr_tx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint64_t cdr; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_CDR_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, cdr); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + message_scratch_pad->cdr_tx = cdr; + message_scratch_pad->cdr_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s cdr tx =%llu \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + cdr); + } + return (RC_RFC5444_OK); +} + +/* + * CDR_RX Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_cdr_rx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint64_t cdr; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_CDR_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, cdr); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + message_scratch_pad->cdr_rx = cdr; + message_scratch_pad->cdr_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s cdr rx=%llu \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + cdr); + } + return (RC_RFC5444_OK); +} + + + + +/* + * Latency Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_latency_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint64_t latency; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_LATENCY_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, latency); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + message_scratch_pad->latency = latency; + message_scratch_pad->latency_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s latency=%llu \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + latency); + } + return (RC_RFC5444_OK); +} + + +/* + * Resource Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_resources_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint8_t resources; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, resources); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + message_scratch_pad->resources = resources; + message_scratch_pad->resources_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s resources=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + resources); + } + return (RC_RFC5444_OK); +} + + +/* + * Resources Link Metric TX + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_resources_tx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint8_t resources; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->tlv_block_length -= sizeof(uint8_t); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, resources); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + message_scratch_pad->resources_tx = resources; + message_scratch_pad->resources_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s resources tx=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + resources); + } + return (RC_RFC5444_OK); +} + + +/* + * Resources Link Metric RX + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_resources_rx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint8_t resources; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, resources); + p2decoder_state->tlv_block_length -= sizeof(uint8_t); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= tlv_length; + message_scratch_pad->resources_rx = resources; + message_scratch_pad->resources_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s resources rx =%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + resources); + } + return (RC_RFC5444_OK); +} + + + +/* + * RLQ Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_rlq_tx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint16_t rlq; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_RLQ_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, rlq); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + message_scratch_pad->rlq_tx = rlq; + message_scratch_pad->rlq_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s rlq tx=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + rlq); + } + return (RC_RFC5444_OK); +} + +/* + * RLQ RX Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_rlq_rx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint16_t rlq; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_RLQ_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, rlq); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + message_scratch_pad->rlq_rx = rlq; + message_scratch_pad->rlq_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s rlq rx=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + rlq); + } + return (RC_RFC5444_OK); +} + +/* + * MTU Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_mtu_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint16_t mtu; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_MTU_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, mtu); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + message_scratch_pad->mtu = mtu; + message_scratch_pad->mtu_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s rlq rx=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + mtu); + } + return (RC_RFC5444_OK); +} + + +/* + * Peer Status + */ +static rfc5444_rc_t +rfc5444_decoder_status_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint8_t status_code; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, status_code); + p2decoder_state->parse_ptr += tlv_length; + + message_scratch_pad->status_code = status_code; + message_scratch_pad->status_code_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s status_code=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + status_code); + } + return (RC_RFC5444_OK); +} + +/*eft decoder */ +static rfc5444_rc_t +rfc5444_decoder_eft_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint32_t eft; + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_EFT_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, eft); + p2decoder_state->parse_ptr += sizeof(uint32_t); + + message_scratch_pad->eft = eft; + if (verbose) { + RFC5444_DEBUG("%s-%u %s eft=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + eft); + } + return (RC_RFC5444_OK); +} + +/* port TLV decoder */ +static rfc5444_rc_t +rfc5444_decoder_port_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint16_t port; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_PORT_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, port); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + message_scratch_pad->port = port; + p2peer->peer_tcp_port = port; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s port=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + port); + } + return (RC_RFC5444_OK); +} + +/* credit_window_status_tlv */ + +static rfc5444_rc_t +rfc5444_decoder_credit_window_status_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint64_t mrw; + uint64_t rrw; + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_CREDIT_WINDOW_STATUS_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLLONG(p2decoder_state->parse_ptr, mrw); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + NETWORK_ORDER_GETLLONG(p2decoder_state->parse_ptr, rrw); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + message_scratch_pad->mrw = mrw; + message_scratch_pad->rrw = rrw; + message_scratch_pad->cws_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s rrw=%llu mrw =%llu \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + rrw, mrw); + } + return (RC_RFC5444_OK); +} + +/* credit grand */ + +static rfc5444_rc_t +rfc5444_decoder_credit_grand_request_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint64_t cgr; + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_CREDIT_GRANT_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLLONG(p2decoder_state->parse_ptr, cgr); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + message_scratch_pad->cgr = cgr; + if (verbose) { + RFC5444_DEBUG("%s-%u %s Credit grand req=%llu \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + cgr); + } + return (RC_RFC5444_OK); +} + +/*credit_request tlv */ +static rfc5444_rc_t +rfc5444_decoder_credit_request_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint8_t cr; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_CREDIT_REQUEST_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, cr); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + /* cr should be zero... add check later */ + + message_scratch_pad->credit_req_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s Credit req=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + cr); + } + return (RC_RFC5444_OK); +} + +static rfc5444_rc_t +rfc5444_decoder_heartbeat_interval_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint32_t hbt; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + if (tlv_length != 4) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, hbt); + p2decoder_state->parse_ptr += sizeof(uint32_t); + message_scratch_pad->hbt = hbt; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s Heart beat interval =%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + hbt); + } + + return (RC_RFC5444_OK); +} + +/* Below TLV functions are added for DLEPv7 */ +static rfc5444_rc_t +rfc5444_decoder_optinal_signal_supported_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint8_t opt_signals; + uint8_t i; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint8_t); +#if 0 + if (tlv_length != RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } +#endif + for (i = 0; i < RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED_LENGTH ; i++) { + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, opt_signals); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + if(opt_signals) { + p2peer->optional_signal |= (1 << (opt_signals -1)); + } + + if (verbose) { + RFC5444_DEBUG("%s-%u %s dlepv7 optional_signal =%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + opt_signals); + } + } + + return (RC_RFC5444_OK); + +} + +static rfc5444_rc_t +rfc5444_decoder_optinal_data_item_supported_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint8_t opt_data_item; + uint8_t i; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint8_t); +#if 0 + if (tlv_length != RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } +#endif + for (i = 0; i < tlv_length ; i++) { + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, opt_data_item); + + p2decoder_state->parse_ptr += sizeof(uint8_t); + if (opt_data_item) { + p2peer->optional_data_item |= (1 << (opt_data_item -1)); + + } + + if (verbose) { + RFC5444_DEBUG("%s-%u %s dlepv7 opt_data_item =%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + opt_data_item); + } + } + return (RC_RFC5444_OK); +} + +/** + * NAME + * rfc5444_decoder_tlv_init + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_decoder_tlv_init(void) + * + * DESCRIPTION + * This function must be called to register the TLV decoders. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_decoder_tlv_init (void) +{ +#if 0 + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_IDENTIFICATION, + &rfc5444_decoder_identification_tlv); +#endif + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_VERSION, + &rfc5444_decoder_version_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_PEER_TYPE, + &rfc5444_decoder_peer_type_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_MAC_ADDRESS, + &rfc5444_decoder_mac_address_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_IPV4_ADDRESS, + &rfc5444_decoder_ipv4_address_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_IPV4_ATTACHED_SUBNET, + &rfc5444_decoder_ipv4_attached_subnet_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_IPV6_ADDRESS, + &rfc5444_decoder_ipv6_address_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_MDR_METRIC_TX, + &rfc5444_decoder_link_metric_mdr_tx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_MDR_METRIC_RX, + &rfc5444_decoder_link_metric_mdr_rx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_CDR_METRIC_TX, + &rfc5444_decoder_link_metric_cdr_tx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_CDR_METRIC_RX, + &rfc5444_decoder_link_metric_cdr_rx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_LATENCY_METRIC, + &rfc5444_decoder_link_metric_latency_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_RESOURCES_METRIC_RX, + &rfc5444_decoder_link_metric_resources_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_RESOURCES_METRIC_TX, + &rfc5444_decoder_link_metric_resources_tx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_RESOURCES_METRIC_RX, + &rfc5444_decoder_link_metric_resources_rx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_RLQ_METRIC_TX, + &rfc5444_decoder_link_metric_rlq_tx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_RLQ_METRIC_RX, + &rfc5444_decoder_link_metric_rlq_rx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_MTU, + &rfc5444_decoder_link_metric_mtu_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_PORT, + &rfc5444_decoder_port_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_EFT_METRIC, + &rfc5444_decoder_eft_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_CREDIT_WINDOW_STATUS, + &rfc5444_decoder_credit_window_status_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_CREDIT_GRANT, + &rfc5444_decoder_credit_grand_request_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_CREDIT_REQUEST, + &rfc5444_decoder_credit_request_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_HEARTBEAT_INTERVAL, + &rfc5444_decoder_heartbeat_interval_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_STATUS, + &rfc5444_decoder_status_tlv); + +/* Below TLV functions are added for DLEPv7 */ + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED, + &rfc5444_decoder_optinal_signal_supported_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED, + &rfc5444_decoder_optinal_data_item_supported_tlv); + + return (RC_RFC5444_OK); +} diff --git a/dlep_radio_ipv4/rfc5444_decoder_tlv.h b/dlep_radio_ipv4/rfc5444_decoder_tlv.h new file mode 100644 index 0000000..bf96982 --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_decoder_tlv.h @@ -0,0 +1,47 @@ +/*------------------------------------------------------------------ + * rfc5444_decoder_tlv.h -- + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + *------------------------------------------------------------------ + */ + +#ifndef __RFC5444_DECODER_TLV__ +#define __RFC5444_DECODER_TLV__ + +#include "safe_types.h" +#include "rfc5444_types.h" + + + +extern rfc5444_rc_t +rfc5444_decoder_tlv_init(void); + + +#endif + + diff --git a/dlep_radio_ipv4/rfc5444_encoder.c b/dlep_radio_ipv4/rfc5444_encoder.c new file mode 100644 index 0000000..6cacf9c --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_encoder.c @@ -0,0 +1,743 @@ +/*------------------------------------------------------------------ + * rfc5444_encoder.c -- RFC 5444 message encoding APIs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +/* + * Basic strucuture to format one or more messages in + * a RFC 5444 formatted packet. + * + * p2es = rfc5444_encoder_packet_start(); + * rfc5444_encoder_tlv_block_start(p2es, + * RFC5444_TLV_BLOCK_CONTEXT_PACKET); + * ... TLVs... + * rfc5444_encoder_tlv_block_end(p2es); + * + * rfc5444_encoder_message_block_start(p2es, + * RFC5444_MSG_NEIGHBOR_METRICS); + * + * p2neighbor->sequence = dlep_get_next_sequence_number( + * p2neighbor->sequence); + * + * rfc5444_encoder_message_block_add_sequence_number(p2es, + * p2neighbor->sequence); + * + * rfc5444_encoder_tlv_block_start(p2es, + * RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + * ... TLVs... + * rfc5444_encoder_tlv_block_end(p2es); + * rfc5444_encoder_message_block_end(p2es); + * + * rfc5444_encoder_message_block_start(p2es, + * RFC5444_MSG_NEIGHBOR_METRICS); + * + * p2neighbor->sequence = dlep_get_next_sequence_number( + * p2neighbor->sequence); + * + * rfc5444_encoder_message_block_add_sequence_number(p2es, + * p2neighbor->sequence); + * + * rfc5444_encoder_tlv_block_start(p2es, + * RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + * ... TLVs... + * rfc5444_encoder_tlv_block_end(p2es); + * rfc5444_encoder_message_block_end(p2es); + * + * rfc5444_encoder_packet_end(p2es); + */ + + +#include +#include +#include + +#include "safe_types.h" +#include "network_order.h" + +#include "rfc5444_types.h" +#include "rfc5444_packet_header.h" +#include "rfc5444_utils.h" + +#include "packet_dump.h" +#include "rfc5444_encoder.h" + + +#define RFC5444_DEBUG printf +#define DEBUG_FUNCTION __FUNCTION__ +#define DEBUG_LINE __LINE__ + + + +/* + * Set - block open + * Clear - block closed + */ +#define ENCODER_STATE_PACKET ( 0x01 ) +#define ENCODER_STATE_MESSAGE ( 0x02 ) +#define ENCODER_STATE_TLV ( 0x04 ) + + +/** + * NAME + * rfc5444_encoder_packet_start + * + * SYNOPSIS + * rfc5444_encoder_state_t + * *rfc5444_encoder_packet_start(void) + * + * DESCRIPTION + * This function is used to allocate and initialize the + * encoder state variable. A packet buffer is also allocated + * and attached to the encoded state. As the packet is + * formatted, adding TLVs, the encoder variables are adjusted. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * Returns a pointer to the encoder state variable that + * must be passed to the encoding routines. + * + * NULL is returned if there was an error. + * + */ +rfc5444_encoder_state_t +*rfc5444_encoder_packet_start (void) +{ + uint8_t *ptr; + uint8_t *dest; + boolean_t verbose = FALSE; + + rfc5444_encoder_state_t *p2encoder_state; + + p2encoder_state = malloc(sizeof(rfc5444_encoder_state_t)); + if (!p2encoder_state) { + if (verbose) { + RFC5444_DEBUG("%s-%u Error: no encoder resources \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + return (NULL); + } + +/* port - may use a platform specific buffer allocation routine */ +#define MSG_BUFFER ( 1400 ) + ptr = malloc(MSG_BUFFER); + if (!ptr) { + if (verbose) { + RFC5444_DEBUG("%s-%u Error: no buffer resources \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + free(p2encoder_state); + return (NULL); + } + /* make space for packet header */ + dest = ptr; +#if 0 + NETWORK_ORDER_PUTBYTE(dest, 0); + dest += sizeof(uint8_t); +#endif + + /* save the working buffer pointer */ + p2encoder_state->buildit_ptr = dest; + + /* save the buffer pointer needed when complete */ + p2encoder_state->packet_ptr = ptr; + + /* update packet flags once the completed */ + p2encoder_state->p2packet_flags = ptr; + p2encoder_state->packet_flags = 0; + + /* completed packet length */ + p2encoder_state->packet_length = 0; + + p2encoder_state->p2message_block_length = NULL; + p2encoder_state->message_block_length = 0; + p2encoder_state->message_block_flags = 0; + + p2encoder_state->p2tlv_block_length = NULL; + p2encoder_state->tlv_block_length = 0; + + /* set packet open for business */ + p2encoder_state->state_flags = ENCODER_STATE_PACKET; + //printf("state=0x%0x \n", p2encoder_state->state_flags); + + return (p2encoder_state); +} + + +/** + * NAME + * rfc5444_encoder_packet_add_sequence_number + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_packet_add_sequence_number( + * rfc5444_encoder_state_t *p2encoder_state, + * uint16_t sequence_number) + * + * DESCRIPTION + * This function is used to insert the packet sequence number + * into the packet header when it is desired. The phasseqnum + * flag is set. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * sequence_number - The sequence number to be added to the + * packet. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_packet_add_sequence_number ( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t sequence_number) +{ + boolean_t verbose = FALSE; + + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + if (p2encoder_state->state_flags != ENCODER_STATE_PACKET) { + /* packet must be open */ + return (RC_RFC5444_STATE_ERROR); + } + + if (verbose) { + RFC5444_DEBUG("%s-%u sequence number %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + sequence_number); + } + + NETWORK_ORDER_PUTSHORT(p2encoder_state->buildit_ptr, + sequence_number); + p2encoder_state->buildit_ptr += sizeof(uint16_t); + + /* set the phasseqnum flag */ + p2encoder_state->packet_flags |= PHASSEQNUM; + + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_packet_end + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_packet_end( + * rfc5444_encoder_state_t *p2encoder_state) + * + * DESCRIPTION + * This function is used after all messages and TLVs have been + * added to the packet to complete the packet formatting, + * making the packet ready for transmission. The final packet + * length is computed and all arears are set. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_packet_end ( + rfc5444_encoder_state_t *p2encoder_state) +{ + uint16_t length; + boolean_t verbose = FALSE; + + if (!p2encoder_state) { + if (verbose) { + RFC5444_DEBUG("%s-%u Error: encoder null \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + return (RC_RFC5444_NULL_POINTER); + } + + /* compute the final packet length */ + length = p2encoder_state->buildit_ptr - + p2encoder_state->packet_ptr; + p2encoder_state->packet_length = length; + if (verbose) { + RFC5444_DEBUG("%s-%u packet length=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + length); + } + + +// printf("\n Finding total length of packet::::%d ", +// p2encoder_state->packet_length); + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_free + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_free( + * rfc5444_encoder_state_t *p2encoder_state) + * + * DESCRIPTION + * This function is used to release all resources associated with + * the encoder state. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable to be freed. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents and resources are freed + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_free (rfc5444_encoder_state_t *p2encoder_state) +{ + + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + if (p2encoder_state->packet_ptr) { + free(p2encoder_state->packet_ptr); + p2encoder_state->packet_ptr = NULL; + } + free(p2encoder_state); + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_signal_block_start + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_signal_block_start( + * rfc5444_encoder_state_t *p2encoder_state, + * uint16_t message_code) + * + * DESCRIPTION + * This function is used to append a new message + * to the packet being formatted. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * message_code - The code of the message to be appended. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_signal_block_start ( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t message_code, uint32_t dlep_signal_flags) +{ + + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + // p2encoder_state->message_block_base = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTLONG(p2encoder_state->buildit_ptr, dlep_signal_flags); + p2encoder_state->buildit_ptr += sizeof(uint32_t); + + NETWORK_ORDER_PUTSHORT(p2encoder_state->buildit_ptr, message_code); +// printf(" Added message code =%d",message_code); + p2encoder_state->buildit_ptr += sizeof(uint16_t); + + p2encoder_state->p2message_block_length = p2encoder_state->buildit_ptr; + + p2encoder_state->message_block_length = 0; + NETWORK_ORDER_PUTSHORT(p2encoder_state->buildit_ptr, 0); + p2encoder_state->buildit_ptr += sizeof(uint16_t); + + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_message_block_start + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_message_block_start( + * rfc5444_encoder_state_t *p2encoder_state, + * uint16_t message_code) + * + * DESCRIPTION + * This function is used to append a new message + * to the packet being formatted. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * message_code - The code of the message to be appended. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_message_block_start ( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t message_code) +{ + + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + // p2encoder_state->message_block_base = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(p2encoder_state->buildit_ptr, message_code); +// printf(" Added message code =%d",message_code); + p2encoder_state->buildit_ptr += sizeof(uint16_t); + + p2encoder_state->p2message_block_length = p2encoder_state->buildit_ptr; + + p2encoder_state->message_block_length = 0; + NETWORK_ORDER_PUTSHORT(p2encoder_state->buildit_ptr, 0); + p2encoder_state->buildit_ptr += sizeof(uint16_t); + + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_message_block_add_sequence_number + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_message_block_add_sequence_number( + * rfc5444_encoder_state_t *p2encoder_state, + * uint16_t sequence_number) + * + * DESCRIPTION + * This function is used to insert the message sequence number + * into the message header when it is desired. The mhasseqnum + * flag is set. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * sequence_number - The sequence number to be inserted. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_message_block_add_sequence_number ( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t sequence_number) +{ + boolean_t verbose = FALSE; + + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + if (!(p2encoder_state->state_flags & ENCODER_STATE_MESSAGE)) { + /* message block is not open */ + return (RC_RFC5444_STATE_ERROR); + } + + if (verbose) { + RFC5444_DEBUG("%s-%u sequence number %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + sequence_number); + } + + NETWORK_ORDER_PUTSHORT(p2encoder_state->buildit_ptr, sequence_number); + p2encoder_state->buildit_ptr += sizeof(uint16_t); + + /* set the mhasseqnum flag */ + p2encoder_state->message_block_flags |= MHASSEQNUM; + + return(RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_message_block_end + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_message_block_end( + * rfc5444_encoder_state_t *p2encoder_state) + * + * DESCRIPTION + * This function is used after all parameters have been + * added to the message to complete the message formatting. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_message_block_end ( + rfc5444_encoder_state_t *p2encoder_state) +{ + uint16_t length; + boolean_t verbose = FALSE; + + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + length = p2encoder_state->buildit_ptr - + p2encoder_state->p2message_block_length - sizeof(uint16_t); +// printf(" \n Adding total TLV length %d",length); + + // need not keep + p2encoder_state->message_block_length = length; + + /* go back to update the message block length */ + NETWORK_ORDER_PUTSHORT(p2encoder_state->p2message_block_length, length); + + if (verbose) { + printf("%s-%u message block size=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + length); + } + + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_tlv_block_start + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_tlv_block_start( + * rfc5444_encoder_state_t *p2encoder_state, + * uint32_t block_indicator) + * + * DESCRIPTION + * This function is used to open a new TLV block in the + * packet header or the message body. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * block_indicator - This enum indicates where the TLV + * block is being appended: + * RFC5444_TLV_BLOCK_CONTEXT_PACKET + * RFC5444_TLV_BLOCK_CONTEXT_MESSAGE + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_tlv_block_start ( + rfc5444_encoder_state_t *p2encoder_state, + uint32_t block_indicator) +{ + boolean_t verbose = FALSE; + + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + if (p2encoder_state->state_flags & ENCODER_STATE_TLV) { + /* TLV block already open */ + return (RC_RFC5444_STATE_ERROR); + } + + /* set the packet header TLV present bit */ + if (block_indicator == RFC5444_TLV_BLOCK_CONTEXT_PACKET) { + if (p2encoder_state->state_flags == ENCODER_STATE_PACKET) { + p2encoder_state->packet_flags |= PHASTLV; + } else { + return (RC_RFC5444_STATE_ERROR); + } + + } else if (block_indicator == RFC5444_TLV_BLOCK_CONTEXT_MESSAGE) { + if (p2encoder_state->state_flags & ENCODER_STATE_MESSAGE) { + /* do nothing */ + } else { + return (RC_RFC5444_STATE_ERROR); + } + } else { + return (RC_RFC5444_INVALID_BLOCK_INDICATOR); + } + + if (verbose) { + RFC5444_DEBUG("%s-%u adding %s TLV block \n", + DEBUG_FUNCTION, + DEBUG_LINE, + ((block_indicator == RFC5444_TLV_BLOCK_CONTEXT_PACKET) ? + "packet" : "message") ); + } + + /* save the ptr to update the TLV block length */ + p2encoder_state->p2tlv_block_length = p2encoder_state->buildit_ptr; + + p2encoder_state->tlv_block_length = 0; + NETWORK_ORDER_PUTSHORT(p2encoder_state->buildit_ptr, 0); + p2encoder_state->buildit_ptr += sizeof(uint16_t); + + /* mark the TLV block open */ + p2encoder_state->state_flags |= ENCODER_STATE_TLV; + + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_tlv_block_end + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_tlv_block_end( + * rfc5444_encoder_state_t *p2encoder_state) + * + * DESCRIPTION + * This function must be used to close a TLV block. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_tlv_block_end ( + rfc5444_encoder_state_t *p2encoder_state) +{ + uint16_t length; + boolean_t verbose = FALSE; + + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + if (!(p2encoder_state->state_flags & ENCODER_STATE_TLV)) { + /* tlv block not open */ + return (RC_RFC5444_STATE_ERROR); + } + + /* compute the final packet length, accounting for the length itself */ + length = p2encoder_state->buildit_ptr - + p2encoder_state->p2tlv_block_length - sizeof(uint16_t); + p2encoder_state->tlv_block_length = length; + + /* go back to update the TLV block length */ + NETWORK_ORDER_PUTSHORT(p2encoder_state->p2tlv_block_length, length); + + if (verbose) { + RFC5444_DEBUG("%s-%u tlv block size=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + length); + } + + p2encoder_state->state_flags &= ~ENCODER_STATE_TLV; + + return (RC_RFC5444_OK); +} + + diff --git a/dlep_radio_ipv4/rfc5444_encoder.h b/dlep_radio_ipv4/rfc5444_encoder.h new file mode 100644 index 0000000..0d6d6cc --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_encoder.h @@ -0,0 +1,129 @@ +/*------------------------------------------------------------------ + * rfc5444_encoder.h -- RFC5444 message encoding routines + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef ___RFC5444_ENCODER__ +#define ___RFC5444_ENCODER__ + +#include "safe_types.h" +#include "rfc5444_types.h" + + +#define RFC5444_TLV_BLOCK_CONTEXT_PACKET ( 3 ) +#define RFC5444_TLV_BLOCK_CONTEXT_MESSAGE ( 5 ) + + +/* + * This is the structure type used to manage the encoding of + * the packet-message and TLVs. + */ +typedef struct { + uint32_t *dlep_sig_flags; + + uint32_t state_flags; + + uint8_t *buildit_ptr; + + uint8_t *packet_ptr; + + uint8_t *p2packet_flags; + uint8_t packet_flags; + + uint16_t packet_length; + + uint8_t *message_block_base; + uint8_t *p2message_block_flags; + uint8_t message_block_flags; + + uint8_t *p2message_block_length; + uint16_t message_block_length; + + uint8_t *tlv_block_base; + uint8_t *p2tlv_block_length; + uint8_t tlv_block_length; + +} rfc5444_encoder_state_t; + + + + +extern rfc5444_encoder_state_t +*rfc5444_encoder_packet_start(void); + + +extern rfc5444_rc_t +rfc5444_encoder_packet_add_sequence_number( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t sequence_number); + + +extern rfc5444_rc_t +rfc5444_encoder_packet_end( + rfc5444_encoder_state_t *p2encoder_state); + + +extern rfc5444_rc_t +rfc5444_encoder_free(rfc5444_encoder_state_t *p2encoder_state); + + +extern rfc5444_rc_t +rfc5444_encoder_message_block_start( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t message_code); + +extern rfc5444_rc_t +rfc5444_encoder_signal_block_start ( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t message_code, uint32_t dlep_signal_flags); + + +extern rfc5444_rc_t +rfc5444_encoder_message_block_add_sequence_number( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t sequence_number); + + +extern rfc5444_rc_t +rfc5444_encoder_message_block_end( + rfc5444_encoder_state_t *p2encoder_state); + + +extern rfc5444_rc_t +rfc5444_encoder_tlv_block_start( + rfc5444_encoder_state_t *p2encoder_state, + uint32_t block_indicator); + + +extern rfc5444_rc_t +rfc5444_encoder_tlv_block_end( + rfc5444_encoder_state_t *p2encoder_state); + + +#endif diff --git a/dlep_radio_ipv4/rfc5444_encoder_tlv.c b/dlep_radio_ipv4/rfc5444_encoder_tlv.c new file mode 100644 index 0000000..64d44de --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_encoder_tlv.c @@ -0,0 +1,1466 @@ +/*---------------------------------------------------------------------- + * rfc5444_encoder_tlv.c -- routines to encode TLVs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "network_order.h" + +#include "rfc5444_types.h" +#include "rfc5444_encoder.h" +#include "rfc5444_encoder_tlv.h" + + +/** + * NAME + * rfc5444_identification_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_identification_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint32_t router_id, + * uint32_t client_id, + * uint8_t heartbeat_interval) + * + * DESCRIPTION + * Call this function to add the indentification TLV + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * router_id - indicates the router ID of the DLEP neighbor, set to + * '0' when unknown. + * + * client_id - indicates the client ID of the DLEP neighbor, set to + * '0' when unknown. + * + * heartbeat_interval - An 8-bit, unsigned value specifiying + * the peer-to-peer heartbeat interval. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | HB Intrvl | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | Router ID | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | Client ID | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ +#define RFC5444_TLV_IDENTIFICATION 255 + uint8_t +*rfc5444_identification_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint32_t router_id, + uint32_t client_id, + uint8_t heartbeat_interval) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IDENTIFICATION); + dest += sizeof(uint8_t); + // if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IDENTIFICATION_FLAGS); + dest += sizeof(uint8_t); + // endif + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IDENTIFICATION_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, heartbeat_interval); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTLONG(dest, router_id); + dest += sizeof(uint32_t); + + NETWORK_ORDER_PUTLONG(dest, client_id); + dest += sizeof(uint32_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/** + * NAME + * rfc5444_version_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_version_tlv(rfc5444_encoder_state_t *p2encoder_state, + * uint16_t version_major, + * uint16_t version_minor) + * + * DESCRIPTION + * Call this function to insert the RFC5444 version TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * version_major - Major version of the client or router protocol. + * + * version_minor - Minor version of the client or router protocol. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | Major Ver | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | Major Ver | Minor Version | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ + uint8_t +*rfc5444_version_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint16_t version_major, + uint16_t version_minor) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_VERSION); + dest += sizeof(uint8_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_VERSION_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_VERSION_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTSHORT(dest, version_major); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, version_minor); + dest += sizeof(uint16_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/* port TLV */ + + uint8_t +*rfc5444_port_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint16_t port) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_PORT); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_PORT_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTSHORT(dest, port); + dest += sizeof(uint16_t); + + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/* CREDIT WINDOW STATUS TLV */ + uint8_t +*rfc5444_credit_window_status_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t mrw, uint64_t rrw) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_CREDIT_WINDOW_STATUS); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_CREDIT_WINDOW_STATUS_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTLLONG(dest, mrw); + dest += sizeof(uint64_t); + + NETWORK_ORDER_PUTLLONG(dest, rrw); + dest += sizeof(uint64_t); + + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/* CREDIT GRAND REQUEST */ + + uint8_t +*rfc5444_credit_grand_request_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t cgr) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest,RFC5444_TLV_CREDIT_GRANT ); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_CREDIT_GRANT_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTLLONG(dest, cgr); + dest += sizeof(uint64_t); + + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/* CREDIT REQUEST */ + uint8_t +*rfc5444_credit_request_tlv(rfc5444_encoder_state_t *p2encoder_state) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest,RFC5444_TLV_CREDIT_REQUEST); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_CREDIT_REQUEST_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, 0); + dest += sizeof(uint8_t); + + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/* TLV_HEATBEAT_INTERVAL */ + + +uint8_t +*rfc5444_heartbeat_interval_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t hbt) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest,RFC5444_TLV_HEARTBEAT_INTERVAL); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_HEARTBEAT_INTERVAL_LENGTH); + dest += sizeof(uint16_t); + /* convert to milliseconds */ + hbt = hbt * 1000; + + NETWORK_ORDER_PUTLONG(dest, hbt); + dest += sizeof(uint32_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + + +/** + * NAME + * rfc5444_peer_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_peer_tlv(rfc5444_encoder_state_t *p2encoder_state, + * char *peer_type_string) + * + * DESCRIPTION + * Call this function to add the return code TLV + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * peer_type_string - non-NULL terminated string + * identifier. <= 80 characters. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | Peer Type | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | Peer Type String (non-NULL terminated) + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-.... + * + */ + uint8_t +*rfc5444_peer_tlv(rfc5444_encoder_state_t *p2encoder_state, + char *peer_type_string) +{ + uint8_t *ptr; + uint8_t length; + uint8_t *dest; + uint32_t i; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_PEER_TYPE); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_PEER_TYPE_FLAGS); + dest += sizeof(uint8_t); +#endif + ptr = dest; + NETWORK_ORDER_PUTSHORT(dest, 1); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_PEER_TYPE_FLAGS); + dest += sizeof(uint8_t); + + length = 1; + for (i=0; (*peer_type_string) && ibuildit_ptr = dest; + return (dest); +} + + +/** + * NAME + * rfc5444_mac_address_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_mac_address_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t mac_address[]) + * + * DESCRIPTION + * Call this function to insert the remote MAC address TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * mac_address - the remote router MAC address. The MAC + * is used to uniquely address all neighbor messages. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | MAC Addr | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | Remote Router MAC Continued (32-bit) | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | MAC Addr | + * +-+-+-+-+-+-+-+-+ + * + */ + uint8_t +*rfc5444_mac_address_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t mac_address[]) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MAC_ADDRESS); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_MAC_ADDRESS_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MAC_ADDRESS_LENGTH); + dest += sizeof(uint16_t); + + dest = mac_put_address(dest, mac_address); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/** + * NAME + * rfc5444_ipv4_address_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_ipv4_address_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t operation, + * ipv4_address_t ipv4) + * + * DESCRIPTION + * Call this function to insert the IPv4 TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * operation - indicates the operation to be applied + * on the IPv4 address + * RFC5444_EXISTING_NEW_ADDRESS + * RFC5444_WITHDRAW_ADDRESS + * + * ipv4 - the address + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | operation | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | IPv4 Address | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ +uint8_t +*rfc5444_ipv4_address_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv4_address_t *ipv4) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_IPV4_ADDRESS); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV4_ADDRESS_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, (RFC5444_TLV_IPV4_ADDRESS_LENGTH)); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, operation); + dest += sizeof(uint8_t); + + dest = ipv4_put_address(dest, ipv4); + + /* NETWORK_ORDER_PUTBYTE(dest, 24); + dest += sizeof(uint8_t); */ + + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/** + * NAME + * rfc5444_ipv6_address_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_ipv6_address_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t operation, + * ipv6_address_t *ipv6_addr) + * + * DESCRIPTION + * Call this function to insert the IPv4 TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * operation - indicates the operation to be applied + * on the IPv4 address + * RFC5444_EXISTING_NEW_ADDRESS + * RFC5444_WITHDRAW_ADDRESS + * + * ipv6_addr - the address + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | operation | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | IPv6 Address | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | IPv6 Address | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 12 | IPv6 Address | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 16 | IPv6 Address | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ + uint8_t +*rfc5444_ipv6_address_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv6_address_t *ipv6_addr) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_IPV6_ADDRESS); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV6_ADDRESS_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, (RFC5444_TLV_IPV6_ADDRESS_LENGTH)); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, operation); + dest += sizeof(uint8_t); + + dest = ipv6_put_address(dest, ipv6_addr); + + /* NETWORK_ORDER_PUTBYTE(dest, 64); + dest += sizeof(uint8_t); */ + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/** + * NAME + * rfc5444_link_metric_mdr_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_mdr_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint64_t mdr) + * + * DESCRIPTION + * Call this function to insert the maximum datarate TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * mdr - the maximum theoretical data rate, in bits per + * second (bps), achieved on the link. When + * metrics are reported, the maximum data rate + * MUST be reported. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | MDR | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | MDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | MDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + */ + uint8_t +*rfc5444_link_metric_mdr_tx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t mdr) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_MDR_METRIC_TX); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_MDR_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_MDR_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, mdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + uint8_t +*rfc5444_link_metric_mdr_rx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t mdr) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_MDR_METRIC_RX); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_MDR_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_MDR_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, mdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + + +/** + * NAME + * rfc5444_link_metric_cdr_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_cdr_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint64_t cdr) + * + * DESCRIPTION + * Call this function to insert the current datarate TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * cdr - the current data rate, in bits per second + * (bps), achieved on the link. If there is no + * distinction between maximum and current + * data rate, current data rate SHOULD be set + * equal to the maximum data rate. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | CDR | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | CDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | CDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + */ +uint8_t +*rfc5444_link_metric_cdr_tx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t cdr) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_CDR_METRIC_TX); + dest += sizeof(uint16_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_CDR_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_CDR_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, cdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +uint8_t +*rfc5444_link_metric_latency_tlv1 (rfc5444_encoder_state_t *p2encoder_state, + uint64_t latency) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_LATENCY_METRIC); + dest += sizeof(uint16_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_CDR_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_LATENCY_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, latency); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); + +} + +uint8_t +*rfc5444_link_metric_cdr_rx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t cdr) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_CDR_METRIC_RX); + dest += sizeof(uint16_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_CDR_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_CDR_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, cdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} +/** + * NAME + * rfc5444_link_metric_latency_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_latency_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint64_t latency) + * + * DESCRIPTION + * Call this function to insert the latency TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * latency - the transmission delay that a packet + * encounters as it is transmitted over the link. + * This is reported in absolute delay, in + * milliseconds. If latency cannot be calculated, + * a value of 0 should be reported. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | Latency | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | Latency | + * +-+-+-+-+-+-+-+-+ + * + */ +uint8_t +*rfc5444_link_metric_latency_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t latency) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_LATENCY_METRIC); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_LATENCY_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_LATENCY_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLONG(dest, latency); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/** + * NAME + * rfc5444_link_metric_resources_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t resources) + * + * DESCRIPTION + * Call this function to insert the resources TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * resources - a percentage, 0-100, representing the amount + * of remaining resources, such as battery power. + * If resources cannot be calculated, a value of + * 100 should be reported. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | Resources | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + */ +uint8_t +*rfc5444_link_metric_resources_tx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_RESOURCES_METRIC_TX); + dest += sizeof(uint8_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, resources); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +uint8_t +*rfc5444_link_metric_resources_rx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_RESOURCES_METRIC_RX); + dest += sizeof(uint8_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, resources); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +uint8_t +*rfc5444_link_metric_resources_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_RESOURCES_METRIC); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, resources); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} +/** + * NAME + * rfc5444_link_metric_rlq_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_rq_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t rlq) + * + * DESCRIPTION + * Call this function to insert the RLQ TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * rlq - a non-dimensional number, 0-100, representing + * the relative link quality. A value of 100 + * represents a link of the highest quality. If + * the RLQ cannot be calculated, a value of 100 + * should be reported. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | RLQ | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + */ +uint8_t +*rfc5444_link_metric_rlq_tx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t rlq) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_RLQ_METRIC_TX); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RLQ_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_RLQ_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, rlq); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +uint8_t +*rfc5444_link_metric_rlq_rx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t rlq) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_RLQ_METRIC_RX); + dest += sizeof(uint16_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RLQ_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_RLQ_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, rlq); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} +/* + * MTU + */ +uint8_t +*rfc5444_mtu_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint16_t mtu) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MTU); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MTU_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, mtu); + dest += sizeof(uint16_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/* + * eft + */ +uint8_t +*rfc5444_link_metric_eft_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint32_t eft) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_EFT_METRIC); + dest += sizeof(uint8_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RLQ_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_EFT_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTLONG(dest, eft); + dest += sizeof(uint32_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/** + * NAME + * rfc5444_status_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_status_tlv(rfc5444_encoder_state_t *p2encoder_state, + * uint8_t status_code) + * + * DESCRIPTION + * Call this function to insert the peer status TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * status_code - protocol status code reflecting success + * of previous request + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | Status Code | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ +uint8_t +*rfc5444_status_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t status_code) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_STATUS); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_STATUS_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_STATUS_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, status_code); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/* Below TLV functions are added for DLEPv7 */ + +uint8_t +*rfc5444_ipv4_attached_subnet_tlv (rfc5444_encoder_state_t *p2encoder_state, uint8_t operation) + +{ + uint8_t *dest; + char subnet[16]; + char local_ipv4_dot[IPV4_ADDR_STRING_LEN] = "255.255.255.0"; + ipv4_address_t ipv4_subnet_addr; + + ipv4_dot_decimal2digits(&ipv4_subnet_addr, local_ipv4_dot); + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_IPV4_ATTACHED_SUBNET); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, (RFC5444_TLV_IPV4_ATTACHED_SUBNET_LENGTH)); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, operation); + dest += sizeof(uint8_t); + + dest = ipv4_put_address(dest, &ipv4_subnet_addr); + + NETWORK_ORDER_PUTBYTE(dest, 24); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + + uint8_t +*rfc5444_ipv6_attached_subnet_tlv (rfc5444_encoder_state_t *p2encoder_state, + ipv6_address_t *ipv6_subnet_addr) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV6_ADDRESS); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, (RFC5444_TLV_IPV6_ATTACHED_SUBNET_LENGTH)); + dest += sizeof(uint8_t); + + dest = ipv6_put_address(dest, ipv6_subnet_addr); + + NETWORK_ORDER_PUTBYTE(dest, 64); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/* Suriya added for testing purpose */ + + uint8_t +*rfc5444_ipv6_subnet_tlv (rfc5444_encoder_state_t *p2encoder_state,uint8_t operation, +uint8_t subnet,ipv6_address_t *ipv6_subnet_addr) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_IPV6_ATTACHED_SUBNET); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, (RFC5444_TLV_IPV6_ATTACHED_SUBNET_LENGTH)); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, operation); + dest += sizeof(uint8_t); + + dest = ipv6_put_address(dest, ipv6_subnet_addr); + + NETWORK_ORDER_PUTBYTE(dest, subnet); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + + uint8_t +*rfc5444_optinal_signal_supported_tlv (rfc5444_encoder_state_t *p2encoder_state) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED_LENGTH); + dest += sizeof(uint8_t); + + /* Reserved bit */ + NETWORK_ORDER_PUTBYTE(dest, 0x00); + dest += sizeof(uint8_t); + NETWORK_ORDER_PUTBYTE(dest, 0x00); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_MSG_PEER_UPDATE_RES); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest,RFC5444_MSG_PEER_UPDATE_REQ); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_MSG_LINK_CHAR_RES); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest,RFC5444_MSG_LINK_CHAR_REQ); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +uint8_t +*rfc5444_optinal_data_item_supported_tlv (rfc5444_encoder_state_t *p2encoder_state) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED_LENGTH); + dest += sizeof(uint8_t); + + /* Reserved bit */ + NETWORK_ORDER_PUTBYTE(dest, 0x00); + dest += sizeof(uint8_t); + NETWORK_ORDER_PUTBYTE(dest, 0x00); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_RESOURCES_METRIC_RX); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_RESOURCES_METRIC_TX); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_RLQ_METRIC_TX); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_RLQ_METRIC_RX); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_CREDIT_WINDOW_STATUS); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_CREDIT_GRANT); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_CREDIT_REQUEST); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_VENDOR_EXTENSION); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV4_ATTACHED_SUBNET); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV6_ATTACHED_SUBNET); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + uint8_t +*rfc5444_vendor_extension_tlv (rfc5444_encoder_state_t *p2encoder_state) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_VENDOR_EXTENSION); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_VENDOR_EXTENSION_LENGTH); + dest += sizeof(uint8_t); + + /* Reserved bit */ + NETWORK_ORDER_PUTBYTE(dest, 0x00); + dest += sizeof(uint8_t); + NETWORK_ORDER_PUTBYTE(dest, 0x00); + dest += sizeof(uint8_t); + NETWORK_ORDER_PUTBYTE(dest, 0x00); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, VENDOR_OUI_LENGTH); + dest += sizeof(uint8_t); + +/* Vendor OUI */ + NETWORK_ORDER_PUTBYTE(dest, 0xAB); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, 0xBC); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, 0xCD); + dest += sizeof(uint8_t); + +/* Device type*/ + NETWORK_ORDER_PUTSHORT(dest, 0xBABE); + dest += sizeof(uint16_t); + +/*PAYLOAD in TLV format*/ + NETWORK_ORDER_PUTBYTE(dest, VENDOR_SPECIFIC_PAYLOAD_TYPE); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, VENDOR_SPECIFIC_PAYLOAD_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, 0xEF); + dest += sizeof(uint8_t); + NETWORK_ORDER_PUTBYTE(dest, 0xDC); + dest += sizeof(uint8_t); + NETWORK_ORDER_PUTBYTE(dest, 0xBA); + dest += sizeof(uint8_t); + NETWORK_ORDER_PUTBYTE(dest, 0xBD); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} +/* + * ipv4 connection point tlv + * + */ +uint8_t +*rfc5444_ipv4_connection_point_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint16_t port, + ipv4_address_t *ipv4) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_IPV4_CONNECTION_POINT); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, (RFC5444_TLV_IPV4_CONNECTION_POINT_LENGTH)); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV4_CONNECTION_POINT_FLAGS); + dest += sizeof(uint8_t); + + dest = ipv4_put_address(dest, ipv4); + + NETWORK_ORDER_PUTSHORT(dest, port); + dest += sizeof(uint16_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + diff --git a/dlep_radio_ipv4/rfc5444_encoder_tlv.h b/dlep_radio_ipv4/rfc5444_encoder_tlv.h new file mode 100644 index 0000000..c82c7b6 --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_encoder_tlv.h @@ -0,0 +1,193 @@ +/*---------------------------------------------------------------------- + * rfc5444_encoder_tlv.h -- routine prototypes to encode TLVs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __RFC5444_ENCODER_TLV_H__ +#define __RFC5444_ENCODER_TLV_H__ + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_encoder.h" + + + +extern uint8_t +*rfc5444_identification_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t router_id, + uint32_t client_id, + uint8_t heartbeat_interval); + +extern uint8_t +*rfc5444_version_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint16_t version_major, + uint16_t version_minor); + + +extern uint8_t +*rfc5444_peer_tlv(rfc5444_encoder_state_t *p2encoder_state, + char *peer_type_string); + + +extern uint8_t +*rfc5444_mac_address_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t mac_address[]); + + +extern uint8_t +*rfc5444_ipv4_address_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv4_address_t *ipv4); + +extern uint8_t +*rfc5444_ipv6_address_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv6_address_t *ipv6_dest_addr); + + +extern uint8_t +*rfc5444_link_metric_mdr_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t mdr); + +extern uint8_t +*rfc5444_link_metric_mdr_rx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t mdr); + +extern uint8_t +*rfc5444_link_metric_cdr_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t cdr); +extern uint8_t +*rfc5444_link_metric_latency_tlv1(rfc5444_encoder_state_t *p2encoder_state, + uint64_t latency); + +extern uint8_t +*rfc5444_link_metric_cdr_rx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t cdr); + +extern uint8_t +*rfc5444_link_metric_latency_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t latency); + +extern uint8_t +*rfc5444_link_metric_resources_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources); + +extern uint8_t +*rfc5444_link_metric_resources_rx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources); + +extern uint8_t +*rfc5444_link_metric_rlq_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t rlq); + +extern uint8_t +*rfc5444_link_metric_rlq_rx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t rlq); + +extern uint8_t +*rfc5444_link_metric_eft_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint32_t eft); + + +extern uint8_t +*rfc5444_status_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t termination_code); + + +extern uint8_t +*rfc5444_datarate_request_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t requested_cdr); + + +extern uint8_t +*rfc5444_datarate_request_ack_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t requested_cdr, + uint32_t granted_cdr); +extern uint8_t +*rfc5444_port_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint16_t port); +extern uint8_t +*rfc5444_credit_window_status_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t mrw, uint64_t rrw); +extern uint8_t +*rfc5444_credit_grand_request_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t cgr); +extern uint8_t +*rfc5444_credit_request_tlv(rfc5444_encoder_state_t *p2encoder_state); + +extern uint8_t +*rfc5444_heartbeat_interval_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t hbt); + + +/* Below TLV functions are added for DLEPv7 */ + +extern uint8_t +*rfc5444_ipv4_attached_subnet_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation); + +extern uint8_t +*rfc5444_ipv6_attached_subnet_tlv (rfc5444_encoder_state_t *p2encoder_state, + ipv6_address_t *ipv6_subnet); + +extern uint8_t +*rfc5444_ipv6_subnet_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, uint8_t subnet, + ipv6_address_t *ipv6_subnet_addr); + +/* Below TLV functions are added for DLEPv27 */ +extern uint8_t +*rfc5444_link_metric_resources_rx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources); + +extern uint8_t +*rfc5444_mtu_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint16_t mtu); + +extern uint8_t +*rfc5444_ipv4_connection_point_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint16_t port, + ipv4_address_t *ipv4); + +extern uint8_t +*rfc5444_optinal_signal_supported_tlv (rfc5444_encoder_state_t *p2encoder_state); + +extern uint8_t +*rfc5444_optinal_data_item_supported_tlv (rfc5444_encoder_state_t *p2encoder_state); + +extern uint8_t +*rfc5444_vendor_extension_tlv (rfc5444_encoder_state_t *p2encoder_state); + + +#endif + + diff --git a/dlep_radio_ipv4/rfc5444_experimental_tlv.c b/dlep_radio_ipv4/rfc5444_experimental_tlv.c new file mode 100644 index 0000000..6b25497 --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_experimental_tlv.c @@ -0,0 +1,261 @@ +/*------------------------------------------------------------------ + * rfc5444_experimental_tlv.c -- routines for standard TLVs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include + +#include "safe_types.h" +#include "network_order.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" +#include "rfc5444_decoder.h" + +#include "rfc5444_experimental_tlv.h" + + + +#define RFC5444_TLV_EXPER_8 ( 253 ) +#define RFC5444_TLV_EXPER_8_LENGTH ( 4 ) + +#define RFC5444_TLV_EXPER_16 ( 254 ) +#define RFC5444_TLV_EXPER_16_LENGTH ( 4 ) + + +#define RFC5444_DEBUG printf +#define DEBUG_FUNCTION __FUNCTION__ +#define DEBUG_LINE __LINE__ + + + +/* + * RFC 5444 defines TLVs as + * + * := + * + * ? + * (?)? + * (?)? + * + * This is referred to as the T-F-L-V format. The + * field is used to describe the length field size, 8-bits + * or 16-bits as well as the presence of the value or not. + * + * The standard TLV encoding does not specify the + * field. The flag field is not needed as the tlv_code itself + * describes the value by definition of the code itself. + * http://en.wikipedia.org/wiki/Type-length-value + * + * This file experiments with the standard TLV format + * in RFC5444 formatting. It is also a good test for + * the decoder. + */ + +/* + * Experimental 8-bit length + */ +uint8_t +*rfc5444_exper_8_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint32_t parameter) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_EXPER_8); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_EXPER_8_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTLONG(dest, parameter); + dest += sizeof(uint32_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/* + * Experimental 16-bit length + */ +uint8_t +*rfc5444_exper_16_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint32_t parameter) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_EXPER_16); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_EXPER_16_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLONG(dest, parameter); + dest += sizeof(uint32_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/* + * Experimental 8-bit length field decoder + */ +static rfc5444_rc_t +rfc5444_decoder_exper_8_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *scratch_pad, + boolean_t verbose) +{ + uint8_t tlv_length; + uint32_t parameter; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->tlv_block_length -= sizeof(uint8_t); + + if (tlv_length != RFC5444_TLV_EXPER_8_LENGTH) { + if (verbose) { + RFC5444_DEBUG("%s-%u ERROR: invalid length tlv_code=%u " + "len=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + tlv_code, + tlv_length); + } + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, parameter); + p2decoder_state->parse_ptr += sizeof(uint32_t); + p2decoder_state->tlv_block_length -= sizeof(uint32_t); + + if (verbose) { + RFC5444_DEBUG("%s-%u %s parameter=0x%0x \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + parameter); + } + return (RC_RFC5444_OK); +} + + +/* + * Experimental 16-bit length field decoder + */ +static rfc5444_rc_t +rfc5444_decoder_exper_16_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *scratch_pad, + boolean_t verbose) +{ + uint16_t tlv_length; + uint32_t parameter; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->tlv_block_length -= sizeof(uint16_t); + + if (tlv_length != RFC5444_TLV_EXPER_16_LENGTH) { + if (verbose) { + RFC5444_DEBUG("%s-%u ERROR: invalid length tlv_code=%u " + "len=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + tlv_code, + tlv_length); + } + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, parameter); + p2decoder_state->parse_ptr += sizeof(uint32_t); + p2decoder_state->tlv_block_length -= sizeof(uint32_t); + + if (verbose) { + RFC5444_DEBUG("%s-%u %s parameter=0x%0x \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + parameter); + } + return (RC_RFC5444_OK); +} + + +/* + * + * NAME + * rfc5444_experimental_tlv_init + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_experimental_tlv_init(void) + * + * DESCRIPTION + * This function must be called to register the experimental + * TLV decoders. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + *- + */ +rfc5444_rc_t +rfc5444_experimental_tlv_init (void) +{ + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_EXPER_8, + &rfc5444_decoder_exper_8_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_EXPER_16, + &rfc5444_decoder_exper_16_tlv); + + return (RC_RFC5444_OK); +} + + diff --git a/dlep_radio_ipv4/rfc5444_experimental_tlv.h b/dlep_radio_ipv4/rfc5444_experimental_tlv.h new file mode 100644 index 0000000..65a4b32 --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_experimental_tlv.h @@ -0,0 +1,56 @@ +/*------------------------------------------------------------------ + * rfc5444_experimental_tlv.h -- prototypes for stndard TLV APIs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + *------------------------------------------------------------------ + */ + +#ifndef __RFC5444_EXPERIMENTAL_TLV__ +#define __RFC5444_EXPERIMENTAL_TLV__ + +#include "safe_types.h" +#include "rfc5444_types.h" +#include "rfc5444_encoder.h" + + +extern uint8_t +*rfc5444_exper_8_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t parameter); + + +extern uint8_t +*rfc5444_exper_16_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t parameter); + + +extern rfc5444_rc_t +rfc5444_experimental_tlv_init(void); + +#endif + + diff --git a/dlep_radio_ipv4/rfc5444_packet_header.c b/dlep_radio_ipv4/rfc5444_packet_header.c new file mode 100644 index 0000000..e7ce2cb --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_packet_header.c @@ -0,0 +1,177 @@ +/*------------------------------------------------------------------ + * rfc5444_packet_header.c -- + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include + +#include "safe_types.h" +#include "network_order.h" + +#include "rfc5444_packet_header.h" + + + +#define RFC5444_VERSION ( 0 ) + +/* + * This will change when authentication is supported. + */ +#define RFC5444_PACKET_FLAGS ( 2 ) + + +/* + * RFC5444 Control Header + * + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+ + * | | | + * | Vers | Flags | + * | | | + * +-+-+-+-+-+-+-+-+ + * + */ +#define RFC5444_PACKET_HDR_VERSION_MASK ( 0xF0 ) +#define RFC5444_PACKET_HDR_VERSION_SHIFT ( 4 ) + +#define RFC5444_PACKET_HDR_FLAGS_MASK ( 0x0F ) +#define RFC5444_PACKET_HDR_FLAGS_SHIFT ( 0 ) + + + +/** + * NAME + * rfc5444_add_packet_header + * + * SYNOPSIS + * uint8_t + * *rfc5444_add_packet_header(uint8_t *dest) + * + * DESCRIPTION + * Call this function to add the RFC5444 packet header + * when constructing a message. + * + * INPUT PARAMETERS + * dest - pointer to where the RFC5444 header is placed + * + * OUTPUT PARAMETERS + * dest - buffer is modified with the packet header + * + * RETURN VALUES + * Pointer to data area just beyond the newly added + * RFC5444 header. + * + * NOTES + * ASSUME all pointers are valid + */ +uint8_t +*rfc5444_add_packet_header (uint8_t *dest, uint8_t flags) +{ + uint8_t rfc5444_header; + + /* all fields are defaulted to zero */ + rfc5444_header = 0; + + rfc5444_header = (flags & RFC5444_PACKET_HDR_FLAGS_MASK); + + rfc5444_header |= ((RFC5444_VERSION << RFC5444_PACKET_HDR_VERSION_SHIFT) & + RFC5444_PACKET_HDR_VERSION_MASK); + + rfc5444_header |= rfc5444_header; + + NETWORK_ORDER_PUTBYTE(dest, rfc5444_header); + dest += sizeof(uint8_t); + return (dest); +} + + +/** + * NAME + * rfc5444_parse_packet_header + * + * SYNOPSIS + * uint8_t + * *rfc5444_parse_packet_header(uint8_t *msg, + * uint8_t *packet_flags, + * + * DESCRIPTION + * Call this function to extract the RFC5444 packet header + * fields when a message is received. + * + * INPUT PARAMETERS + * msg - pointer to the beginning of the RFC5444 message + * + * rsvrd - pointer to the reserved field + * + * rf0 - pointer to the rf0 flag + * + * OUTPUT PARAMETERS + * rsvrd - updated + * + * rf0 - updated + * + * RETURN VALUES: + * Pointer to data area just beyond the newly parsed + * RFC5444 header. + * NULL if the version is not supported. + * + * NOTES + * ASSUME all pointers are valid + * + */ +uint8_t +*rfc5444_parse_packet_header (uint8_t *msg, + uint8_t *packet_header_flags) +{ + uint8_t rfc5444_packet_header; + uint8_t rfc5444_version; + + *packet_header_flags = 0; + + NETWORK_ORDER_GETBYTE(msg, rfc5444_packet_header); + + rfc5444_version = ((rfc5444_packet_header & + RFC5444_PACKET_HDR_VERSION_MASK) >> + RFC5444_PACKET_HDR_VERSION_SHIFT); + + if (rfc5444_version == RFC5444_VERSION) { + *packet_header_flags = ((rfc5444_packet_header & + RFC5444_PACKET_HDR_FLAGS_MASK) >> + RFC5444_PACKET_HDR_FLAGS_SHIFT); + + msg += sizeof(uint8_t); + } else { + msg = NULL; + } + + return (msg); +} + + diff --git a/dlep_radio_ipv4/rfc5444_packet_header.h b/dlep_radio_ipv4/rfc5444_packet_header.h new file mode 100644 index 0000000..3b1f34a --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_packet_header.h @@ -0,0 +1,49 @@ +/*------------------------------------------------------------------ + * rfc5444_packet_header.h -- + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __RFC5444_PACKET_HEADER_H__ +#define __RFC5444_PACKET_HEADER_H__ + +#include "safe_types.h" + + +extern uint8_t +*rfc5444_add_packet_header(uint8_t *dest, + uint8_t packet_header_flags); + + +extern uint8_t +*rfc5444_parse_packet_header(uint8_t *msg, + uint8_t *packet_header_flags); + + +#endif + diff --git a/dlep_radio_ipv4/rfc5444_scratch_pad.c b/dlep_radio_ipv4/rfc5444_scratch_pad.c new file mode 100644 index 0000000..46acada --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_scratch_pad.c @@ -0,0 +1,381 @@ +/*---------------------------------------------------------------------- + * rfc5444_scratch_pad.c -- Routines to manage parsed data + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" +#include "rfc5444_scratch_pad.h" + + +/** + * NAME + * rfc5444_show_packet_scratch_pad + * + * SYNOPSIS + * #include "rfc5444_scratch_pad.h" + * void + * rfc5444_show_packet_scratch_pad( + * rfc5444_packet_scratch_pad_t *scratch_pad) + * + * DESCRIPTION + * This function is used to display the packet scratch pad + * to facilitate debugging and integration. + * + * INPUT PARAMETERS + * pkt_scratch_pad - This is a pointer to the packet scratch + * pad area + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +rfc5444_show_packet_scratch_pad ( + rfc5444_packet_scratch_pad_t *pkt_scratch_pad) +{ + if (!pkt_scratch_pad) { + return; + } + + printf("\nPacket Scratch Pad \n"); + + if (pkt_scratch_pad->sequence_present) { + printf(" sequence number=%u \n", + pkt_scratch_pad->sequence); + } + + if (pkt_scratch_pad->router_id_present) { + printf(" router id=%u \n", + pkt_scratch_pad->router_id); + } + + if (pkt_scratch_pad->client_id_present) { + printf(" client id=%u \n", + pkt_scratch_pad->client_id); + } + + if (pkt_scratch_pad->peer_heartbeat_interval_present) { + printf(" peer heartbeat interval=%u seconds \n", + pkt_scratch_pad->peer_heartbeat_interval); + } + + return; +} + + +/** + * NAME + * rfc5444_show_message_scratch_pad + * + * SYNOPSIS + * #include "rfc5444_scratch_pad.h" + * void + * rfc5444_show_message_scratch_pad( + * rfc5444_message_scratch_pad_t *scratch_pad) + * + * DESCRIPTION + * This function is used to display the message scratch pad to + * facilitate debugging and ntegration. + * + * INPUT PARAMETERS + * msg_scratch_pad - This is a pointer to the message scratch + * pad area + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +rfc5444_show_message_scratch_pad ( + rfc5444_message_scratch_pad_t *msg_scratch_pad) +{ + if (!msg_scratch_pad) { + return; + } + + printf("Message Scratch Pad \n"); + + printf(" message code=%u %s \n", + msg_scratch_pad->message_code, + rfc5444_message_code2string(msg_scratch_pad->message_code)); + + /* if (msg_scratch_pad->sequence_present) { + printf(" sequence number=%u \n", + msg_scratch_pad->sequence); + } */ + + if (msg_scratch_pad->major_version_present || + msg_scratch_pad->minor_version_present) { + printf(" DLEP version=%u.%u \n", + msg_scratch_pad->major_version, + msg_scratch_pad->minor_version); + } + + if (msg_scratch_pad->status_code_present) { + printf(" status code=%u \n", + msg_scratch_pad->status_code); + } + + if (msg_scratch_pad->mac_address_present) { + mac_print_address(" MAC=", msg_scratch_pad->mac_address); + } + + if (msg_scratch_pad->ipv4_address_present) { + printf(" IPv4 operation=%u \n", + msg_scratch_pad->ipv4_operation); + ipv4_print_address(" IPv4", &msg_scratch_pad->ipv4_address); + } + + if (msg_scratch_pad->ipv6_address_present) { + printf(" IPv6 operation=%u \n", + msg_scratch_pad->ipv6_operation); + ipv6_print_address(" IPv6", &msg_scratch_pad->ipv6_address); + } + + if (msg_scratch_pad->rlq_present) { + printf(" rlq tx=%u percent \n", + msg_scratch_pad->rlq_tx); + + printf(" rlq rx=%u percent \n", + msg_scratch_pad->rlq_rx); + } + + if (msg_scratch_pad->resources_present) { + printf(" resources =%u percent\n", + msg_scratch_pad->resources); + + } + + if (msg_scratch_pad->latency_present) { + printf(" latency=%llu milliseconds \n", + msg_scratch_pad->latency); + } + + if (msg_scratch_pad->cdr_present) { + printf(" cdr tx=%llu bps \n", + msg_scratch_pad->cdr_tx); + + printf(" cdr rx=%llu bps \n", + msg_scratch_pad->cdr_rx); + } + + if (msg_scratch_pad->mdr_present) { + printf(" mdr tx=%llu bps\n", + msg_scratch_pad->mdr_tx); + + printf(" mdr rx=%llu bps\n", + msg_scratch_pad->mdr_rx); + } + + if (msg_scratch_pad->mtu_present) { + printf(" mtu=%u \n", + msg_scratch_pad->mtu); + } + + return; +} + + +/** + * NAME + * rfc5444_scrub_packet_scratch_pad + * + * SYNOPSIS + * #include "rfc5444_scratch_pad.h" + * void + * rfc5444_scrub_packet_scratch_pad( + * rfc5444_packet_scratch_pad_t *pkt_scratch_pad) + * + * DESCRIPTION + * This function is used to scrub the packet scratch pad + * prior to parsing a RFC5444 packet. + * + * INPUT PARAMETERS + * scratch_pad - This is a pointer to the scratch pad area + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +rfc5444_scrub_packet_scratch_pad ( + rfc5444_packet_scratch_pad_t *pkt_scratch_pad) +{ + if (!pkt_scratch_pad) { + return; + } + + pkt_scratch_pad->sequence = 0; + pkt_scratch_pad->sequence_present = FALSE; + + pkt_scratch_pad->router_id = 0; + pkt_scratch_pad->router_id_present = FALSE; + + pkt_scratch_pad->client_id = 0; + pkt_scratch_pad->client_id_present = FALSE; + + pkt_scratch_pad->peer_heartbeat_interval = 0; + pkt_scratch_pad->peer_heartbeat_interval_present = FALSE; + + return; +} + +#if 0 +/* Below two init functions are added for DLEPv7 */ +static uint32_t init_optional_signal(void) { + + uint32_t opt_signal = 0; + + opt_signal |= (~(~0 << (RFC5444_MAX_MESSAGE_CODE - 1))); + + opt_signal &= (~(1 << RFC5444_MSG_PEER_UPDATE_RES)); + opt_signal &= (~(1 << RFC5444_MSG_LINK_CHAR_RES)); + + return opt_signal; +} + +static uint32_t init_optional_data_item(void) { + + uint32_t opt_data = 0; + + opt_data |= (~(~0 << (RFC5444_MAX_DATA_ITEM - 1))); + + opt_data &= (~(1 << RFC5444_TLV_LINK_RESOURCES_METRIC_RX)); + opt_data &= (~(1 << RFC5444_TLV_LINK_RESOURCES_METRIC_TX)); + opt_data &= (~(1 << RFC5444_TLV_CREDIT_WINDOW_STATUS)); + opt_data &= (~(1 << RFC5444_TLV_CREDIT_GRANT)); + opt_data &= (~(1 << RFC5444_TLV_CREDIT_REQUEST)); + opt_data &= (~(1 << RFC5444_TLV_VENDOR_EXTENSION)); + opt_data &= (~(1 << RFC5444_TLV_IPV4_ATTACHED_SUBNET)); + opt_data &= (~(1 << RFC5444_TLV_IPV6_ATTACHED_SUBNET)); + + return opt_data; +} +#endif +/** + * NAME + * rfc5444_scrub_message_scratch_pad + * + * SYNOPSIS + * #include "rfc5444_scratch_pad.h" + * void + * rfc5444_scrub_message_scratch_pad( + * rfc5444_message_scratch_pad_t *msg_scratch_pad) + * + * DESCRIPTION + * This function is used to scrub the message scratch pad + * prior to parsing a RFC5444 message. + * + * INPUT PARAMETERS + * scratch_pad - This is a pointer to the scratch pad area + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +rfc5444_scrub_message_scratch_pad ( + rfc5444_message_scratch_pad_t *msg_scratch_pad) +{ + if (!msg_scratch_pad) { + return; + } + + msg_scratch_pad->message_code = 0; + + msg_scratch_pad->major_version = 0; + msg_scratch_pad->major_version_present = FALSE; + + msg_scratch_pad->minor_version = 0; + msg_scratch_pad->minor_version_present = FALSE; + + msg_scratch_pad->sequence = 0; + msg_scratch_pad->sequence_present = FALSE; + + msg_scratch_pad->status_code = 0; + msg_scratch_pad->status_code_present = 0; + + mac_zero_address(msg_scratch_pad->mac_address); + msg_scratch_pad->mac_address_present = FALSE; + + ipv4_zero_address(&msg_scratch_pad->ipv4_address); + msg_scratch_pad->ipv4_address_present = FALSE; + + ipv6_zero_address(&msg_scratch_pad->ipv6_address); + msg_scratch_pad->ipv6_address_present = FALSE; + + strcpy(msg_scratch_pad->peer_type_description, " "); + msg_scratch_pad->peer_type_description[ + RFC5444_TLV_PEER_TYPE_MAX_LENGTH]='\0'; + + msg_scratch_pad->rlq_tx = 0; + msg_scratch_pad->rlq_rx = 0; + msg_scratch_pad->rlq_present = FALSE; + + msg_scratch_pad->resources = 0; + msg_scratch_pad->resources_present = FALSE; + + msg_scratch_pad->latency = 0; + msg_scratch_pad->latency_present = FALSE; + + msg_scratch_pad->cdr_tx = 0; + msg_scratch_pad->cdr_rx = 0; + msg_scratch_pad->cdr_present = FALSE; + + msg_scratch_pad->mdr_tx = 0; + msg_scratch_pad->mdr_rx = 0; + msg_scratch_pad->mdr_present = FALSE; + + msg_scratch_pad->mtu = 0; + msg_scratch_pad->mtu_present = FALSE; + +#if 0 +/* Below code is added for DLEPv7 */ + msg_scratch_pad->dlepv7_optional_signal = init_optional_signal(); + msg_scratch_pad->dlepv7_optional_data_item = init_optional_data_item(); +#endif + return; +} diff --git a/dlep_radio_ipv4/rfc5444_scratch_pad.h b/dlep_radio_ipv4/rfc5444_scratch_pad.h new file mode 100644 index 0000000..19656ae --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_scratch_pad.h @@ -0,0 +1,165 @@ +/*---------------------------------------------------------------------- + * rfc5444_scratch_pad.h -- data to manage parsed data + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __RFC5444_SCRATCH_PAD_H__ +#define __RFC5444_SCRATCH_PAD_H__ + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_types.h" + + + +/* + * message scratch pad - when a message is parsed, its + * data is first saved here so the peer or neighbor can + * be looked up. The required and optional TLVs can + * also be managed. + */ +typedef struct { + uint16_t sequence; + boolean_t sequence_present; + + uint32_t router_id; + boolean_t router_id_present; + + uint32_t client_id; + boolean_t client_id_present; + + uint8_t peer_heartbeat_interval; + boolean_t peer_heartbeat_interval_present; + +} rfc5444_packet_scratch_pad_t; + + + +/* + * message scratch pad - when a message is parsed, its + * data is first saved here so the peer or neighbor can + * be looked up. The required and optional TLVs can + * also be managed. + */ +typedef struct { + uint16_t message_code; + + uint16_t sequence; + boolean_t sequence_present; + + uint8_t major_version; + boolean_t major_version_present; + + uint8_t minor_version; + boolean_t minor_version_present; + + uint16_t status_code; + boolean_t status_code_present; + + uint8_t mac_address[MAC_ADDR_LEN_IN_BYTES]; + boolean_t mac_address_present; + + ipv4_address_t ipv4_address; + ipv4_address_t ipv4_attached_subnet; + uint8_t ipv4_operation; + boolean_t ipv4_address_present; + + ipv6_address_t ipv6_address; + ipv6_address_t ipv6_attached_subnet; + uint8_t ipv6_operation; + boolean_t ipv6_address_present; + + char peer_type_description[RFC5444_TLV_PEER_TYPE_MAX_LENGTH+1]; + + /* metrics */ + boolean_t rlq_present; + uint8_t rlq_tx; + uint8_t rlq_rx; + + boolean_t resources_present; + uint8_t resources_tx; + uint8_t resources_rx; + uint8_t resources; /* addded for v27 */ + + boolean_t latency_present; + uint64_t latency; + + boolean_t cdr_present; + uint64_t cdr_tx; + uint64_t cdr_rx; + + boolean_t mdr_present; + uint64_t mdr_tx; + uint64_t mdr_rx; + + uint16_t port; + uint32_t eft; + + boolean_t cws_present; + uint64_t mrw; + uint64_t rrw; + uint64_t cgr; + + boolean_t credit_req_present; + + uint32_t hbt; + + boolean_t mtu_present; + uint16_t mtu; /* added for v27 */ + +#if 0 + uint32_t dlepv7_optional_signal; + uint32_t dlepv7_optional_data_item; +#endif + +} rfc5444_message_scratch_pad_t; + + +extern void +rfc5444_show_packet_scratch_pad( + rfc5444_packet_scratch_pad_t *pkt_scratch_pad); + +extern void +rfc5444_show_message_scratch_pad( + rfc5444_message_scratch_pad_t *msg_scratch_pad); + +extern void +rfc5444_scrub_packet_scratch_pad( + rfc5444_packet_scratch_pad_t *pkt_scratch_pad); + +extern void +rfc5444_scrub_message_scratch_pad( + rfc5444_message_scratch_pad_t *msg_scratch_pad); + +#endif + + diff --git a/dlep_radio_ipv4/rfc5444_types.h b/dlep_radio_ipv4/rfc5444_types.h new file mode 100644 index 0000000..f57b0b2 --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_types.h @@ -0,0 +1,292 @@ +/*------------------------------------------------------------------ + * rfc5444_types.h -- RFC5444 types + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef ___RFC5444_TYPES__ +#define ___RFC5444_TYPES__ + + +#include "rfc5444_api_rc.h" + + + +#define SECONDS_TO_MILLISECONDS ( 1000 ) + + + +/* reasonable bounds for good measure */ +#define RFC5444_MIN_PACKET_LEN ( 3 ) +#define RFC5444_MAX_PACKET_LEN ( 1400 ) + +#define RFC5444_MIN_MESSAGE_LEN ( 3 ) +#define RFC5444_MAX_MESSAGE_LEN ( 500 ) + + + +/* + * packet header flag definitions + */ +#define PHASSEQNUM ( 0x08 ) /* ignored */ +#define PHASTLV ( 0x04 ) + +/* + * message header flag definitions + */ +#define MHASHORIG ( 0x80 ) /* not supported */ +#define MHASHOPLIMIT ( 0x40 ) /* not supported */ +#define MHASHOPCOUNT ( 0x20 ) /* not supported */ +#define MHASSEQNUM ( 0x10 ) +#define MHASADDRLEN ( 0x03 ) /* not supported */ + +/* + * TLV flag definitions + */ +#define THASTYPEEXT ( 0x80 ) /* not supported */ +#define THASSINGLEINDEX ( 0x40 ) /* not supported */ +#define THASMULTIINDEX ( 0x20 ) /* not supported */ +#define THASVALUE ( 0x10 ) +#define THASEXTLEN ( 0x08 ) +#define THASMULTIVALUE ( 0x04 ) /* not supported */ + + +/* + * Signal header flags + */ +#define DLEP_SIGNAL_FLAGS (0x444C4550) + +/* + * Status codes used in the Status TLV. + */ +typedef enum { + RFC5444_SUCCESS = 0, + RFC5444_ERROR, + RFC5444_REQUEST_DENIED = 2, + RFC5444_MSG_UNKNOWN = 128, + RFC5444_MSG_UNEXPECTED = 129, + RFC5444_INVALID_DATA = 130, + RFC5444_INVALID_DESTINATION = 131, + RFC5444_MSG_TIMEOUT = 132, +} rfc5444_status_code_type_t; + + +/* + * The max value for RLQ and Resources + */ +#define RFC5444_100_PERCENT ( 100 ) + +/* DLEP version implemented and supported */ +#define RFC5444_DLEP_MAJOR_VERSION ( 1 ) +#define RFC5444_DLEP_MINOR_VERSION ( 7 ) + + +/* + * When the TLV vector table is allocated, we add one to + * the max to account for the 0 based array. The TLV + * code is the index straight-up. 0--invalid, 1-255 valid. + */ +#define RFC5444_MAX_TLV_CODE ( 255 ) + + +/* + * RFC5444 TLV Codes + ***FIX - TLV codes to be defined with IANA + */ +typedef enum { + RFC5444_TLV_RESERVED = 0, + RFC5444_TLV_STATUS = 1, + RFC5444_TLV_IPV4_CONNECTION_POINT = 2, + RFC5444_TLV_IPV6_CONNECTION_POINT = 3, + RFC5444_TLV_PEER_TYPE = 4, + RFC5444_TLV_HEARTBEAT_INTERVAL = 5, + RFC5444_TLV_EXTENSION_SUPPORTED = 6, + + RFC5444_TLV_MAC_ADDRESS = 7, + RFC5444_TLV_IPV4_ADDRESS = 8, + RFC5444_TLV_IPV6_ADDRESS = 9, + RFC5444_TLV_IPV4_ATTACHED_SUBNET = 10, + RFC5444_TLV_IPV6_ATTACHED_SUBNET = 11, + + RFC5444_TLV_LINK_MDR_METRIC_RX = 12, + RFC5444_TLV_LINK_MDR_METRIC_TX = 13, + RFC5444_TLV_LINK_CDR_METRIC_RX = 14, + RFC5444_TLV_LINK_CDR_METRIC_TX = 15, + RFC5444_TLV_LINK_LATENCY_METRIC = 16, + RFC5444_TLV_LINK_RESOURCES_METRIC = 17, + RFC5444_TLV_LINK_RLQ_METRIC_RX = 18, + RFC5444_TLV_LINK_RLQ_METRIC_TX = 19, + + RFC5444_TLV_MTU = 20, + + RFC5444_MAX_DATA_ITEM = 21, + /* added to avoid build error of 27 since existing v7 needs below */ + RFC5444_TLV_VERSION, + RFC5444_TLV_PORT, + RFC5444_TLV_LINK_RESOURCES_METRIC_RX , + RFC5444_TLV_LINK_RESOURCES_METRIC_TX , + RFC5444_TLV_LINK_EFT_METRIC , + RFC5444_TLV_CREDIT_WINDOW_STATUS , + RFC5444_TLV_CREDIT_GRANT , + RFC5444_TLV_CREDIT_REQUEST , + RFC5444_TLV_VENDOR_EXTENSION, + RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED , + RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED , +} rfc5444_tlv_t; + + +/* + * Flag values used to encode and decode TLVs + */ +#define RFC5444_TLV_IDENTIFICATION_FLAGS ( 0x10 ) +#define RFC5444_TLV_VERSION_FLAGS ( 0x10 ) +#define RFC5444_TLV_PEER_TYPE_FLAGS ( 0x00 ) + +#define RFC5444_TLV_MAC_ADDRESS_FLAGS ( 0x10 ) +#define RFC5444_TLV_IPV4_ADDRESS_FLAGS ( 0x10 ) +#define RFC5444_TLV_IPV6_ADDRESS_FLAGS ( 0x10 ) + +#define RFC5444_TLV_LINK_METRIC_MDR_FLAGS ( 0x10 ) +#define RFC5444_TLV_LINK_METRIC_CDR_FLAGS ( 0x10 ) +#define RFC5444_TLV_LINK_METRIC_LATENCY_FLAGS ( 0x10 ) +#define RFC5444_TLV_LINK_METRIC_RESOURCES_FLAGS ( 0x10 ) +#define RFC5444_TLV_LINK_METRIC_RLQ_FLAGS ( 0x10 ) + +#define RFC5444_TLV_STATUS_FLAGS ( 0x10 ) +#define RFC5444_TLV_IPV4_CONNECTION_POINT_FLAGS ( 0x00 ) + +/* + * Lengths (bytes) used to encode and decode TLVs + */ +#define RFC5444_TLV_IDENTIFICATION_LENGTH ( 9 ) +#define RFC5444_TLV_VERSION_LENGTH ( 4 ) + + /* string length <= 80 */ +#define RFC5444_TLV_PEER_TYPE_MAX_LENGTH ( 160 ) + +#define RFC5444_TLV_MAC_ADDRESS_LENGTH ( 6 ) +#define RFC5444_TLV_IPV4_ADDRESS_LENGTH ( 5 ) /* + operation */ +#define RFC5444_TLV_IPV6_ADDRESS_LENGTH ( 17 ) /* + operation */ + +#define RFC5444_TLV_LINK_METRIC_MDR_LENGTH ( 8 ) +#define RFC5444_TLV_LINK_METRIC_CDR_LENGTH ( 8 ) +#define RFC5444_TLV_LINK_METRIC_LATENCY_LENGTH ( 8 ) +#define RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH ( 1 ) +#define RFC5444_TLV_LINK_METRIC_RLQ_LENGTH ( 1 ) +#define RFC5444_TLV_LINK_METRIC_EFT_LENGTH ( 4 ) +#define RFC5444_TLV_PORT_LENGTH ( 2 ) +#define RFC5444_TLV_CREDIT_WINDOW_STATUS_LENGTH ( 16 ) +#define RFC5444_TLV_STATUS_LENGTH ( 1 ) +#define RFC5444_TLV_CREDIT_GRANT_LENGTH ( 8 ) +#define RFC5444_TLV_CREDIT_REQUEST_LENGTH ( 1 ) +#define RFC5444_TLV_HEARTBEAT_INTERVAL_LENGTH ( 4 ) +#define RFC5444_TLV_MTU_LENGTH ( 2 ) +#define RFC5444_TLV_IPV4_CONNECTION_POINT_LENGTH ( 7 ) + +/* Below TLV's length are added for DLEPv7 */ +#define RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED_LENGTH ( 6 ) +#define RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED_LENGTH ( 12 ) +/* +Length (3) + OUI length(1) + VENDOR OUI (3 octets) ++ DEVICE TYPE (2) + PAYLOAD length (6 (T + L + V) = 15 +*/ +#define RFC5444_TLV_VENDOR_EXTENSION_LENGTH ( 15 ) +#define RFC5444_TLV_IPV4_ATTACHED_SUBNET_LENGTH ( 6 ) +#define RFC5444_TLV_IPV6_ATTACHED_SUBNET_LENGTH ( 18 ) + +/* For VENDOR EXTENSION TLV in DLEPv7 */ +#define VENDOR_OUI_LENGTH ( 3 ) +#define VENDOR_SPECIFIC_PAYLOAD_TYPE ( 30 ) +#define VENDOR_SPECIFIC_PAYLOAD_LENGTH 4 + +/* + * IPv4/6 addresses can be added or dropped by the + * RFC5444_MSG_NEIGHBOR_ADDRESS message. + */ +#define RFC5444_NO_ADDRESS ( 0x02 ) /* added to avoid error */ +#define RFC5444_EXISTING_ADD_ADDRESS ( 0x01 ) +#define RFC5444_DROP_ADDRESS ( 0x00 ) + + + + +/* + * RFC5444 Router-Radio Message codes + ***FIX - message codes to be defined with IANA + */ + +typedef enum { + RFC5444_SIG_RESERVED = 0, + + RFC5444_SIG_ATT_PEER_DISCOVERY, + + RFC5444_SIG_PEER_OFFER, + + RFC5444_MAX_SIGNAL_CODE +} rfc5444_sig_type_t; + +typedef enum { + RFC5444_MSG_RESERVED = 0, + + RFC5444_MSG_PEER_INIT_REQ, + RFC5444_MSG_PEER_INIT_RES, + + + RFC5444_MSG_PEER_UPDATE_REQ, + RFC5444_MSG_PEER_UPDATE_RES, + + RFC5444_MSG_PEER_TERM_REQ, + RFC5444_MSG_PEER_TERM_RES, + + RFC5444_MSG_NEIGHBOR_UP_REQ, + RFC5444_MSG_NEIGHBOR_UP_RES, + + RFC5444_MSG_NEIGHBOR_ANNOUNCE_REQ, + RFC5444_MSG_NEIGHBOR_ANNOUNCE_RES, + + RFC5444_MSG_NEIGHBOR_DOWN_REQ, + RFC5444_MSG_NEIGHBOR_DOWN_RES, + + RFC5444_MSG_NEIGHBOR_METRICS, + + RFC5444_MSG_LINK_CHAR_REQ, + RFC5444_MSG_LINK_CHAR_RES, + + RFC5444_MSG_PEER_HEARTBEAT, + + RFC5444_MAX_MESSAGE_CODE, + /* added to avoid build errors */ + RFC5444_MSG_DET_PEER_DISCOVERY, + RFC5444_MSG_NEIGHBOR_ADDRESS_REQ, + RFC5444_MSG_NEIGHBOR_ADDRESS_RES, + +} rfc5444_msg_type_t; + + +#endif + diff --git a/dlep_radio_ipv4/rfc5444_utils.c b/dlep_radio_ipv4/rfc5444_utils.c new file mode 100644 index 0000000..fd89af9 --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_utils.c @@ -0,0 +1,397 @@ +/*---------------------------------------------------------------------- + * rfc5444_utils.c -- RFC5444 utils + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include + +#include "safe_types.h" +#include "rfc5444_types.h" + +#include "rfc5444_utils.h" + + +/** + * NAME + * r2rc2string + * + * SYNOPSIS + * #include "rfc5444_utils.h" + * char + * *rfc5444_rc2string(uint32_t rc) + * + * DESCRIPTION + * This function converts a RFC5444 return code to a string + * for display. + * + * INPUT PARAMETERS + * rc - The return code to be converted to a string + * + * OUTPUT PARAMETERS + * None + * + * RETURN VALUE + * A pointer to a string description of the return code + * + */ +char +*rfc5444_rc2string (uint32_t rc) +{ + char *p2text; + + switch (rc) { + + case RC_RFC5444_OK: + p2text = "RC_RFC5444_OK"; + break; + + case RC_RFC5444_NULL_POINTER: + p2text = "RC_RFC5444_NULL_POINTER"; + break; + + case RC_RFC5444_NO_RESOURCES: + p2text = "RC_RFC5444_NO_RESOURCES"; + break; + + case RC_RFC5444_STATE_ERROR: + p2text = "RC_RFC5444_STATE_ERROR"; + break; + + case RC_RFC5444_VERSION_ERROR: + p2text = "RC_RFC5444_VERSION_ERROR"; + break; + + case RC_RFC5444_INVALID_PACKET_HEADER: + p2text = "RC_RFC5444_INVALID_PACKET_HEADER"; + break; + + case RC_RFC5444_INVALID_PACKET_LENGTH: + p2text = "RC_RFC5444_INVALID_PACKET_LENGTH"; + break; + + case RC_RFC5444_INVALID_BLOCK_INDICATOR: + p2text = "RC_RFC5444_INVALID_BLOCK_INDICATOR"; + break; + + case RC_RFC5444_INVALID_MESSAGE_FLAG: + p2text = "RC_RFC5444_INVALID_MESSAGE_FLAG"; + break; + + case RC_RFC5444_INVALID_MESSAGE_MAL: + p2text = "RC_RFC5444_INVALID_MESSAGE_MAL"; + break; + + case RC_RFC5444_INVALID_MESSAGE_LENGTH: + p2text = "RC_RFC5444_INVALID_MESSAGE_LENGTH"; + break; + + case RC_RFC5444_INVALID_MESSAGE_SEQUENCE: + p2text = "RC_RFC5444_INVALID_MESSAGE_SEQUENCE"; + break; + + case RC_RFC5444_INVALID_MESSAGE_CODE: + p2text = "RC_RFC5444_INVALID_MESSAGE_CODE"; + break; + + case RC_RFC5444_INVALID_TLV_BLOCK_LENGTH: + p2text = "RC_RFC5444_INVALID_TLV_BLOCK_LENGTH"; + break; + + case RC_RFC5444_UNKNOWN_TLV_CODE: + p2text = "RC_RFC5444_UNKNOWN_TLV_CODE"; + break; + + case RC_RFC5444_INVALID_TLV_FLAG: + p2text = "RC_RFC5444_INVALID_TLV_FLAG"; + break; + + case RC_RFC5444_INVALID_TLV_LENGTH: + p2text = "RC_RFC5444_INVALID_TLV_LENGTH"; + break; + + default: + p2text = "RFC5444_UNKNOWN_RETURN_CODE"; + break; + } + return (p2text); +} + + +/** + * NAME + * rfc5444_tlv_code2string + * + * SYNOPSIS + * #include "rfc5444_utils.h" + * char + * *rfc5444_tlv_code2string(uint8_t tlv_code) + * + * DESCRIPTION + * This function converts a RFC5444 TLV code to a string + * for display. + * + * INPUT PARAMETERS + * tlv_code - The code to be converted to a string + * + * OUTPUT PARAMETERS + * None + * + * RETURN VALUE + * A pointer to a string description of the TLV code + * + */ +char +*rfc5444_tlv_code2string (uint16_t tlv_code) +{ + char *p2text; + + switch (tlv_code) { +#if 0 + case RFC5444_TLV_IDENTIFICATION: + p2text = "RFC5444_TLV_IDENTIFICATION"; + break; +#endif + case RFC5444_TLV_VERSION: + p2text = "RFC5444_TLV_VERSION"; + break; + + case RFC5444_TLV_PORT: + p2text = "RFC5444_TLV_PORT"; + break; + + case RFC5444_TLV_PEER_TYPE: + p2text = "RFC5444_TLV_PEER_TYPE"; + break; + + case RFC5444_TLV_MAC_ADDRESS: + p2text = "RFC5444_TLV_MAC_ADDRESS"; + break; + + case RFC5444_TLV_IPV4_ADDRESS: + p2text = "RFC5444_TLV_IPV4_ADDRESS"; + break; + + case RFC5444_TLV_IPV6_ADDRESS: + p2text = "RFC5444_TLV_IPV6_ADDRESS"; + break; + + case RFC5444_TLV_LINK_MDR_METRIC_TX: + p2text = "RFC5444_TLV_LINK_MDR_TX_METRIC"; + break; + + case RFC5444_TLV_LINK_MDR_METRIC_RX: + p2text = "RFC5444_TLV_LINK_MDR_RX_METRIC"; + break; + + case RFC5444_TLV_LINK_CDR_METRIC_TX: + p2text = "RFC5444_TLV_LINK_CDR_TX_METRIC"; + break; + + case RFC5444_TLV_LINK_CDR_METRIC_RX: + p2text = "RFC5444_TLV_LINK_CDR_RX_METRIC"; + break; + + case RFC5444_TLV_LINK_LATENCY_METRIC: + p2text = "RFC5444_TLV_LINK_LATENCY_METRIC"; + break; + + case RFC5444_TLV_LINK_RESOURCES_METRIC_TX: + p2text = "RFC5444_TLV_LINK_RESOURCES_TX_METRIC"; + break; + + case RFC5444_TLV_LINK_RESOURCES_METRIC_RX: + p2text = "RFC5444_TLV_LINK_RESOURCES_RX_METRIC"; + break; + + case RFC5444_TLV_LINK_RLQ_METRIC_TX: + p2text = "RFC5444_TLV_LINK_RLQ_METRIC"; + break; + + case RFC5444_TLV_LINK_RLQ_METRIC_RX: + p2text = "RFC5444_TLV_LINK_RLQ_RX_METRIC"; + break; + + case RFC5444_TLV_HEARTBEAT_INTERVAL: + p2text = "RFC5444_TLV_HEARTBEAT_INTERVAL"; + break; + + case RFC5444_TLV_STATUS: + p2text = "RFC5444_TLV_STATUS"; + break; + + case RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED: + p2text = "RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED"; + break; + + case RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED: + p2text = "RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED"; + break; + + case RFC5444_TLV_VENDOR_EXTENSION: + p2text = "RFC5444_TLV_VENDOR_EXTENSION"; + break; + + case RFC5444_TLV_IPV4_ATTACHED_SUBNET: + p2text = "RFC5444_TLV_IPV4_ATTACHED_SUBNET"; + break; + + case RFC5444_TLV_IPV6_ATTACHED_SUBNET: + p2text = "RFC5444_TLV_IPV6_ATTACHED_SUBNET"; + break; + + /* added for dlepv 27 */ + + case RFC5444_TLV_LINK_RESOURCES_METRIC: + p2text = "RFC5444_TLV_LINK_RESOURCES_METRIC"; + break; + + case RFC5444_TLV_MTU: + p2text = "RFC5444_TLV_MTU"; + break; + + default: + p2text = "RFC5444_UNKNOWN_TLV_CODE"; + break; + } + return (p2text); +} + + +/** + * NAME + * rfc5444_message_code2string + * + * SYNOPSIS + * #include "rfc5444_utils.h" + * char + * *rfc5444_message_code2string(uint8_t message_code) + * + * DESCRIPTION + * This function converts a RFC5444 message code to a string + * for display. + * + * INPUT PARAMETERS + * message_code - The message code to be converted to a string + * + * OUTPUT PARAMETERS + * None + * + * RETURN VALUE + * A pointer to a string description of the message code + * + */ +char +*rfc5444_message_code2string (uint16_t message_code) +{ + char *p2text; + + switch (message_code) { + /* case RFC5444_SIG_ATT_PEER_DISCOVERY: + p2text = "RFC5444_SIG_ATT_PEER_DISCOVERY"; + break; */ + + case RFC5444_MSG_DET_PEER_DISCOVERY: + p2text = "RFC5444_MSG_DET_PEER_DISCOVERY"; + break; + + /* case RFC5444_SIG_PEER_OFFER: + p2text = "RFC5444_SIG_PEER_OFFER"; + break; */ + + case RFC5444_MSG_PEER_INIT_REQ: + p2text = "RFC5444_MSG_PEER_INIT_REQ"; + break; + + case RFC5444_MSG_PEER_INIT_RES: + p2text = "RFC5444_MSG_PEER_INIT_RES"; + break; + + case RFC5444_MSG_PEER_HEARTBEAT: + p2text = "RFC5444_MSG_PEER_HEARTBEAT"; + break; + + case RFC5444_MSG_PEER_UPDATE_REQ: + p2text = "RFC5444_MSG_PEER_UPDATE_REQ"; + break; + + case RFC5444_MSG_PEER_UPDATE_RES: + p2text = "RFC5444_MSG_PEER_UPDATE_RES"; + break; + + case RFC5444_MSG_PEER_TERM_REQ: + p2text = "RFC5444_MSG_PEER_TERM_REQ"; + break; + + case RFC5444_MSG_PEER_TERM_RES: + p2text = "RFC5444_MSG_PEER_TERM_RES"; + break; + + case RFC5444_MSG_NEIGHBOR_UP_REQ: + p2text = "RFC5444_MSG_NEIGHBOR_UP_REQ"; + break; + + case RFC5444_MSG_NEIGHBOR_UP_RES: + p2text = "RFC5444_MSG_NEIGHBOR_UP_RES"; + break; + + case RFC5444_MSG_NEIGHBOR_DOWN_REQ: + p2text = "RFC5444_MSG_NEIGHBOR_DOWN_REQ"; + break; + + case RFC5444_MSG_NEIGHBOR_DOWN_RES: + p2text = "RFC5444_MSG_NEIGHBOR_DOWN_RES"; + break; + + case RFC5444_MSG_NEIGHBOR_METRICS: + p2text = "RFC5444_MSG_NEIGHBOR_METRICS"; + break; + + case RFC5444_MSG_NEIGHBOR_ADDRESS_REQ: + p2text = "RFC5444_MSG_NEIGHBOR_ADDRESS_REQ"; + break; + + case RFC5444_MSG_NEIGHBOR_ADDRESS_RES: + p2text = "RFC5444_MSG_NEIGHBOR_ADDRESS_RES"; + break; + + case RFC5444_MSG_LINK_CHAR_REQ: + p2text = "RFC5444_MSG_LINK_CHAR_REQ"; + break; + + case RFC5444_MSG_LINK_CHAR_RES: + p2text = "RFC5444_MSG_LINK_CHAR_RES"; + break; + + default: + p2text = "RFC5444_UNKNOWN_MESSAGE_CODE"; + break; + } + return (p2text); +} + diff --git a/dlep_radio_ipv4/rfc5444_utils.h b/dlep_radio_ipv4/rfc5444_utils.h new file mode 100644 index 0000000..bce8a1e --- /dev/null +++ b/dlep_radio_ipv4/rfc5444_utils.h @@ -0,0 +1,45 @@ +/*---------------------------------------------------------------------- + * rfc5444_utils.h -- utility prototypes + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __RFC5444_UTILS_H__ +#define __RFC5444_UTILS_H__ + +#include "safe_types.h" + + +extern char *rfc5444_rc2string(uint32_t rc); + +extern char *rfc5444_tlv_code2string(uint16_t tlv_code); + +extern char *rfc5444_message_code2string(uint16_t message_code); + +#endif + diff --git a/dlep_radio_ipv4/runtime_environment.h b/dlep_radio_ipv4/runtime_environment.h new file mode 100644 index 0000000..5971b60 --- /dev/null +++ b/dlep_radio_ipv4/runtime_environment.h @@ -0,0 +1,41 @@ +/*------------------------------------------------------------------ + * runtime_environment.h -- Abstractions + * + * Februrary 2002, Bo Berry + * + * Copyright (c) 2002-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __RUNTIME_ENVIRONMENT_H__ +#define __RUNTIME_ENVIRONMENT_H__ + + +#define LOCK_INTERRUPTS() +#define UNLOCK_INTERRUPTS() + + +#endif + diff --git a/dlep_radio_ipv4/safe_limits.h b/dlep_radio_ipv4/safe_limits.h new file mode 100644 index 0000000..b028026 --- /dev/null +++ b/dlep_radio_ipv4/safe_limits.h @@ -0,0 +1,195 @@ +/*------------------------------------------------------------------ + * safe_limits.h + * + * February 2009, Bo Berry + * + * Copyright (c) 2009-2011 by Cisco Systems + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __SAFE_LIMITS__ +#define __SAFE_LIMITS__ + +/* + * Abstract header file for portability. + */ + + +/* + * ANSI C - number of bits by type + */ +#ifndef CHAR_BIT +#define CHAR_BIT ( 8 ) +#endif + +#ifndef BYTE_BIT +#define BYTE_BIT ( 8 ) +#endif + +#ifndef SHORT_BIT +#define SHORT_BIT ( 16 ) +#endif + +#ifndef INT_BIT +#define INT_BIT ( 32 ) +#endif + +#ifndef LONG_BIT +// #define LONG_BIT ( 32 ) +#define LONG_BIT ( 64 ) +#endif + +#ifndef LONG_LONG_BIT +#define LONG_LONG_BIT ( 64 ) +#endif + +#ifndef POINTER_BIT +#define POINTER_BIT ( 64 ) +#endif + + + +#ifndef BYTE_MAX +#define BYTE_MAX ( 255 ) +#endif + +#ifndef SCHAR_MAX +#define SCHAR_MAX ( 127 ) +#define SCHAR_MIN ( -SCHAR_MAX - 1 ) +#endif + +#ifndef CHAR_MAX +#define CHAR_MAX ( 127 ) +#define CHAR_MIN ( -CHAR_MAX - 1 ) +#endif + +#ifndef UCHAR_MAX +#define UCHAR_MAX ( 0xff ) +#endif + +#ifndef SHRT_MAX +#define SHRT_MAX ( 32767 ) +#define SHRT_MIN ( -SHRT_MAX - 1 ) +#endif + +#ifndef USHRT_MAX +#define USHRT_MAX ( 0xffff ) +#endif + +#ifndef INT_MAX +#define INT_MAX ( 2147483647 ) +#define INT_MIN ( -INT_MAX - 1 ) +#endif + +#ifndef UINT_MAX +#define UINT_MAX ( 0xffffffff ) +#endif + +#ifndef LLONG_MAX +#define LLONG_MAX ( 9223372036854775807 ) +#define LLONG_MIN ( -LLONG_MAX - 1 ) +#endif + +#ifndef ULLONG_MAX +#define ULLONG_MAX ( 0xffffffffffffffff ) +#endif + + +#if LONG_BIT == INT_BIT + +#ifndef LONG_MAX +#define LONG_MAX ( INT_MAX) +#define LONG_MIN ( -LONG_MAX - 1 ) +#endif + +#ifndef ULONG_MAX +#define ULONG_MAX ( UINT_MAX ) +#endif + +#else + +#ifndef LONG_MAX +#define LONG_MAX ( LLONG_MAX) +#define LONG_MIN ( -LONG_MAX - 1 ) +#endif + +#ifndef ULONG_MAX +#define ULONG_MAX ( ULLONG_MAX ) +#endif + +#endif + + +#ifndef INT8_MIN +#define INT8_MIN ( SCHAR_MIN ) +#endif + +#ifndef INT8_MAX +#define INT8_MAX ( SCHAR_MAX ) +#endif + +#ifndef UINT8_MAX +#define UINT8_MAX ( UCHAR_MAX ) +#endif + +#ifndef INT16_MIN +#define INT16_MIN ( SHRT_MIN ) +#endif + +#ifndef INT16_MAX +#define INT16_MAX ( SHRT_MAX ) +#endif + +#ifndef UINT16_MAX +#define UINT16_MAX ( USHRT_MAX ) +#endif + +#ifndef INT32_MIN +#define INT32_MIN ( INT_MIN ) +#endif + +#ifndef INT32_MAX +#define INT32_MAX ( INT_MAX ) +#endif + +#ifndef UINT32_MAX +#define UINT32_MAX ( UINT_MAX ) +#endif + +#ifndef INT64_MIN +#define INT64_MIN ( LLONG_MIN ) +#endif + +#ifndef INT64_MAX +#define INT64_MAX ( LLONG_MAX ) +#endif + +#ifndef UINT64_MAX +#define UINT64_MAX ( ULLONG_MAX ) +#endif + + +#endif /* __SAFE_LIMITS__ */ + diff --git a/dlep_radio_ipv4/safe_types.h b/dlep_radio_ipv4/safe_types.h new file mode 100644 index 0000000..eafaa0a --- /dev/null +++ b/dlep_radio_ipv4/safe_types.h @@ -0,0 +1,139 @@ +/*------------------------------------------------------------------ + * safe_types.h + * + * March 2007, Bo Berry + * + * Copyright (c) 2007-2011 by Cisco Systems, Inc + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __SAFE_TYPES__ +#define __SAFE_TYPES__ + +#include + +#include "safe_limits.h" + + +/* + * Abstract header file for portability. + */ + +#ifndef TRUE +#define TRUE ( 1 ) +#endif + +#ifndef FALSE +#define FALSE ( 0 ) +#endif + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#ifndef boolean_t +typedef unsigned char boolean_t; +#endif + + + +#ifndef int8_t +typedef signed char int8_t; +#endif + +#ifndef int16_t +typedef short int16_t; +#endif + +#ifndef int32_t +typedef int int32_t; +#endif + +#ifndef uchar_t +typedef unsigned char uchar_t; +#endif + +#ifndef uint8_t +typedef unsigned char uint8_t; +#endif + +#ifndef uint16_t +typedef unsigned short uint16_t; +#endif + +#ifndef uint32_t +typedef unsigned int uint32_t; +#endif + +#ifndef uint64_t +//typedef unsigned long long uint64_t; +#endif + +#if 0 +#if POINTER_BIT == 64 +#ifndef intptr_t; +typedef long long intptr_t; +#endif + +#ifndef uintptr_t; +typedef unsigned long long uintptr_t; +#endif + +#else + +#ifndef intptr_t; +typedef signed int intptr_t; +#endif +#ifndef uintptr_t; +typedef unsigned int uintptr_t; +#endif + +#endif +#endif + + +#ifndef ushort +typedef unsigned short ushort; +#endif + +#ifndef int_t +typedef int int_t; +#endif + +#ifndef uint_t +typedef unsigned int uint_t; +#endif + +#ifndef ulong +typedef unsigned long ulong; +#endif + +#ifndef ulonglong +typedef unsigned long long ullong; +#endif + + +#endif /* __SAFE_TYPES__ */ + diff --git a/dlep_radio_ipv4/sim_dlep_radio.c b/dlep_radio_ipv4/sim_dlep_radio.c new file mode 100644 index 0000000..b6ddbb3 --- /dev/null +++ b/dlep_radio_ipv4/sim_dlep_radio.c @@ -0,0 +1,466 @@ +/*---------------------------------------------------------------------- + * sim_dlep_radio.c -- Radio simulator + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +static char FileID[] = "@(#)dlep_radio "__DATE__" "__TIME__" "; + +#include +#include +#include +//#include +#include +#include + +#include "safe_types.h" +#include "cli.h" +#include "time_units.h" +#include "stw_system_timer.h" +#include "packet_dump.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" +#include "rfc5444_encoder_tlv.h" +#include "rfc5444_encoder.h" +#include "rfc5444_decoder.h" +#include "rfc5444_decoder_tlv.h" +#include "rfc5444_experimental_tlv.h" + + +#include "dlep_debug.h" +#include "dlep_porter.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" +#include "dlep_client_timer.h" +#include "dlep_client_peer_fsm.h" +#include "sim_dlep_radio_cli.h" + +#include "dlep_porter.h" + +#include "dlep_client_message_parser.h" + + +#define MAXMESG ( 1500 ) + + +static char *instructions[] = { + " dlep_radio ", + " options: ", + " -d Debug peer flags, hex ", + " -f Configuration filename ", + " -h This help file ", + " -v Display version ", + " ", + }; + + +int TCP_READY = 0; +int TCP_CLIENT_READY = 0; + +/** + * NAME + * show_instructions + * + * DESCRIPTION + * Displays the help info to stdout. + * + * INPUT PARAMETERS + * None. + * + * RETURN VALUE + * None. + * + */ +static void +show_instructions( ) +{ + int i; + + for (i=0; ifilename, args); + printf(" Config file = %s \n", p2config->filename); + break; + + case 'h': + show_instructions(); + exit (EXIT_SUCCESS); + break; + + case 'v': + printf("\n%s \n\n", &FileID[4]); + exit (EXIT_SUCCESS); + break; + + default: + fprintf(stderr, "\nUnknown option: %s\n", args); + exit (EXIT_SUCCESS); + break; + } + + } else { + return (i); + } + } + + return (argc); +} + + +/* + * This function is envoked as result of the interval timer expiration + */ +static void timer_handler (int signum) +{ + stw_system_timer_tick(); +} + + +int main (int argc, char **argv) +{ + dlep_config_t *p2config; + rfc5444_rc_t rc; + + uint8_t *tmp; + uint8_t udp_msg[2000]; + int32_t udp_msg_len; + uint8_t tcp_msg[2000]; + int32_t tcp_msg_len; + struct timeval timeout; + timeout.tv_sec = 0; + timeout.tv_usec = 0; + +#define SCENARIO_INDICATOR ( 0xFFFF ) + uint16_t scenario_key; + + /* + * interval timer variables + */ + struct sigaction sa; + struct itimerval timer; + uint32_t microseconds; + //uint32_t milliseconds; + dlep_context_peer_t *p2peer; + + struct sockaddr_in rcvd_msg_addr; + socklen_t rcvd_msg_socket_length; + + int highsock=0; + fd_set readfds={0}; + boolean_t verbose; + rfc5444_decoder_init(&dlep_client_message_parser); + rfc5444_decoder_tlv_init(); + rfc5444_experimental_tlv_init(); + + dlep_cli_init(); + dlep_debug_init(&dlep_debug_flags, 0); + + dlep_default_config(); + p2config = dlep_get_config_ptr(); + + dlep_parse_user_options(p2config, argc, argv); + + dlep_read_config_file(p2config); + dlep_display_config(p2config); + + dlep_porter_init(p2config); + dlep_porter_open(p2config); + dlep_tcp_porter_open(p2config); + + /* + * create and configure the timer + */ +#define DLEP_STW_NUMBER_BUCKETS ( 512 ) +#define DLEP_STW_RESOLUTION ( 100 ) + + stw_system_timer_create(DLEP_STW_NUMBER_BUCKETS, + DLEP_STW_RESOLUTION, + "DLEP Timer"); + + /* + * Install the interval timer_handler as the signal handler + * for SIGALRM. + */ + memset (&sa, 0, sizeof (sa)); + sa.sa_handler = &timer_handler; + sigaction (SIGALRM, &sa, NULL); + + /* + * Configure the initial and post delay + */ + microseconds = milli_to_microseconds(DLEP_STW_RESOLUTION); + timer.it_value.tv_sec = 0; + timer.it_value.tv_usec = microseconds; + timer.it_interval.tv_sec = 0; + timer.it_interval.tv_usec = microseconds; + + /* + * Now start the interval timer. + */ + setitimer (ITIMER_REAL, &timer, NULL); + + + /* + * allocate and instantiate a peer for simulation + */ + p2peer = dlep_peer_allocate(&p2config->local_ipv4, + p2config->local_udp_port, + p2config->local_tcp_port); + + if (!p2peer) { + printf("%s-%u ERROR: did not allocate peer block \n", + DEBUG_FUNCTION, + DEBUG_LINE); + exit (0); + } + dlep_peer_init(p2config, p2peer); + + /* set the peer udp/tcp port to router udp/tcp port and + * peer address to the router address */ + + p2peer->peer_udp_port = p2config->router_udp_port; + p2peer->peer_tcp_port = p2config->router_tcp_port; + p2peer->peer_ipv4.v4_addr.v4_addr32 = + p2config->router_ipv4.v4_addr.v4_addr32; + +//for verification only +// ipv4_print_address("router IPv4", &p2peer->peer_ipv4); + + /* position the DLEP IDs */ + p2peer->client_id = p2config->local_id; + p2peer->router_id = 0; + + p2config->client_lenght = sizeof(p2config->client); + printf("start on launch\n"); +#if 0 + if (p2config->start_on_launch) { + ** start the state machine ** + if (p2config->start_on_discovery) { + dlep_client_fsm_engine(start_init_e, p2peer, NULL); + } else { + dlep_client_fsm_engine(peer_init_request_e, p2peer, NULL); + } + } +#endif + + cli_set_prompt(p2config->sim_name); + highsock = p2config->dlep_tcp_sockfd +1 ; + +#if 0 + FD_ZERO(&readfds); + FD_SET(0, &readfds); + FD_SET(p2config->dlep_udp_sockfd, &readfds); + FD_SET(p2config->dlep_tcp_sockfd, &readfds); +#endif + while (1) { + + /* zero out the control header and initial payload data */ + memset(udp_msg, 0, 20); + + FD_ZERO(&readfds); + FD_SET(0, &readfds); + FD_SET(p2config->dlep_udp_sockfd, &readfds); + FD_SET(p2config->dlep_tcp_sockfd, &readfds); + + if (TCP_CLIENT_READY == 1) { + FD_SET(p2config->dlep_tcp_client_sockfd, &readfds); + } + + /* Since tcp socket is created after udp socket, it will have + * the highest-numbered file descriptor. + */ + if (select(highsock, &readfds, NULL, NULL, NULL) < 0 ) { + continue; + } + /* check is udp socket ready for read operation */ + if (FD_ISSET(p2config->dlep_udp_sockfd, &readfds)) { + printf("ready udp\n"); + /* blocking call */ + udp_msg_len = dlep_udp_receive(p2config, + &rcvd_msg_addr, + &rcvd_msg_socket_length, + udp_msg, + 1400); + if (udp_msg_len < 1 ) { + continue; + } + + tmp = udp_msg; + NETWORK_ORDER_GETSHORT(udp_msg, scenario_key); + tmp += sizeof(uint16_t); + if (scenario_key == SCENARIO_INDICATOR) { + printf(" %s \n", tmp); + dlep_cli_engine((char *)tmp); + } else { + + rfc5444_scrub_packet_scratch_pad( + &p2peer->packet_scratch_pad); + rfc5444_scrub_message_scratch_pad( + &p2peer->message_scratch_pad); + + if (dlep_debug_flags & DLEP_INCOMING_TRACE_FLAG) { + packet_dump("INCOMING-", udp_msg, udp_msg_len); + } + + verbose = + ((dlep_debug_flags & DLEP_DECODER_TRACE_FLAG) ? TRUE : FALSE); + //printf("reaching decoder packet\n"); + rc = rfc5444_decoder_packet(udp_msg, + udp_msg_len, + p2peer, + verbose); + if (verbose) { + DLEP_DEBUG("%s-%u Packet decode rc=%u %s \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rc, + rfc5444_rc2string(rc) ); + } + } + } + + /* check is tcp socket ready for read operation */ + if (FD_ISSET(p2config->dlep_tcp_sockfd, &readfds)) { + p2config->dlep_tcp_client_sockfd = accept(p2config->dlep_tcp_sockfd, + (struct sockaddr *)&p2config->client, &p2config->client_lenght); + + if (p2config->dlep_tcp_client_sockfd < 0) { + perror("ERROR on accept"); + } + + FD_SET(p2config->dlep_tcp_client_sockfd, &readfds); + highsock = (p2config->dlep_tcp_client_sockfd + 1); + TCP_CLIENT_READY = 1; + } + + if (FD_ISSET(p2config->dlep_tcp_client_sockfd, &readfds) && TCP_CLIENT_READY) { + /* blocking call */ + tcp_msg_len = dlep_tcp_receive(p2config, + &rcvd_msg_addr, + &rcvd_msg_socket_length, + tcp_msg, + 1400); + if (tcp_msg_len < 1 ) { + if (TCP_CLIENT_READY == 0) { + printf("\n TCP Connection closed"); + close(p2config->dlep_tcp_client_sockfd); + } + continue; + } + + tmp = tcp_msg; + NETWORK_ORDER_GETSHORT(tcp_msg, scenario_key); + tmp += sizeof(uint16_t); + if (scenario_key == SCENARIO_INDICATOR) { + printf(" %s \n", tmp); + dlep_cli_engine((char *)tmp); + } else { + + rfc5444_scrub_packet_scratch_pad( + &p2peer->packet_scratch_pad); + rfc5444_scrub_message_scratch_pad( + &p2peer->message_scratch_pad); + + if (dlep_debug_flags & DLEP_INCOMING_TRACE_FLAG) { + packet_dump("INCOMING-", tcp_msg, tcp_msg_len); + } + + verbose = + ((dlep_debug_flags & DLEP_DECODER_TRACE_FLAG) ? TRUE : FALSE); + rc = rfc5444_decoder_packet(tcp_msg, + tcp_msg_len, + p2peer, + verbose); + if (verbose) { + DLEP_DEBUG("%s-%u Packet decode rc=%u %s \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rc, + rfc5444_rc2string(rc) ); + } + } + } + + + /* console */ + if (FD_ISSET(0, &readfds)) { + fgets((char *)udp_msg, MAXMESG, stdin); + dlep_cli_engine((char *)udp_msg); + } + + } + + exit (0); +} + + diff --git a/dlep_radio_ipv4/sim_dlep_radio_cli.c b/dlep_radio_ipv4/sim_dlep_radio_cli.c new file mode 100644 index 0000000..2ade6bf --- /dev/null +++ b/dlep_radio_ipv4/sim_dlep_radio_cli.c @@ -0,0 +1,2053 @@ +/*------------------------------------------------------------------ + * sim_dlep_radio_cli.c -- Radio simulator CLI support + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reerved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include +#include + +#include "safe_types.h" +#include "cli.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" +#include "stw_system_timer.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_debug_cli.h" +#include "dlep_client_neighbor_fsm.h" +#include "dlep_client_peer_fsm.h" +#include "dlep_message_builder.h" + +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" +#include "dlep_client_timer.h" + +#include "dlep_source_cli.h" +#include "fuzz_dlep_cli.h" + +#include "sim_dlep_radio_cli.h" +#include "dlep_porter.h" + +static boolean_t started = FALSE; +//static boolean_t CREDIT_NOT_SUPPORTED = FALSE; +//static boolean_t CREDIT_ENABLED = FALSE; + + +/* + * directory record + */ +static cli_record_t show_system_dir; +static cli_record_t show_peer_dir; +static cli_record_t show_neighbor_dir; + +//static cli_record_t clear_peer_dir; +//static cli_record_t clear_neighbor_dir; + +static cli_record_t test_peer_dir; +static cli_record_t test_neighbor_dir; + + +/* + * allocate command records + */ +static cli_record_t system_start_cmd; +static cli_record_t system_stop_cmd; + +static cli_record_t show_timer_stats_cmd; + +static cli_record_t show_peer_all_cmd; +static cli_record_t show_peer_fsm_history_cmd; +static cli_record_t show_peer_fsm_table_cmd; + +//static cli_record_t show_neighbor_id_cmd; +static cli_record_t show_neighbor_mac_cmd; +static cli_record_t show_neighbors_on_peer_cmd; +static cli_record_t show_neighbor_fsm_history_cmd; +static cli_record_t show_neighbor_fsm_table_cmd; + + +/* + * test command records + */ +static cli_record_t test_session_init_cmd; +static cli_record_t test_peer_term_cmd; +static cli_record_t test_peer_update_cmd; +static cli_record_t test_peer_offer_cmd; +static cli_record_t test_peer_update_res_cmd; +static cli_record_t test_peer_term_res_cmd; +static cli_record_t test_peer_init_ack_cmd; +static cli_record_t test_peer_heartbeat_cmd; +static cli_record_t test_neighbor_up_cmd; +static cli_record_t test_neighbor_update_cmd; +//static cli_record_t test_neighbor_l3_up_cmd; +static cli_record_t test_neighbor_credit_up_cmd; +static cli_record_t test_neighbor_metric_up_cmd; + +static cli_record_t test_neighbor_ipv4_req_cmd; +static cli_record_t test_neighbor_ipv6_req_cmd; + +static cli_record_t test_neighbor_down_cmd; + +static cli_record_t test_neighbor_metrics_cmd; +static cli_record_t test_neighbor_rlq_cmd; +static cli_record_t test_neighbor_resources_cmd; +static cli_record_t test_neighbor_latency_cmd; +static cli_record_t test_neighbor_cdr_cmd; +static cli_record_t test_neighbor_mdr_cmd; +static cli_record_t test_neighbor_mtu_cmd; +int init = 0; + + + +static void +system_start (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + dlep_config_t *p2config; + + if (argv[1] && *argv[1] == '?') { + printf("start - starts the discovery process when MANUAL " + "is defined in the config file. \n"); + return; + } + + if (started) { + printf("\n"); + printf("Hey, the radio sim is already running!! \n"); + printf("\n"); + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + p2config = dlep_get_config_ptr(); + if (p2peer) { + /*** start the state machine ***/ +/* if (p2config->start_on_discovery) { + dlep_client_fsm_engine(start_init_e, p2peer, NULL); + } else { + dlep_client_fsm_engine(peer_init_request_e, p2peer, NULL); + } + started = TRUE; +*/ + + } else { + printf("ERROR: hum, could not find peer to start \n"); + } + return; +} + + +static void +system_stop (uint32_t argc, char *argv[]) +{ + if (argv[1] && *argv[1] == '?') { + printf("stop - immediately exits the simulation \n"); + return; + } + + exit (0); + return; +} + + + +/** + ** show system commands + **/ +static void +system_show_timer (uint32_t argc, char *argv[]) +{ + if (argv[1] && *argv[1] == '?') { + printf("system_show_timer - lists timer stats \n"); + return; + } + + stw_system_timer_stats(); + return; +} + + +/** + ** show peer commands + **/ +static void +peer_show_peer_all (uint32_t argc, char *argv[]) +{ + if (argv[1] && *argv[1] == '?') { + printf("peer_show_all - lists all peers \n"); + printf("\n"); + return; + } + + dlep_peer_list_all(); + return; +} + + +static void +peer_show_fsm_history (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + if (argv[1] && *argv[1] == '?') { + printf("peer_show_fsm_history - display peer state history \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (p2peer) { + dlep_client_fsm_show_history(p2peer); + } else { + printf("Input error: local peer id %u not known \n", nid); + } + return; +} + + +static void +peer_show_fsm_table (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + if (argv[1] && *argv[1] == '?') { + printf("peer_show_fsm_table - displays peer state machine \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (p2peer) { + dlep_client_fsm_show_state_table(p2peer); + } else { + printf("Input error: local peer id %u not known \n", nid); + } + return; +} + + +static void +neighbor_show_neighbor_mac (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + uint16_t nid; + + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_show_mac - " + "display neighbor info for MAC address \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + p2config = dlep_get_config_ptr(); + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (!p2peer) { + printf("Input error: local peer id %u not known \n", nid); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac address missing \n"); + return; + } + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (p2neighbor) { + dlep_neighbor_display(p2neighbor); + } else { + printf("Input error: mac address %s not known \n", argv[1]); + } + return; +} + + +static void +neighbor_show_all_neighbors (uint32_t argc, char *argv[]) +{ + if (argv[1] && *argv[1] == '?') { + printf("neighbor_show_all - lists all client neighbors \n"); + printf("\n"); + return; + } + + dlep_peer_neighbor_list_all(); + return; +} + + +static void +neighbor_show_fsm_history (uint32_t argc, char *argv[]) +{ + uint32_t nid; + uint8_t mac_address[8]; + dlep_context_neighbor_t *p2neighbor; + dlep_context_peer_t *p2peer; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_show_fsm_history - displays " + "neighbor state history\n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (!p2peer) { + printf("Input error: local peer id %u not known \n", nid); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac address missing \n"); + return; + } + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (p2neighbor) { + dlep_client_neighbor_fsm_show_history(p2neighbor); + } else { + printf("Input error: mac address %s not known \n", argv[1]); + } + return; +} + + +static void +neighbor_show_fsm_table (uint32_t argc, char *argv[]) +{ + uint32_t nid; + uint8_t mac_address[8]; + dlep_context_neighbor_t *p2neighbor; + dlep_context_peer_t *p2peer; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_show_fsm_table - displays neighbor " + "state machine\n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (!p2peer) { + printf("Input error: local peer id %u not known \n", nid); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac address missing \n"); + return; + } + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (p2neighbor) { + dlep_client_neighbor_fsm_show_state_table(p2neighbor); + } else { + printf("Input error: mac address %s not known \n", argv[1]); + } + return; +} + + +/** + ** test peer commands + **/ +static void +peer_test_peer_term (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + if (argv[1] && *argv[1] == '?') { + printf("peer_test_terminate - sends a peer terminate \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (p2peer) { + p2peer->status_code = RFC5444_MSG_TIMEOUT; /* suriya just added for now */ + dlep_client_fsm_engine(user_peer_term_request_e, p2peer, NULL); + + } else { + printf("Input error: local peer id %u not known \n", nid); + } + return; + +} + +static void +peer_test_peer_update (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + uint8_t rlq_tx,rlq_rx; + uint8_t resources; + uint64_t latency; + uint64_t cdr_tx,cdr_rx; + uint64_t mdr_tx,mdr_rx; + uint16_t mtu; + uint64_t temp; + uint32_t ttl; + + + if (argv[1] && *argv[1] == '?') { + printf("peer_test_update - sends a peer update \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (p2peer) { + if (argv[1]) { + temp = strtoul(argv[1], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + rlq_tx = RFC5444_100_PERCENT; + } else { + rlq_tx = temp; + } + } else { + printf("Input error: rlq tx missing \n"); + return; + } + + if (argv[2]) { + temp = strtoul(argv[2], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + rlq_rx = RFC5444_100_PERCENT; + } else { + rlq_rx = temp; + } + } else { + printf("Input error: rlq rx missing \n"); + return; + } + if (argv[3]) { + temp = strtoul(argv[3], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + resources = RFC5444_100_PERCENT; + } else { + resources = temp; + } + } else { + printf("Input error: resources missing \n"); + return; + } + + latency=0; + + if (argv[4]) { + latency = strtoull(argv[4], NULL, 10); + } else { + printf("Input error: latency missing \n"); + return; + } + cdr_tx = 0; + if (argv[5]) { + cdr_tx = strtoull(argv[5], NULL, 10); + } else { + printf("Input error: cdr tx missing \n"); + return; + } + + cdr_rx = 0; + if (argv[6]) { + cdr_rx = strtoull(argv[6], NULL, 10); + } else { + printf("Input error: cdr rx missing \n"); + return; + } + + + mdr_tx = 0; + if (argv[7]) { + mdr_tx = strtoull(argv[7], NULL, 10); + } else { + printf("Input error: mdr tx missing \n"); + return; + } + + mdr_rx = 0; + if (argv[8]) { + mdr_rx = strtoull(argv[8], NULL, 10); + } else { + printf("Input error: mdr rx missing \n"); + return; + } + + mtu = 0; + if (argv[9]) { + mtu = strtoull(argv[9], NULL, 10); + } else { + printf("Input error: mtu missing \n"); + return; + } + + ttl = 0; + if (argv[10]) { + ttl = strtoull(argv[10], NULL, 10); + } + +#if 0 + if (argv[11]) { + printf(" Input error: extra argument is passed \n"); + return; + } +#endif + + /* set the neighbor data to be picked up at the next interval */ + p2peer->rlq_tx = rlq_tx; + p2peer->rlq_rx = rlq_rx; + p2peer->resources = resources; + p2peer->latency = latency; + p2peer->cdr_tx = cdr_tx; + p2peer->cdr_rx = cdr_rx; + p2peer->mdr_tx = mdr_tx; + p2peer->mdr_rx = mdr_rx; + p2peer->mtu = mtu; + p2peer->ttl = ttl; + + send_dlep_peer_update_request(p2peer); + + printf(" metrics updated: RLQ TX=%u RLQ RX=%u \n" + + "Resources =%u \n" + "Latency=%llu \n" + "CDR TX=%llu CDR RX=%llu \n" + "MDR TX=%llu MDR RX=%llu \n" + "MTU =%u", + rlq_tx, + rlq_rx, + resources, + latency, + cdr_tx, + cdr_rx, + mdr_tx, + mdr_rx, + mtu); + + } else { + printf("Input error: local peer id %u not known \n", nid); + } + return; +} + + +/** + ** test neighbor commands + **/ +static void +cli_test_neighbor_update_msg (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_test_update_msg - generate a neighbor up \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2config = dlep_get_config_ptr(); + p2peer = dlep_get_peer_by_peer_id(1); + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + p2neighbor = dlep_neighbor_allocate(p2peer, mac_address); + } + + if (!p2neighbor) { + printf("Error: new neighbor instaniation failed \n"); + return; + } + + /* don't send the layer 3 addresses, force router to ARP/ND */ + ipv4_zero_address(&p2neighbor->ipv4_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + + /* set the neighbor metrics */ + p2neighbor->rlq_rx = 100; + p2neighbor->rlq_tx = 100; + p2neighbor->resources = 100; + p2neighbor->latency = 250; + p2neighbor->cdr_rx = 100000000; + p2neighbor->cdr_tx = 100000000; + p2neighbor->mdr_rx = 100000000; + p2neighbor->mdr_tx = 100000000; + p2neighbor->mtu = 1500; + send_dlep_neighbor_address_request(p2peer, p2neighbor); + /* + * start the ack timer + */ + (void)stw_system_timer_start(&p2neighbor->neighbor_init_ack_tmr, + p2peer->neighbor_up_ack_tmo, + p2peer->neighbor_up_ack_tmo, + &dlep_neighbor_init_ack_tmr, + (void *)p2neighbor); + + return; +} + + + +static void +cli_test_neighbor_up (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + ipv4_address_t ipv4_address; + + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_test_up - generate " + " a neighbor up with Layer 3 addresse\n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" - 210.123.234.102 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + + if (argv[2]) { + ipv4_dot_decimal2digits(&ipv4_address, argv[2]); + ipv4_print_address(NULL, &ipv4_address); + } else { + printf("Input error: IPv4 is missing \n"); + return; + } + + /* if (argv[3]) { + ipv6_ascii2digits(&ipv6_address, argv[3]); + ipv6_print_address(NULL, &ipv6_address); + } else { + printf("Input error: IPv6 is missing \n"); + return; + } */ + + if (argv[3]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + p2config = dlep_get_config_ptr(); + p2peer = dlep_get_peer_by_peer_id(1); + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + p2neighbor = dlep_neighbor_allocate(p2peer, mac_address); + } + + if (!p2neighbor) { + printf("Error: new neighbor instaniation failed \n"); + return; + } + + ipv4_copy_address(&p2neighbor->ipv4_address, &ipv4_address); + //ipv6_copy_address(&p2neighbor->ipv6_address, &ipv6_address); + + /* set the neighbor metrics */ + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources = 100; + p2neighbor->latency = 250; + p2neighbor->cdr_tx = 100000000; + p2neighbor->cdr_rx = 100000000; + p2neighbor->mdr_tx = 100000000; + p2neighbor->mdr_rx = 100000000; + p2neighbor->mtu = 1500; + + send_dlep_neighbor_up(p2peer, p2neighbor); + + /* + * start the ack timer + */ + (void)stw_system_timer_start(&p2neighbor->neighbor_init_ack_tmr, + p2peer->neighbor_up_ack_tmo, + p2peer->neighbor_up_ack_tmo, + &dlep_neighbor_init_ack_tmr, + (void *)p2neighbor); + + return; +} + + +static void +cli_test_neighbor_credit_up (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_test_up - generate a neighbor up \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2config = dlep_get_config_ptr(); + p2peer = dlep_get_peer_by_peer_id(1); + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + p2neighbor = dlep_neighbor_allocate(p2peer, mac_address); + } + + if (!p2neighbor) { + printf("Error: new neighbor instaniation failed \n"); + return; + } + + /* don't send the layer 3 addresses, force router to ARP/ND */ + ipv4_zero_address(&p2neighbor->ipv4_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + + /* set the neighbor metrics */ + p2neighbor->rlq_rx = 100; + p2neighbor->rlq_tx = 100; + p2neighbor->resources = 100; + p2neighbor->latency = 250; + p2neighbor->cdr_rx = 100000000; + p2neighbor->cdr_tx = 100000000; + p2neighbor->mdr_rx = 100000000; + p2neighbor->mdr_tx = 100000000; + p2neighbor->mtu = 1500; + + if (p2neighbor->CREDIT_NOT_SUPPORTED) { + p2neighbor->mrw = 0; + } else { + p2neighbor->mrw = 65534; + } + p2neighbor->rrw = 0; + + + send_dlep_neighbor_up(p2peer, p2neighbor); + + /* + * start the ack timer + */ + (void)stw_system_timer_start(&p2neighbor->neighbor_init_ack_tmr, + p2peer->neighbor_up_ack_tmo, + p2peer->neighbor_up_ack_tmo, + &dlep_neighbor_init_ack_tmr, + (void *)p2neighbor); + + return; +} + + +static void +cli_test_neighbor_metric_up (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + ipv4_address_t ipv4_address; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + uint8_t rlq_tx; + uint8_t rlq_rx; + uint8_t resources; + uint64_t latency; + uint64_t cdr_tx; + uint64_t cdr_rx; + uint64_t mdr_tx; + uint64_t mdr_rx; + uint16_t mtu; + uint32_t temp; + + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_test_metric_up " + " - generate a " + "neighbor up w/ metrics \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" ipv4 addrss \n"); + printf(" - 0 - 100 \n"); + printf(" - 0 - 100 \n"); + printf(" - 64-bit millisecond value \n"); + printf(" - 64-bit bps value \n"); + printf(" - 64-bit bps value \n"); + printf(" - 16-bit \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + if (argv[2]) { + ipv4_dot_decimal2digits(&ipv4_address, argv[2]); + ipv4_print_address(NULL, &ipv4_address); + } else { + printf("Input error: IPv4 is missing \n"); + return; + } + + p2config = dlep_get_config_ptr(); + p2peer = dlep_get_peer_by_peer_id(1); + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + p2neighbor = dlep_neighbor_allocate(p2peer, mac_address); + } + + if (!p2neighbor) { + printf("Error: new neighbor instaniation failed \n"); + return; + } + + ipv4_copy_address(&p2neighbor->ipv4_address, &ipv4_address); + + if (argv[3]) { + temp = strtoul(argv[3], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + rlq_tx = RFC5444_100_PERCENT; + rlq_rx = RFC5444_100_PERCENT; + } else { + rlq_tx = temp; + rlq_rx = temp; + } + } else { + printf("Input error: rlq missing \n"); + return; + } + + if (argv[4]) { + temp = strtoul(argv[4], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + resources = RFC5444_100_PERCENT; + } else { + resources = temp; + } + } else { + printf("Input error: resources tx missing \n"); + return; + } + + latency =0; + if (argv[5]) { + latency = strtoull(argv[5], NULL, 10); + } else { + printf("Input error: latency missing \n"); + return; + } + + cdr_tx = 0; + cdr_rx = 0; + if (argv[6]) { + cdr_tx = strtoull(argv[6], NULL, 10); + cdr_rx = strtoull(argv[6], NULL, 10); + } else { + printf("Input error: cdr missing \n"); + return; + } + + + mdr_tx = 0; + mdr_rx = 0; + if (argv[7]) { + mdr_tx = strtoull(argv[7], NULL, 10); + mdr_rx = strtoull(argv[7], NULL, 10); + } else { + printf("Input error: mdr_tx missing \n"); + return; + } + + + mtu = 0; + if (argv[8]) { + mtu = strtoul(argv[8], NULL, 10); + } else { + printf("Input error: mtu missing \n"); + return; + } + + if (argv[9]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + + /* set the neighbor metrics for the neighbor up */ + p2neighbor->rlq_tx = rlq_tx; + p2neighbor->rlq_rx = rlq_rx; + p2neighbor->resources = resources; + p2neighbor->latency = latency; + p2neighbor->cdr_tx = cdr_tx; + p2neighbor->cdr_rx = cdr_rx; + p2neighbor->mdr_tx = mdr_tx; + p2neighbor->mdr_rx = mdr_rx; + p2neighbor->mtu = mtu; + + printf(" sending reaching here\n"); + send_dlep_neighbor_up(p2peer, p2neighbor); + return; +} + + +static void +cli_test_neighbor_ipv4_req (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + ipv4_address_t ipv4_address; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_test_ipv4 " + " - generate " + " a neighbor address IPv4 update \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" - add | drop \n"); + printf(" - 210.123.234.102 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + if (argv[3]) { + ipv4_dot_decimal2digits(&ipv4_address, argv[3]); + printf("\n Going to print entered ip add"); + ipv4_print_address(NULL, &ipv4_address); + } else { + printf("Input error: IPv4 is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Input error: local peer not present \n"); + return; + } + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Input error: neighbor mac not known \n"); + return; + } + + if (strcmp("add", argv[2]) == 0) { + p2neighbor->update_ipv4_operation = RFC5444_EXISTING_ADD_ADDRESS; + ipv4_copy_address(&p2neighbor->update_ipv4_address, &ipv4_address); +// send_dlep_neighbor_address_request(p2peer, p2neighbor); + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + } else if (strcmp("drop", argv[2]) == 0) { + p2neighbor->update_ipv4_operation = RFC5444_DROP_ADDRESS; + ipv4_copy_address(&p2neighbor->update_ipv4_address, &ipv4_address); + // send_dlep_neighbor_address_request(p2peer, p2neighbor); + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + } else { + printf("Input error: invalid add-drop operation \n"); + return; + } + return; +} + + +static void +cli_test_neighbor_ipv6_req (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8] , subnet; + ipv6_address_t ipv6_address; + ipv6_address_t ipv6_subnet_address; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_test_ipv6 " + " - generate " + " a neighbor address IPv6 update \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" - add | drop \n"); + printf(" - 11223344:22334455:33445566:44556677 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + if (argv[3]) { + ipv6_ascii2digits(&ipv6_address, argv[3]); + ipv6_print_address(NULL, &ipv6_address); + } else { + printf("Input error: IPv6 is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Input error: local peer not present \n"); + return; + } + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Input error: neighbor mac not known \n"); + return; + } + + if (argv[4]) { + ipv6_ascii2digits(&ipv6_subnet_address, argv[4]); + ipv6_print_address(NULL, &ipv6_subnet_address); + } else { + printf("Input error: IPv6 subnet is missing \n"); + return; + } + + + if(argv[5]) { + subnet = strtoul(argv[5], NULL, 10); + } else { + printf("Input error: subnet prefix is missing \n"); + return; + } + + if (strcmp("add", argv[2]) == 0) { + p2neighbor->update_ipv6_operation = RFC5444_EXISTING_ADD_ADDRESS; + ipv6_copy_address(&p2neighbor->update_ipv6_address, &ipv6_address); + ipv6_copy_address(&p2neighbor->update_ipv6_subnet_address, &ipv6_subnet_address); + p2neighbor->ipv6_subnet_prefix = subnet; + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + } else if (strcmp("drop", argv[2]) == 0) { + p2neighbor->update_ipv6_operation = RFC5444_DROP_ADDRESS; + ipv6_copy_address(&p2neighbor->update_ipv6_address, &ipv6_address); + ipv6_copy_address(&p2neighbor->update_ipv6_subnet_address, &ipv6_subnet_address); + p2neighbor->ipv6_subnet_prefix = subnet; + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + } else { + printf("Input error: invalid add-drop operation \n"); + return; + } + return; +} + + +static void +cli_test_neighbor_metrics (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + uint8_t rlq_tx,rlq_rx; + uint8_t resources_tx,resources_rx,resources; + uint64_t latency; + uint64_t cdr_tx,cdr_rx; + uint64_t mdr_tx,mdr_rx; + uint16_t mtu; + uint32_t temp; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_test_metrics " + " " + " - " + "generate a neighbor metrics update \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" - 0 - 100 \n"); + printf(" - 0 - 100 \n"); + printf(" - 0 - 100 \n"); + printf(" - 16-bit millisecond value \n"); + printf(" - 64-bit bps value \n"); + printf(" - 64-bit bps value \n"); + printf(" - 64-bit bps value \n"); + printf(" - 64-bit bps value \n"); + printf(" - 16-bit \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + if (argv[2]) { + temp = strtoul(argv[2], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + rlq_tx = RFC5444_100_PERCENT; + } else { + rlq_tx = temp; + } + } else { + printf("Input error: rlq tx missing \n"); + return; + } + + if (argv[3]) { + temp = strtoul(argv[3], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + rlq_rx = RFC5444_100_PERCENT; + } else { + rlq_rx = temp; + } + } else { + printf("Input error: rlq rx missing \n"); + return; + } + + if (argv[4]) { + temp = strtoul(argv[4], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + resources = RFC5444_100_PERCENT; + } else { + resources = temp; + } + } else { + printf("Input error: resources tx missing \n"); + return; + } + + latency = 0; + + if (argv[5]) { + latency = strtoull(argv[5], NULL, 10); + } else { + printf("Input error: latency missing \n"); + return; + } + + cdr_tx = 0; + if (argv[6]) { + cdr_tx = strtoull(argv[6], NULL, 10); + } else { + printf("Input error: cdr tx missing \n"); + return; + } + + cdr_rx = 0; + if (argv[7]) { + cdr_rx = strtoull(argv[7], NULL, 10); + } else { + printf("Input error: cdr rx missing \n"); + return; + } + + + mdr_tx = 0; + if (argv[8]) { + mdr_tx = strtoull(argv[8], NULL, 10); + } else { + printf("Input error: mdr tx missing \n"); + return; + } + + mdr_rx = 0; + if (argv[9]) { + mdr_rx = strtoull(argv[9], NULL, 10); + } else { + printf("Input error: mdr rx missing \n"); + return; + } + + mtu = 0; + if (argv[10]) { + mtu = strtoull(argv[10], NULL, 10); + } else { + printf("Input error: mtu missing \n"); + return; + } + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->rlq_tx = rlq_tx; + p2neighbor->rlq_rx = rlq_rx; + p2neighbor->resources = resources; + p2neighbor->latency = latency; + p2neighbor->cdr_tx = cdr_tx; + p2neighbor->cdr_rx = cdr_rx; + p2neighbor->mdr_tx = mdr_tx; + p2neighbor->mdr_rx = mdr_rx; + p2neighbor->mtu = mtu; + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: RLQ TX=%u RLQ RX=%u \n" + "Resources =%u \n" + "Latency=%llu \n" + "CDR TX=%llu CDR RX=%llu \n" + "MDR TX=%llu MDR RX=%llu \n" + "MTU =%u", + rlq_tx, + rlq_rx, + resources, + latency, + cdr_tx, + cdr_rx, + mdr_tx, + mdr_rx, + mtu); + return; +} + + +static void +cli_test_neighbor_rlq (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + uint8_t rlq_tx, rlq_rx; + uint32_t temp; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_test_rlq - " + "generate a neighbor metrics update with a new RLQ \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" - 0 - 100 \n"); + printf(" - 0 - 100 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + if (argv[2]) { + temp = strtoul(argv[2], NULL, 10); + if (temp > 100) { + rlq_tx =100; + } else { + rlq_tx = temp; + } + } else { + printf("Input error: rlq tx missing \n"); + return; + } + + if (argv[3]) { + temp = strtoul(argv[3], NULL, 10); + if (temp > 100) { + rlq_rx =100; + } else { + rlq_rx = temp; + } + } else { + printf("Input error: rlq rx missing \n"); + return; + } + + if (argv[4]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->rlq_tx = rlq_tx; + p2neighbor->rlq_rx = rlq_rx; + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: RLQ TX=%u \n", + rlq_tx); + printf(" metrics updated: RLQ RX=%u \n", + rlq_rx); + return; +} + + +static void +cli_test_neighbor_resources (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + uint8_t resources; + uint8_t temp; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_test_resources - " + "" + "generate a neighbor metrics update with a new resource \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" - 0 - 100 \n"); + printf(" - 0 - 100 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + if (argv[2]) { + temp = strtoul(argv[2], NULL, 10); + if (temp > 100) { + resources = 100; + } else { + resources = temp; + } + } else { + printf("Input error: resources missing \n"); + return; + } + + if (argv[3]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->resources = resources; + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: Resources=%u \n", + resources); + return; +} + + +static void +cli_test_neighbor_latency (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + uint64_t latency; + uint64_t temp; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_test_latency -" + "generate a neighbor metrics update with a new latency \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" 64-bit millisecond value \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + latency = 0 ; + if (argv[2]) { + latency = strtoull(argv[2], NULL, 10); + } else { + printf("Input error: latency missing \n"); + return; + } + + if (argv[3]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->latency = latency; + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: Latency=%u \n", + latency); + return; +} + + +static void +cli_test_neighbor_cdr (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + uint64_t cdr_tx, cdr_rx; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_test_cdr - " + "generate a neighbor metrics update with a new CDR\n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" 64-bit bps value \n"); + printf(" 64-bit bps value \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + cdr_tx = 0; + if (argv[2]) { + cdr_tx = strtoull(argv[2], NULL, 10); + } else { + printf("Input error: cdr_tx missing \n"); + return; + } + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->cdr_tx = cdr_tx; + + cdr_rx = 0; + if (argv[3]) { + cdr_rx = strtoull(argv[3], NULL, 10); + } else { + printf("Input error: cdr_rx missing \n"); + return; + } + + if (argv[4]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->cdr_rx = cdr_rx; + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: CDR TX=%llu \n", + cdr_tx); + printf(" metrics updated: CDR RX=%llu \n", + cdr_rx); + return; +} + + +static void +cli_test_neighbor_mdr (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + uint64_t mdr_tx, mdr_rx; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_test_mdr - " + "generate a neighbor metrics update with a new MDR\n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" 64-bit bps value \n"); + printf(" 64-bit bps value \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + mdr_tx = 0; + if (argv[2]) { + mdr_tx = strtoull(argv[2], NULL, 10); + } else { + printf("Input error: mdr_tx missing \n"); + return; + } + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->mdr_tx = mdr_tx; + + mdr_rx = 0; + if (argv[3]) { + mdr_rx = strtoull(argv[3], NULL, 10); + } else { + printf("Input error: mdr_rx missing \n"); + return; + } + + if (argv[4]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->mdr_rx = mdr_rx; + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: MDR TX=%llu \n", + mdr_tx); + printf(" metrics updated: MDR RX=%llu \n", + mdr_rx); + return; +} + +static void +cli_test_neighbor_mtu (uint16_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + uint16_t mtu; + uint16_t temp; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_test_mdr - " + "generate a neighbor metrics update with a new MDR\n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" 64-bit bps value \n"); + printf(" 64-bit bps value \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + if (argv[2]) { + temp = strtoull(argv[2], NULL, 10); + if ((temp >= 64) && (temp <= 1500)) { + mtu = temp; + } else { + mtu = 1500; + } + } else { + printf("Input error: mtu missing \n"); + return; + } + + if (argv[3]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->mtu = mtu; + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: MTU=%u \n", + mtu); + return; +} + + +static void +cli_test_neighbor_down (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_test_down - generate a " + "neighbor down \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + if (argv[2]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + //return; + } + + dlep_client_neighbor_fsm_engine(neighbor_term_user_req_e, + p2peer, p2neighbor); + return; +} + +static void +peer_test_peer_offer (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (p2peer) { + dlep_client_fsm_engine(peer_offer_e, p2peer, NULL); + + } else { + printf("Input error: local peer id %u not known \n", nid); + } + return; +} +static void +peer_test_init_ack (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + printf("reaching here\n"); + send_dlep_peer_init_ack(p2peer); + return; +} +static void +peer_test_update_res (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + send_dlep_peer_update_response(p2peer); + return; +} +static void +peer_test_term_res (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + + send_dlep_peer_termination_ack(p2peer); + return; +} +static void +peer_test_heartbeat (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + + send_dlep_peer_heartbeat(p2peer); + return; +} +static void +test_session_init (uint32_t argc, char *argv[]) +{ + int temp; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("session init enter 0 or 1 \n"); + printf("\n"); + return; + } + + temp = strtoul(argv[1], NULL, 10); + if(temp ==0 || temp ==1) { + init = strtoul(argv[1], NULL, 10); + } + else { + printf("Input error : Invalid option should be 0 or 1 \n"); + } + + return; +} + +/** + * NAME + * dlep_cli_engine + * + * SYNOPSIS + * void + * dlep_cli_engine() + * + * DESCRIPTION + * Drives the Radio Test Tool CLI. + * + * INPUT PARAMETERS + * input_string This is a string containing user input. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_cli_engine (char *input_string) +{ + cli_engine(input_string); + return; +} + + +/** + * NAME + * dlep_cli_init + * + * SYNOPSIS + * void + * dlep_cli_init() + * + * DESCRIPTION + * Registers the dlep test tool commands with the cli + * facility. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_cli_init (void) +{ + cli_init_data_t init_data; + RC_CLI_t rc; + + strcpy(init_data.prefix, "Radio Test Tool"); + cli_init(&init_data); + + dlep_debug_cli_init(); + //dlep_source_cli_init(); + fuzz_dlep_cli_init(); + + + /* + * Create directory and commands + */ + + rc = cli_mkdir("system", &cli_show_dir, &show_system_dir); + rc = cli_mkdir("peer", &cli_show_dir, &show_peer_dir); + rc = cli_mkdir("neighbor", &cli_show_dir, &show_neighbor_dir); + +// rc = cli_mkdir("peer", &cli_clear_dir, &clear_peer_dir); +// rc = cli_mkdir("neighbor", &cli_clear_dir, &clear_neighbor_dir); + + rc = cli_mkdir("peer", &cli_test_dir, &test_peer_dir); + rc = cli_mkdir("neighbor", &cli_test_dir, &test_neighbor_dir); + + + /* + * root commands + */ + rc = cli_mkcmd("start", system_start, + NULL, &system_start_cmd); + rc = cli_mkcmd("stop", system_stop, + NULL, &system_stop_cmd); + + /* + * show system + */ + rc = cli_mkcmd("system_show_timer", system_show_timer, + &show_system_dir, &show_timer_stats_cmd); + + /* + * show peer + */ + rc = cli_mkcmd("peer_show_all", peer_show_peer_all, + &show_peer_dir, &show_peer_all_cmd); + rc = cli_mkcmd("peer_show_fsm_history", peer_show_fsm_history, + &show_peer_dir, &show_peer_fsm_history_cmd); + rc = cli_mkcmd("peer_show_fsm_table", peer_show_fsm_table, + &show_peer_dir, &show_peer_fsm_table_cmd); + + /* + * show neighbor + */ + rc = cli_mkcmd("neighbor_show_mac", neighbor_show_neighbor_mac, + &show_neighbor_dir, &show_neighbor_mac_cmd); + rc = cli_mkcmd("neighbor_show_all", neighbor_show_all_neighbors, + &show_neighbor_dir, &show_neighbors_on_peer_cmd); + rc = cli_mkcmd("neighbor_show_fsm_history", neighbor_show_fsm_history, + &show_neighbor_dir, &show_neighbor_fsm_history_cmd); + rc = cli_mkcmd("neighbor_show_fsm_table", neighbor_show_fsm_table, + &show_neighbor_dir, &show_neighbor_fsm_table_cmd); + + /* + * test peer + */ + + rc = cli_mkcmd("test_session_init", test_session_init, + &test_peer_dir, &test_session_init_cmd); + + rc = cli_mkcmd("peer_test_terminate", peer_test_peer_term, + &test_peer_dir, &test_peer_term_cmd); + + rc = cli_mkcmd("peer_test_update", peer_test_peer_update, + &test_peer_dir, &test_peer_update_cmd); + + /* added for testing purpose */ + rc= cli_mkcmd("peer_test_offer", peer_test_peer_offer, + &test_peer_dir, &test_peer_offer_cmd); + + rc=cli_mkcmd("peer_test_init_ack", peer_test_init_ack, + &test_peer_dir, &test_peer_init_ack_cmd); + rc=cli_mkcmd("peer_test_update_res", peer_test_update_res, + &test_peer_dir, &test_peer_update_res_cmd); + rc=cli_mkcmd("peer_test_term_res", peer_test_term_res, + &test_peer_dir, &test_peer_term_res_cmd); + rc=cli_mkcmd("peer_test_heartbeat", peer_test_heartbeat, + &test_peer_dir, &test_peer_heartbeat_cmd); + + /* + * test neighbor + */ + rc = cli_mkcmd("neighbor_test_up", cli_test_neighbor_up, + &test_neighbor_dir, &test_neighbor_up_cmd); + /* rc = cli_mkcmd("neighbor_test_l3_up", cli_test_neighbor_l3_up, + &test_neighbor_dir, &test_neighbor_l3_up_cmd); */ + rc = cli_mkcmd("neighbor_test_credit_up", cli_test_neighbor_credit_up, + &test_neighbor_dir, &test_neighbor_credit_up_cmd); + rc = cli_mkcmd("neighbor_test_metric_up", cli_test_neighbor_metric_up, + &test_neighbor_dir, &test_neighbor_metric_up_cmd); + + rc = cli_mkcmd("neighbor_test_ipv4", cli_test_neighbor_ipv4_req, + &test_neighbor_dir, &test_neighbor_ipv4_req_cmd); + rc = cli_mkcmd("neighbor_test_ipv6", cli_test_neighbor_ipv6_req, + &test_neighbor_dir, &test_neighbor_ipv6_req_cmd); + + rc = cli_mkcmd("neighbor_test_down", cli_test_neighbor_down, + &test_neighbor_dir, &test_neighbor_down_cmd); + rc = cli_mkcmd("neighbor_test_metrics", cli_test_neighbor_metrics, + &test_neighbor_dir, &test_neighbor_metrics_cmd); + + rc = cli_mkcmd("neighbor_test_rlq", cli_test_neighbor_rlq, + &test_neighbor_dir, &test_neighbor_rlq_cmd); + rc = cli_mkcmd("neighbor_test_resources", cli_test_neighbor_resources, + &test_neighbor_dir, &test_neighbor_resources_cmd); + rc = cli_mkcmd("neighbor_test_latency", cli_test_neighbor_latency, + &test_neighbor_dir, &test_neighbor_latency_cmd); + rc = cli_mkcmd("neighbor_test_cdr", cli_test_neighbor_cdr, + &test_neighbor_dir, &test_neighbor_cdr_cmd); + rc = cli_mkcmd("neighbor_test_mdr", cli_test_neighbor_mdr, + &test_neighbor_dir, &test_neighbor_mdr_cmd); + rc = cli_mkcmd("neighbor_test_mtu", cli_test_neighbor_mtu, + &test_neighbor_dir, &test_neighbor_mtu_cmd); + rc = cli_mkcmd("neighbor_test_update_msg", cli_test_neighbor_update_msg, + &test_neighbor_dir, &test_neighbor_update_cmd); + + return; +} + diff --git a/dlep_radio_ipv4/sim_dlep_radio_cli.h b/dlep_radio_ipv4/sim_dlep_radio_cli.h new file mode 100644 index 0000000..c8f08b4 --- /dev/null +++ b/dlep_radio_ipv4/sim_dlep_radio_cli.h @@ -0,0 +1,43 @@ +/*------------------------------------------------------------------ + * sim_radio_cli.h -- Radio simulator CLI support + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __SIM_RADIO_CLI_H__ +#define __SIM_RADIO_CLI_H__ + + +extern +void dlep_cli_engine(char *input_string); + +extern +void dlep_cli_init(void); + +#endif + diff --git a/dlep_radio_ipv4/stw_system_timer.c b/dlep_radio_ipv4/stw_system_timer.c new file mode 100644 index 0000000..56f74e6 --- /dev/null +++ b/dlep_radio_ipv4/stw_system_timer.c @@ -0,0 +1,339 @@ +/*----------------------------------------------------------------- + * stw_system_timer.c -- System Timer Wheel APIs + * + * February 2005, Bo Berry + * + * Copyright (c) 2005-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include "stw_system_timer.h" + + +static stw_t *stw_system_handle = 0; + + +/** + * NAME + * stw_system_timer_prepare + * + * SYNOPSIS + * #include "stw_system_timer.h" + * void + * stw_system_timer_prepare(stw_tmr_t *tmr) + * + * DESCRIPTION + * Utility routine to initialize the links of timer elements. + * + * INPUT PARAMETERS + * tmr - pointer to the timer + * + * OUTPUT PARAMETERS + * tmr - updated + * + * RETURN VALUE + * none + * + */ +void +stw_system_timer_prepare (stw_tmr_t *tmr) +{ + stw_timer_prepare(tmr); + return; +} + + +/** + * NAME + * stw_system_timer_stats + * + * SYNOPSIS + * #include "stw_system_timer.h" + * void + * stw_system_timer_stats(void) + * + * DESCRIPTION + * Displays the stats for the system timer wheel. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +stw_system_timer_stats (void) +{ + stw_timer_stats(stw_system_handle); + return; +} + + +/** + * NAME + * stw_system_timer_running + * + * SYNOPSIS + * #include "stw_system_timer.h" + * boolean_t + * stw_system_timer_running(stw_tmr_t *tmr) + * + * DESCRIPTION + * Returns TRUE if the timer is active + * + * INPUT PARAMETERS + * tmr - pointer to the timer + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE==tmer is active + * False==timer is not active + * + */ +boolean_t +stw_system_timer_running (stw_tmr_t *tmr) +{ + return (stw_timer_running(tmr)); +} + + +/** + * NAME + * stw_system_timer_start + * + * SYNOPSIS + * #include "stw_system_timer.h" + * RC_STW_t + * stw_system_timer_start(stw_tmr_t *tmr, + * uint32_t delay, + * uint32_t periodic_delay, + * stw_call_back user_cb, + * void *parm) + * + * DESCRIPTION + * Start (or restart) a system timer to expire + * in the future. If the timer is currently active, + * it will be stopped first then restarted with + * time delay requested. + * + * INPUT PARAMETERS + * tmr - pointer to the timer element + * + * delay - specified delay in milliseconds + * + * periodic_delay - periodic delay in milliseconds + * + * user_cb - application function call-back to be + * invoked when the timer expires. This + * call-back must not block. + * + * parm - persistent parameter passed to the application + * call-back upon expiration + * + * OUTPUT PARAMETERS + * tmr - updated with the user_cb and the parm, and + * put on the tiemr wheel of fortune. + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_system_timer_start (stw_tmr_t *tmr, + uint32_t delay, + uint32_t periodic_delay, + stw_call_back user_cb, + void *parm) +{ + return (stw_timer_start(stw_system_handle, + tmr, + delay, + periodic_delay, + user_cb, + parm)); +} + + +/** + * NAME + * stw_system_timer_stop + * + * SYNOPSIS + * #include "stw_system_timer.h" + * RC_STW_t + * stw_system_timer_stop(stw_tmr_t *tmr) + * + * DESCRIPTION + * Stop the timer by removing it from the timer wheel. + * Note that it is safe to call this function with a + * timer that has already been stopped in order to + * avoid making all callers check for an active timer + * first. + * + * INPUT PARAMETERS + * tmr - pointer to the timer element + * + * OUTPUT PARAMETERS + * tmr - updated, taken off the wheel + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_system_timer_stop (stw_tmr_t *tmr) +{ + return (stw_timer_stop(stw_system_handle, tmr)); +} + + +/** + * NAME + * stw_system_timer_tick + * + * SYNOPSIS + * #include "stw_system_timer.h" + * void + * stw_system_timer_tick(void) + * + * DESCRIPTION + * Expire timers on the current spoke and move + * the wheel cursor forward to the next spoke. + * + * Application call-backs must be non-blocking + * + * INPUT PARAMETERS + * stw - pointer to the timer wheel + * + * OUTPUT PARAMETERS + * stw is updated, timers at the current tick are + * expired. + * + * RETURN VALUE + * none + * + */ +void +stw_system_timer_tick (void) +{ + /* + * protect from the possibility of not having initialized the stw yet + */ + if (stw_system_handle) { + stw_timer_tick(stw_system_handle); + } + return; +} + + +/** + * NAME + * stw_system_timer_destroy + * + * SYNOPSIS + * #include "stw_system_timer.h" + * RC_STW_t + * stw_system_timer_destroy(void) + * + * DESCRIPTION + * Destroys the timer wheel. All timers are stopped + * and resources released. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_system_timer_destroy (void) +{ + return (stw_timer_destroy(stw_system_handle)); +} + + +/** + * NAME + * stw_system_timer_create + * + * SYNOPSIS + * #include "stw_system_timer.h" + * RC_STW_t + * stw_system_timer_create(uint32_t wheel_size, + * uint32_t granularity, + * const char *p2name ) + * + * DESCRIPTION + * This function is used to create and initialize the system timer + * wheel. Timers must not be started before this routine is called. + * + * INPUT PARAMETERS + * wheel_size - number of spokes in the wheel. The number + * of spoks should be engineered such that + * wheel_size >= (longest duration / granularity ) + * Depending upon the number of concurrent timers, the + * distribution of those timers, it may be beneficial to + * further increase the wheel size. Objective is to + * minimize frequency of 'long' timers requiring wheel + * revolutions. + * + * granularity - milliseconds between ticks + * + * *p2name - pointer to the name of identify wheel. + * Limited to STW_NAME_LENGTH + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_system_timer_create (uint32_t wheel_size, + uint32_t granularity, + const char *p2name) +{ + return (stw_timer_create(wheel_size, + granularity, + p2name, + &stw_system_handle)); +} + + diff --git a/dlep_radio_ipv4/stw_system_timer.h b/dlep_radio_ipv4/stw_system_timer.h new file mode 100644 index 0000000..ed6019e --- /dev/null +++ b/dlep_radio_ipv4/stw_system_timer.h @@ -0,0 +1,102 @@ +/*------------------------------------------------------------------ + * stw_system_timer.h -- System Timer Wheel Definitions + * + * July 2009 - Bo Berry + * + * Copyright (c) 2005-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __STW_SYSTEM_TIMER_H__ +#define __STW_SYSTEM_TIMER_H__ + +#include "safe_types.h" +#include "stw_timer.h" + + +/* + * Utility routine to initialize the links of timer elements. + */ +extern void +stw_system_timer_prepare(stw_tmr_t *tmr); + + +/* + * Displays timer wheel stats and counters to stdout. + */ +extern void +stw_system_timer_stats(void); + + +/* + * Returns the active status of a timer. + */ +extern boolean_t +stw_system_timer_running(stw_tmr_t *tmr); + + +/* + * Starts a new timer. If the timer is currently + * running, it is stopped and restarted anew. + */ +extern RC_STW_t +stw_system_timer_start(stw_tmr_t *tmr, + uint32_t delay, + uint32_t periodic_delay, + stw_call_back user_cb, + void *parm); + +/* + * Stops a currently running timer + */ +extern RC_STW_t +stw_system_timer_stop(stw_tmr_t *); + + +/* + * System Timer Wheel tick handler + */ +extern void +stw_system_timer_tick(void); + + +/* + * destroy the R2CP timer wheel + */ +extern RC_STW_t +stw_system_timer_destroy(void); + + +/* + * Creates and initializes the R2CP timer wheel + */ +extern RC_STW_t +stw_system_timer_create(uint32_t wheel_size, + uint32_t granularity, + const char *name); + + +#endif /* __STW_SYSTEM_TIMER_H__ */ + diff --git a/dlep_radio_ipv4/stw_timer.c b/dlep_radio_ipv4/stw_timer.c new file mode 100644 index 0000000..db77dd0 --- /dev/null +++ b/dlep_radio_ipv4/stw_timer.c @@ -0,0 +1,761 @@ +/*------------------------------------------------------------------ + * stw_timer.c -- Single Timer Wheel Timer + * + * February 2005, Bo Berry + * + * Copyright (c) 2002-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include + +#include "runtime_environment.h" +#include "safe_types.h" + +#include "stw_timer.h" + + +/* + * used to verify wheel pointers. Nothing special about + * the value, other than to help identify a valid stw pointer + */ +#define MAGIC_TAG ( 0x0FEDCA3BA ) + + +/* + * NAME + * tmr_enqueue + * + * SYNOPSIS + * #include "stw_timer.h" + * static void + * tmr_enqueue(stw_t *stw, stw_tmr_t *tmr, uint32_t delay) + * + * DESCRIPTION + * Enqueues the timer to the proper spoke per delay. + * + * INPUT PARAMETERS + * *stw - pointer to the timer wheel that the timer + * will run on + * + * *tmr - pointer to the timer element + * + * delay - delay in milliseconds + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + */ +static void +tmr_enqueue (stw_t *stw, stw_tmr_t *tmr, uint32_t delay) +{ + stw_links_t *prev, *spoke; + + uint32_t cursor; + uint32_t ticks; + uint32_t td; + + /* + * BEGIN CRITICAL REGION + */ + LOCK_INTERRUPTS(); + + if (delay < stw->granularity) { + /* + * must delay at least one tick, can not delay in past... + */ + ticks = 1; + + } else { + /* + * compute number ticks reqquired to expire the duration + */ + ticks = (delay / stw->granularity); + } + + /* + * tick displacement from current cursor + */ + td = (ticks % stw->wheel_size); + + /* + * times around the wheel required to expire duration + */ + tmr->rotation_count = (ticks / stw->wheel_size); + + /* + * calculate cursor to place the timer + */ + cursor = ((stw->spoke_index + td) % stw->wheel_size); + + spoke = &stw->spokes[cursor]; + /* + * We have a timer and now we have a spoke. All that is left is to + * link the timer to the spoke's list of timers. With a doubly linked + * list, there is no need to check for an empty list. We simply link + * it to the end of the list. This is the same price as putting it + * on the front of the list but feels more 'right'. + */ + prev = spoke->stw_prev; + tmr->links.stw_next = spoke; /* append to end of spoke */ + tmr->links.stw_prev = prev; + + prev->stw_next = (stw_links_t *)tmr; + spoke->stw_prev = (stw_links_t *)tmr; + + UNLOCK_INTERRUPTS(); + /* + * END CRITICAL REGION + */ + + return; +} + + + +/** + * NAME + * stw_timer_stats + * + * SYNOPSIS + * #include "stw_timer.h" + * void + * stw_timer_stats(const stw_t *stw) + * + * DESCRIPTION + * Displays the stats for the specified timer wheel. + * + * INPUT PARAMETERS + * *stw - pointer to the timer wheel + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +stw_timer_stats (const stw_t *stw) +{ + /* + * protect against a bad wheel + */ + if ((stw == NULL) || (stw->magic_tag != MAGIC_TAG)) { + return; + } + + printf("\n%s \n", stw->wheel_name ); + printf(" Granularity=%u\n", stw->granularity); + printf(" Wheel Size=%u\n", stw->wheel_size); + printf(" Tick Count=%u\n", stw->ticks); + printf(" Spoke Index=%u\n", stw->spoke_index); + + printf(" Active timers=%u\n", stw->timer_active); + printf(" Expired timers=%u\n", stw->timer_expired); + printf(" Hiwater mark=%u\n", stw->timer_hiwater_mark); + printf(" Started timers=%u\n", stw->timer_starts); + printf(" Cancelled timers=%u\n", stw->timer_cancelled); + return; +} + + +/** + * NAME + * stw_timer_running + * + * SYNOPSIS + * #include "stw_timer.h" + * boolean_t + * stw_timer_running(stw_tmr_t *tmr) + * + * DESCRIPTION + * RETURN VALUE TRUE if the timer structure is active + * + * INPUT PARAMETERS + * *tmr - pointer to the timer + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE==timer is active + * FALSE==timer is not active + * + */ +boolean_t +stw_timer_running (stw_tmr_t *tmr) +{ + if (tmr == NULL) { + return (FALSE); + } + + /* + * if the timer is linked, its active + */ + if (tmr->links.stw_next != NULL) { + return (TRUE); + } + + return (FALSE); +} + + +/** + * NAME + * stw_timer_prepare + * + * SYNOPSIS + * #include "stw_timer.h" + * void + * stw_timer_prepare(stw_tmr_t *tmr) + * + * Descriiption + * Utility routine to initialize the links of timer elements. + * + * INPUT PARAMETERS + * *tmr - pointer to the timer + * + * OUTPUT PARAMETERS + * *tmr - The timer links are initialized. + * + * RETURN VALUE + * none + * + */ +void +stw_timer_prepare (stw_tmr_t *tmr) +{ + if (tmr) { + tmr->links.stw_next = NULL; + tmr->links.stw_prev = NULL; + } +} + + +/** + * NAME + * stw_timer_start + * + * SYNOPSIS + * #include "stw_timer.h" + * RC_STW_t + * stw_timer_start(stw_t *stw, + * stw_tmr_t *tmr, + * uint32_t delay, + * uint32_t periodic_delay, + * stw_call_back user_cb, + * void *parm) + * + * DESCRIPTION + * Start (or restart) a timer to expire in the future. If the timer is + * currently linked to a timer wheel spoke, it will be removed + * first. A new timer spoke will be determined based on the millisecond + * time delay requested and linked into the appropriate + * timer wheel spoke. + * + * INPUT PARAMETERS + * *stw - pointer to the timer wheel + * + * *tmr - pointer to the timer element + * + * delay - initial delay in milliseconds + * + * periodic_delay - periodic delay in milliseconds + * + * user_cb - application function call-back to be + * invoked when the timer expires. This call-back + * must run-to-completion and not block. + * + * parm - persistent parameter passed to the application + * call-back upon expiration + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_timer_start (stw_t *stw, + stw_tmr_t *tmr, + uint32_t delay, + uint32_t periodic_delay, + stw_call_back user_cb, + void *parm) +{ + stw_links_t *next, *prev; + + + if (stw == NULL) { + return (RC_STW_NULL_WHEEL); + } + + if (tmr == NULL) { + return (RC_STW_NULL_TMR); + } + + if (stw->magic_tag != MAGIC_TAG) { + return (RC_STW_INVALID_WHEEL); + } + + + /* + * BEGIN CRITICAL REGION + */ + LOCK_INTERRUPTS(); + + /* + * First check to see if it is already running. If so, remove + * it from the wheel. We don't bother cleaning up the fields + * because we will be setting them below. + */ + next = tmr->links.stw_next; + if (next) { + prev = tmr->links.stw_prev; + next->stw_prev = prev; + prev->stw_next = next; + + /* + * stats book keeping + */ + stw->timer_active--; + } + + UNLOCK_INTERRUPTS(); + /* + * END CRITICAL REGION + */ + + + /* + * set user call_back and parameter + */ + tmr->func_ptr = user_cb; + tmr->parm = parm; + tmr->delay = delay; + tmr->periodic_delay = periodic_delay; + + tmr_enqueue(stw, tmr, delay); + + + stw->timer_starts++; + stw->timer_active++; + if (stw->timer_active > stw->timer_hiwater_mark) { + stw->timer_hiwater_mark = stw->timer_active; + } + + return (RC_STW_OK); +} + + +/** + * NAME + * stw_timer_stop + * + * SYNOPSIS + * #include "stw_timer.h" + * RC_STW_t + * stw_timer_stop(stw_t *stw, stw_tmr_t *tmr) + * + * DESCRIPTION + * Stop the timer by removing it from whatever timer wheel spoke list + * it is currently attached to (if any). Note that it is safe to call + * this function with a timer that has already been stopped in order to + * avoid making all callers check for a running timer first. + * + * INPUT PARAMETERS + * *stw - pointer to the timer wheel + * + * *tmr - pointer to the timer element + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_timer_stop (stw_t *stw, stw_tmr_t *tmr) +{ + stw_links_t *next, *prev; + + if (stw == NULL) { + return (RC_STW_NULL_WHEEL); + } + + if (tmr == NULL) { + return (RC_STW_NULL_TMR); + } + + if (stw->magic_tag != MAGIC_TAG ) { + return (RC_STW_INVALID_WHEEL); + } + + /* + * BEGIN CRITICAL REGION + */ + LOCK_INTERRUPTS(); + + next = tmr->links.stw_next; + if (next) { + prev = tmr->links.stw_prev; + next->stw_prev = prev; + prev->stw_next = next; + tmr->links.stw_next = NULL; /* NULL == tmr is free */ + tmr->links.stw_prev = NULL; + + /* + * stats bookkeeping + */ + stw->timer_active--; + stw->timer_cancelled++; + } + + UNLOCK_INTERRUPTS(); + /* + * END CRITICAL REGION + */ + + return (RC_STW_OK); +} + + +/** + * NAME + * stw_timer_tick + * + * SYNOPSIS + * #include "stw_timer.h" + * void + * stw_timer_tick(stw_t *stw) + * + * DESCRIPTION + * This function moves the wheel cursor forward to the + * next spoke and expire the timers. + * + * Application call-backs must be non-blocking + * + * INPUT PARAMETERS + * *stw - pointer to the timer wheel + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +stw_timer_tick (stw_t *stw) +{ + stw_links_t *spoke, *next, *prev; + stw_tmr_t *tmr; + + stw_call_back user_call_back; + + if ((stw == NULL) || (stw->magic_tag != MAGIC_TAG)) { + return; + } + + /* + * keep track of rolling the wheel + */ + stw->ticks++; + + /* + * advance the index to the next spoke + */ + stw->spoke_index = ( stw->spoke_index + 1 ) % + stw->wheel_size; + + /* + * Process the spoke, removing timers that have expired. + * If the timer rotation count is positive + * decrement and catch the timer on the next wheel revolution. + */ + spoke = &stw->spokes[stw->spoke_index]; + tmr = (stw_tmr_t *)spoke->stw_next; + + while( (stw_links_t *)tmr != spoke) { + + next = (stw_links_t *)tmr->links.stw_next; + prev = (stw_links_t *)tmr->links.stw_prev; + + /* + * if the timer is a long one and requires one or more rotations + * decrement rotation count and leave for next turn. + */ + if (tmr->rotation_count != 0) { + tmr->rotation_count--; + } else { + + /* + ** BEGIN CRITICAL REGION + */ + LOCK_INTERRUPTS(); + + prev->stw_next = next; + next->stw_prev = prev; + + tmr->links.stw_next = NULL; + tmr->links.stw_prev = NULL; + + /* book keeping */ + stw->timer_active--; + stw->timer_expired++; + + UNLOCK_INTERRUPTS(); + /* + ** END CRITICAL REGION + */ + + /* + * automatically restart the timer if periodic_delay > 0 + */ + if (tmr->periodic_delay > 0) { + tmr_enqueue(stw, tmr, tmr->periodic_delay); + stw->timer_active++; + } + + /* + * Invoke the user expiration handler to do the actual work. + */ + user_call_back = tmr->func_ptr; + (*user_call_back)(tmr, tmr->parm); + + } + + tmr = (stw_tmr_t *)next; + } + return; +} + + +/** + * NAME + * stw_timer_destroy + * + * SYNOPSIS + * #include "stw_timer.h" + * + * DESCRIPTION + * Destroys the specified timer wheel. All + * timers are stopped and resources released. + * + * INPUT PARAMETERS + * stw - pointer to the timer wheel + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_timer_destroy (stw_t *stw) +{ + uint32_t j; + stw_links_t *spoke; + + stw_tmr_t *tmr; + + + if (stw == NULL) { + return (RC_STW_NULL_WHEEL); + } + + if (stw->magic_tag != MAGIC_TAG ) { + return (RC_STW_INVALID_WHEEL); + } + + + /* + * Drive around the wheel and stop all timers + */ + + for (j = 0; j < stw->wheel_size; j++) { + spoke = &stw->spokes[j]; + + tmr = (stw_tmr_t *)spoke->stw_next; + + while ( (stw_links_t *)tmr != spoke) { + stw_timer_stop(stw, tmr); + + tmr = (stw_tmr_t *)spoke->stw_next; + } /* end while */ + + } /* end for */ + + /* + * clear the magic so we do not mistakenly access this wheel + */ + stw->magic_tag = 0; + + /* + * now free the wheel structures + */ + free(stw->spokes); + free(stw); + + return (RC_STW_OK); +} + + +/** + * NAME + * stw_timer_create + * + * SYNOPSIS + * #include "stw_timer.h" + * RC_STW_t + * stw_timer_create(uint32_t wheel_size, + * uint32_t granularity, + * const char *p2name, + * stw_t **stw) + * + * DESCRIPTION + * This function creates and initializes the timer wheel. Timers + * must not be started before this routine is called. + * + * Parmeters + * wheel_size - number of spokes in the wheel. The number + * of spokes should be engineered such that + * wheel_size >= (longest duration / granularity) + * Depending upon the number of concurrent timers, the + * distribution of those timers, it may be beneficial to + * further increase the wheel size. Objective is to + * minimize frequency of 'long' timers requiring wheel + * revolutions. + * + * granularity - milliseconds between ticks + * + * *p2name - pointer to the name of identify wheel. Limited + * to STW_NAME_LENGTH + * + * **stw - returned pointer to the created timer wheel + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_timer_create (uint32_t wheel_size, + uint32_t granularity, + const char *p2name, + stw_t **stw) +{ + uint32_t j; + stw_links_t *spoke; + + stw_t *p2stw; + + + if (stw == NULL) { + return (RC_STW_NULL_WHEEL); + } + *stw = NULL; + + /* + * we need to put some bounds to protect against extremely + * large numbers + */ + if (wheel_size < STW_MIN_WHEEL_SIZE || wheel_size > STW_MAX_WHEEL_SIZE) { + return (RC_STW_INVALID_WHEEL_SIZE); + } + + if (granularity < STW_MIN_GRANULARITY || + granularity > STW_MAX_GRANULARITY) { + return (RC_STW_INVALID_GRANULARITY); + } + + /* + * allocate memory for wheel control structure + */ + p2stw = (stw_t *)malloc( sizeof(stw_t)); + if (p2stw == NULL) { + return (RC_STW_NO_RESOURCES); + } + + /* + * allocate memory for wheel spokes + */ + p2stw->spokes = (stw_links_t *)malloc(wheel_size * sizeof(stw_links_t)); + if (p2stw->spokes == NULL) { + free(p2stw); + return (RC_STW_NO_RESOURCES); + } + + + /* + * Initialize the internal tick count at zero, should use + * safe string lib! + */ + strncpy(p2stw->wheel_name, p2name, STW_NAME_LENGTH-1); + p2stw->wheel_name[STW_NAME_LENGTH-1] = '\0'; + + p2stw->magic_tag = MAGIC_TAG; + + p2stw->ticks = 0; + + p2stw->spoke_index = 0; + p2stw->granularity = granularity; + p2stw->wheel_size = wheel_size; + + /* + * timer stats to tune wheel + */ + p2stw->timer_hiwater_mark = 0; + p2stw->timer_active = 0; + p2stw->timer_cancelled=0; + p2stw->timer_expired=0; + p2stw->timer_starts=0; + + /* + * Set all spokes to empty + */ + spoke = &p2stw->spokes[0]; + for (j = 0; j < wheel_size; j++) { + spoke->stw_next = spoke; /* empty spoke points to itself */ + spoke->stw_prev = spoke; + spoke++; + } + + *stw = p2stw; + return (RC_STW_OK); +} + + diff --git a/dlep_radio_ipv4/stw_timer.h b/dlep_radio_ipv4/stw_timer.h new file mode 100644 index 0000000..60219c6 --- /dev/null +++ b/dlep_radio_ipv4/stw_timer.h @@ -0,0 +1,234 @@ +/*------------------------------------------------------------------ + * stw_timer.h -- Definitions for Single Timer Wheel + * + * Februrary 2002, Bo Berry + * + * Copyright (c) 2005-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __STW_TIMER_H__ +#define __STW_TIMER_H__ + +#include "safe_types.h" + + +/* + * This file provides the public definitions for external users of the + * Timer Wheel Timer facility. + * + * The Single Timer Wheel Timer facility is optimized to support embedded + * timer structures, ie where the timer structure is integrated into the + * structure it is associated with. + * + * Definitions + * + * Spoke - A queue of timers set to expire. A timer wheel consists of + * multiple spokes. + * + * Granularity - The amount of time between the processing of each + * spoke. Granularity is measured in time units between ticks. + * + * Rotation - one complete turn around the wheel + * + * Timer Duration given 32 bits + * Time per Tick Duration + * ------------------------------------ + * 10ms 497.1 days + * 20ms 994.2 + * 50ms 2485.5 + * + * milliseconds per day [1000 * 60 * 60 * 24] + * + */ + + +typedef enum { + RC_STW_OK = 0, + RC_STW_NULL_NAME, + RC_STW_NULL_FV, + RC_STW_NULL_WHEEL, + RC_STW_NULL_TMR, + RC_STW_INVALID_WHEEL, + RC_STW_INVALID_WHEEL_SIZE, + RC_STW_INVALID_GRANULARITY, + RC_STW_NO_RESOURCES, +} RC_STW_t; + + + +/* + * we need to put some bounds to protect against extremely + * large numbers. Ranges selected from pratical experience. + */ + +/* + * range of valid wheel sizes + */ +#define STW_MIN_WHEEL_SIZE ( 32 ) +#define STW_MAX_WHEEL_SIZE ( 4096 ) + +/* + * Granularity of a timer tick in milliseconds + */ +#define STW_MIN_GRANULARITY ( 1 ) +#define STW_MAX_GRANULARITY ( 100 ) + + +/* + * stw_links + * Definition of the pointers used to link a timer into + * a spoke. Double-linked list for efficiency. + */ +typedef struct stw_links_t_ { + struct stw_links_t_ *stw_next; + struct stw_links_t_ *stw_prev; +} stw_links_t; + + + +/* + * Timer Wheel Structure used to manage the timer wheel + * and keep stats to help understand performance + */ +#define STW_NAME_LENGTH ( 32 ) + +typedef struct { + char wheel_name[ STW_NAME_LENGTH ]; + uint32_t magic_tag; /* for sanity check */ + uint32_t wheel_size; + uint32_t spoke_index; /* mod index around wheel */ + uint32_t ticks; /* absolute ticks */ + uint32_t granularity; /* millisecond per tick */ + + /* + * few book keeping parameters to help engineer the wheel + */ + uint32_t timer_hiwater_mark; + uint32_t timer_active; + uint32_t timer_cancelled; + uint32_t timer_expired; + uint32_t timer_starts; + + stw_links_t *spokes; +} stw_t; + + +/* + * stw_tmr_t + * Definition of a timer element. + * This can be malloc'ed or embedded into an existing + * application structure. + */ +typedef struct { + stw_links_t links; + uint32_t rotation_count; + uint32_t delay; /* initial delay */ + uint32_t periodic_delay; /* auto-restart if > 0 */ + void *func_ptr; + void *parm; +} stw_tmr_t; + + +/* + * Application call-back type to be invoked at timer + * expiration. The call-back must be short-n-sweet, + * non-blocking. + */ +typedef void (*stw_call_back)(stw_tmr_t *tmr, void *parm); + + + +/* + * stw_timer_running + * RETURN VALUEs TRUE if the timer is active + */ +extern boolean_t +stw_timer_running(stw_tmr_t *tmr); + + +/* + * stw_timer_prepare + * Utility routine to initialize the links of timer elements. + */ +extern void +stw_timer_prepare(stw_tmr_t *tmr); + + +/* + * Displays timer wheel stats and counters to stdout. + */ +extern void +stw_timer_stats(const stw_t *stw); + + +/* + * Starts a new timer. If the timer is currently running, + * it is stopped and restarted anew + */ +extern RC_STW_t +stw_timer_start(stw_t *stw, + stw_tmr_t *tmr, + uint32_t delay, + uint32_t periodic_delay, + stw_call_back user_cb, + void *parm); + + +/* + * stops a currently running timer + */ +extern RC_STW_t +stw_timer_stop(stw_t *stw, stw_tmr_t *tmr); + + +/* + * Timer Wheel tick handler which drives time for the + * specified wheel + */ +extern void +stw_timer_tick(stw_t *stw); + + +/* + * Destroys a timer wheel + */ +extern RC_STW_t +stw_timer_destroy(stw_t *stw); + + +/* + * creates and initializes a single timer wheel + */ +extern RC_STW_t +stw_timer_create(uint32_t wheel_size, + uint32_t granularity, + const char *name, + stw_t **stw); + + +#endif /* __STW_TIMER_H__ */ + + diff --git a/dlep_radio_ipv4/tags.lst b/dlep_radio_ipv4/tags.lst new file mode 100644 index 0000000..552eaed --- /dev/null +++ b/dlep_radio_ipv4/tags.lst @@ -0,0 +1,88 @@ +./rfc5444_decoder.c +./fsm.c +./dlep_client_metrics.c +./rfc5444_scratch_pad.c +./sim_dlep_radio.c +./ipv4_address.c +./dlep_porter.c +./fuzz_dlep_cli.c +./dlep_debug.c +./dlep_config.c +./sim_dlep_radio_cli.c +./rfc5444_packet_header.c +./fuzz_packet.c +./dlep_client_peer_event_handlers.c +./stw_system_timer.c +./fuzz_encoder_tlv.c +./mac_address.c +./dlep_client_peer_fsm.c +./dlep_message_builder.c +./rfc5444_decoder_tlv.c +./stw_timer.c +./dlep_source_cli.c +./rfc5444_encoder_tlv.c +./rfc5444_utils.c +./dlep_context_peer.c +./dlep_context_peer_management.c +./dlep_debug_cli.c +./fuzz_message_builder.c +./packet_dump.c +./dlep_client_neighbor_event_handlers.c +./rfc5444_encoder.c +./dlep_buffers.c +./dlep_client_message_parser.c +./dlep_client_neighbor_fsm.c +./dlep_context_neighbor.c +./dlep_client_timer.c +./rfc5444_experimental_tlv.c +./cli.c +./ipv6_address.c +./dlep_context_neighbor_management.c +./fuzz_message_builder.h +./rfc5444_experimental_tlv.h +./time_units.h +./dlep_context_peer_management.h +./dlep_client_peer_fsm.h +./dlep_source_cli.h +./stw_timer.h +./rfc5444_utils.h +./dlep_context_neighbor.h +./mac_address.h +./fsm.h +./rfc5444_decoder_tlv.h +./dlep_client_neighbor_event_handlers.h +./packet_dump.h +./runtime_environment.h +./dlep_buffers.h +./rfc5444_decoder.h +./dlep_client_message_parser.h +./dlep_sim_options.h +./dlep_client_metrics.h +./ipv4_address.h +./stw_system_timer.h +./dlep_message_builder.h +./sim_dlep_radio_cli.h +./fuzz_encoder_tlv.h +./network_order.h +./safe_limits.h +./dlep_debug_cli.h +./rfc5444_encoder.h +./dlep_debug.h +./dlep_server_neighbor_fsm.h +./rfc5444_types.h +./rfc5444_encoder_tlv.h +./safe_types.h +./fuzz_packet.h +./dlep_context_peer.h +./dlep_porter.h +./dlep_client_neighbor_fsm.h +./rfc5444_api_rc.h +./rfc5444_packet_header.h +./dlep_context_neighbor_management.h +./dlep_client_timer.h +./fuzz_dlep_cli.h +./dlep_client_peer_event_handlers.h +./rfc5444_scratch_pad.h +./dlep_config.h +./cli.h +./ipv6_address.h diff --git a/dlep_radio_ipv4/time_units.h b/dlep_radio_ipv4/time_units.h new file mode 100644 index 0000000..e835e0d --- /dev/null +++ b/dlep_radio_ipv4/time_units.h @@ -0,0 +1,173 @@ +/*---------------------------------------------------------------------- + * time_units.h + * + * January 2009, Bo Berry + * + * Copyright (c) 2005-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __TIME_UNITS_H__ +#define __TIME_UNITS_H__ + +#include "safe_limits.h" +#include "safe_types.h" + + +#define NANOSECONDS_PER_SECONDS ( 1000 * 1000 * 1000 ) +#define MICROSECONDS_PER_SECONDS ( 1000 * 1000 ) +#define MILLISECONDS_PER_SECONDS ( 1000 ) +#define DECISECONDS_PER_SECONDS ( 10 ) + + +/* + * Converts nanoseconds to microseconds. + * Can return 0. + */ +static inline uint32_t nano_to_microseconds (uint32_t nanoseconds) +{ + return (nanoseconds / 1000); +} + + +/* + * Converts nanoseconds to milliseconds. + * Can return 0. + */ +static inline uint32_t nano_to_milliseconds (uint32_t nanoseconds) +{ + return (nanoseconds / 1000 / 1000); +} + + +/* + * Converts nanoseconds to seconds. + * Can return 0. + */ +static inline uint32_t nano_to_seconds (uint32_t nanoseconds) +{ + return (nanoseconds / 1000 / 1000 / 1000); +} + + + +/* + * Converts milliseconds to nanoseconds. + * RETURN VALUEs 0 if there is an overflow. + */ +static inline uint32_t milli_to_nanoseconds (uint32_t milliseconds) +{ + uint32_t nanoseconds; + + if (milliseconds > (UINT32_MAX / 1000 / 1000)) { + nanoseconds = 0; + } else { + nanoseconds = (milliseconds * 1000 * 1000); + } + + return (nanoseconds); +} + + +/* + * Converts milliseconds to microseconds. + * RETURN VALUEs 0 if there is an overflow. + */ +static inline uint32_t milli_to_microseconds (uint32_t milliseconds) +{ + uint32_t microseconds; + + if (milliseconds > (UINT32_MAX / 1000)) { + microseconds = 0; + } else { + microseconds = (milliseconds * 1000); + } + return (microseconds); +} + + +/* + * Converts milliseconds to seconds. + * Can return 0. + */ +static inline uint32_t milli_to_seconds (uint32_t milliseconds) +{ + return (milliseconds / 1000); +} + + +/* + * Converts seconds to nanoseconds. + * RETURN VALUEs 0 if there is an overflow. + */ +static inline uint32_t secs_to_nanoseconds (uint32_t seconds) +{ + uint32_t nanoseconds; + + if (seconds > (UINT32_MAX / 1000 / 1000 / 1000)) { + nanoseconds = 0; + } else { + nanoseconds = (seconds * 1000 * 1000 * 1000); + } + return (nanoseconds); +} + + +/* + * Converts seconds to microseconds. + * RETURN VALUEs 0 if there is an overflow. + */ +static inline uint32_t secs_to_microseconds (uint32_t seconds) +{ + uint32_t microseconds; + + if (seconds > (UINT32_MAX / 1000 / 1000)) { + microseconds = 0; + } else { + microseconds = (seconds * 1000 * 1000); + } + return (microseconds); +} + + +/* + * Converts seconds to milliseconds. + * RETURN VALUEs 0 if there is an overflow. + */ +static inline uint32_t secs_to_milliseconds (uint32_t seconds) +{ + uint32_t milliseconds; + + if (seconds > (UINT32_MAX / 1000)) { + milliseconds = 0; + } else { + milliseconds = (seconds * 1000); + } + return (milliseconds); +} + + +#endif + diff --git a/dlep_radio_ipv6/1fuzz_dlep_cli.c b/dlep_radio_ipv6/1fuzz_dlep_cli.c new file mode 100644 index 0000000..efeebcc --- /dev/null +++ b/dlep_radio_ipv6/1fuzz_dlep_cli.c @@ -0,0 +1,406 @@ +/*------------------------------------------------------------------ + * fuzz_dlep_cli.c -- fuzz CLI support + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reerved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include +#include + +#include "safe_types.h" +#include "cli.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" +#include "stw_system_timer.h" +#include "packet_dump.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_debug_cli.h" +#include "dlep_client_neighbor_fsm.h" +#include "dlep_client_peer_fsm.h" +#include "dlep_porter.h" + +#include "fuzz_message_builder.h" +#include "fuzz_packet.h" + +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" + +#include "fuzz_dlep_cli.h" + + + + +/* + * directory record + */ +static cli_record_t cli_fuzz_dir; +static cli_record_t fuzz_peer_dir; +static cli_record_t fuzz_neighbor_dir; + + +/* + * test command records + */ +static cli_record_t test_peer_hbt_cmd; +static cli_record_t test_peer_term_cmd; +static cli_record_t fuzz_neighbor_up_cmd; + +static cli_record_t fuzz_neighbor_term_cmd; +static cli_record_t fuzz_neighbor_metrics_cmd; + + +/** + ** test peer commands + **/ +static void +peer_fuzz_peer_term (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + if (argv[1] && *argv[1] == '?') { + printf("peer_fuzz_terminate - sends a peer terminate \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (p2peer) { + send_fuzz_peer_terminate(p2peer); + + } else { + printf("Input error: local peer id %u not known \n", nid); + } + return; +} + +static void +peer_fuzz_heartbeat (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + if (argv[1] && *argv[1] == '?') { + printf("peer_fuzz_heartbeat - sends a peer heartbeat \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (p2peer) { + send_fuzz_peer_heartbeat(p2peer); + + } else { + printf("Input error: local peer id %u not known \n", nid); + } + return; +} + + + + +/** + ** test neighbor commands + **/ +static void +cli_fuzz_neighbor_up (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_fuzz_up - generate a neighbor up \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2config = dlep_get_config_ptr(); + p2peer = dlep_get_peer_by_peer_id(1); + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + p2neighbor = dlep_neighbor_allocate(p2peer, mac_address); + } + + if (!p2neighbor) { + printf("Error: new neighbor instaniation failed \n"); + return; + } + + /* don't send the layer 3 addresses, force router to ARP/ND */ + ipv4_zero_address(&p2neighbor->ipv4_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + + /* set the neighbor metrics */ + p2neighbor->rlq_tx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->latency = 250; + p2neighbor->cdr_tx = 100000000; + p2neighbor->mdr_tx = 100000000; + + send_fuzz_neighbor_up(p2peer, p2neighbor); + return; +} + + +static void +cli_fuzz_neighbor_metrics (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + uint8_t rlq; + uint8_t resources; + uint16_t latency; + uint64_t cdr; + uint64_t mdr; + uint32_t temp; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_fuzz_metrics " + " \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" - 0 - 100 \n"); + printf(" - 0 - 100 \n"); + printf(" - 16-bit millisecond value \n"); + printf(" - 64-bit bps value \n"); + printf(" - 64-bit bps value \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + if (argv[2]) { + temp = strtoul(argv[2], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + rlq = RFC5444_100_PERCENT; + } else { + rlq = temp; + } + } else { + printf("Input error: rlq missing \n"); + return; + } + + if (argv[3]) { + temp = strtoul(argv[3], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + resources = RFC5444_100_PERCENT; + } else { + resources = temp; + } + } else { + printf("Input error: resources missing \n"); + return; + } + + if (argv[4]) { + temp = strtoul(argv[4], NULL, 10); + if (temp > 16535) { + latency = 16535; /* 16-bit max */ + } else { + latency = temp; + } + } else { + printf("Input error: latency missing \n"); + return; + } + + cdr = 0; + if (argv[5]) { + cdr = strtoul(argv[5], NULL, 10); + } else { + printf("Input error: cdr missing \n"); + return; + } + + mdr = 0; + if (argv[6]) { + mdr = strtoul(argv[6], NULL, 10); + } else { + printf("Input error: mdr missing \n"); + return; + } + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->rlq_tx = rlq; + p2neighbor->resources_tx = resources; + p2neighbor->latency = latency; + p2neighbor->cdr_tx = cdr; + p2neighbor->mdr_tx = mdr; + + send_fuzz_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: RLQ=%u Resources=%u Latency=%u \n" + " CDR=%llu MDR=%llu \n", + rlq, + resources, + latency, + cdr, + mdr); + return; +} + + +static void +cli_fuzz_neighbor_term (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_fuzz_term - generate a " + "neighbor terminate \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + send_fuzz_neighbor_down(p2peer, p2neighbor); + + //dlep_client_neighbor_fsm_engine(neighbor_term_user_req_e, + // p2peer, p2neighbor); + return; +} + + +/** + * NAME + * fuzz_dlep_cli_init + * + * SYNOPSIS + * void + * fuzz_dlep_cli_init() + * + * DESCRIPTION + * Registers the dlep fuzzing commands with the cli + * facility. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +fuzz_dlep_cli_init (void) +{ + RC_CLI_t rc; + + /* + * Create directory and commands + */ + rc = cli_mkdir("fuzz", NULL, &cli_fuzz_dir); + + rc = cli_mkdir("peer", &cli_fuzz_dir, &fuzz_peer_dir); + rc = cli_mkdir("neighbor", &cli_fuzz_dir, &fuzz_neighbor_dir); + + + /* + * test peer + */ + rc = cli_mkcmd("peer_fuzz_terminate", peer_fuzz_peer_term, + &fuzz_peer_dir, &test_peer_term_cmd); + + rc = cli_mkcmd("peer_fuzz_heartbeat", peer_fuzz_heartbeat, + &fuzz_peer_dir, &test_peer_hbt_cmd); + + /* + * test neighbor + */ + rc = cli_mkcmd("neighbor_fuzz_up", cli_fuzz_neighbor_up, + &fuzz_neighbor_dir, &fuzz_neighbor_up_cmd); + + rc = cli_mkcmd("neighbor_fuzz_term", cli_fuzz_neighbor_term, + &fuzz_neighbor_dir, &fuzz_neighbor_term_cmd); + rc = cli_mkcmd("neighbor_fuzz_metrics", cli_fuzz_neighbor_metrics, + &fuzz_neighbor_dir, &fuzz_neighbor_metrics_cmd); + + return; +} + diff --git a/dlep_radio_ipv6/1fuzz_encoder_tlv.c b/dlep_radio_ipv6/1fuzz_encoder_tlv.c new file mode 100644 index 0000000..a253ef3 --- /dev/null +++ b/dlep_radio_ipv6/1fuzz_encoder_tlv.c @@ -0,0 +1,693 @@ +/*---------------------------------------------------------------------- + * fuzz_encoder_tlv.c -- routines to encode TLVs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "network_order.h" + +#include "rfc5444_types.h" +#include "rfc5444_encoder.h" +#include "rfc5444_encoder_tlv.h" + + + +/** + * NAME + * rfc5444_mac_address_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_mac_address_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t mac_address[]) + * + * DESCRIPTION + * Call this function to insert the remote MAC address TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * mac_address - the remote router MAC address. The MAC + * is used to uniquely address all neighbor messages. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | MAC Addr | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | Remote Router MAC Continued (32-bit) | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | MAC Addr | + * +-+-+-+-+-+-+-+-+ + * + */ + uint8_t +*fuzz_mac_address_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t mac_address[]) +{ +printf("fuzz_mac_address_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MAC_ADDRESS); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_MAC_ADDRESS_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MAC_ADDRESS_LENGTH); + dest += sizeof(uint16_t); + + dest = mac_put_address(dest, mac_address); + + /*** FUZZ the pointer ***/ + p2encoder_state->buildit_ptr = dest + 1; + return (dest); +} + + +/** + * NAME + * rfc5444_ipv4_address_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_ipv4_address_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t operation, + * ipv4_address_t ipv4) + * + * DESCRIPTION + * Call this function to insert the IPv4 TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * operation - indicates the operation to be applied + * on the IPv4 address + * RFC5444_EXISTING_NEW_ADDRESS + * RFC5444_WITHDRAW_ADDRESS + * + * ipv4 - the address + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | operation | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | IPv4 Address | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ +uint8_t +*fuzz_ipv4_address_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv4_address_t *ipv4) +{ +printf("fuzz_ipv4_address_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_IPV4_ADDRESS); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV4_ADDRESS_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, (RFC5444_TLV_IPV4_ADDRESS_LENGTH)); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, operation); + dest += sizeof(uint8_t); + + dest = ipv4_put_address(dest, ipv4); + + /* NETWORK_ORDER_PUTBYTE(dest, 24); + dest += sizeof(uint8_t); */ + + /*** FUZZ the pointer to short***/ + p2encoder_state->buildit_ptr = dest - 2; + return (dest); +} + + +//ipv6_address_tlv + +uint8_t +*fuzz_ipv6_address_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv6_address_t *ipv6) +{ +printf("fuzz_ipv6_address_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_IPV6_ADDRESS); + dest += sizeof(uint8_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV6_ADDRESS_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTLONG(dest, (RFC5444_TLV_IPV6_ADDRESS_LENGTH)); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, operation); + dest += sizeof(uint8_t); + + dest = ipv6_put_address(dest, ipv6); + + /* NETWORK_ORDER_PUTBYTE(dest, 24); + dest += sizeof(uint8_t); */ + + /*** FUZZ the pointer to short***/ + p2encoder_state->buildit_ptr = dest - 2; + return (dest); +} + + +/** + * NAME + * rfc5444_link_metric_mdr_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_mdr_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint64_t mdr) + * + * DESCRIPTION + * Call this function to insert the maximum datarate TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * mdr - the maximum theoretical data rate, in bits per + * second (bps), achieved on the link. When + * metrics are reported, the maximum data rate + * MUST be reported. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | MDR | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | MDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | MDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + */ + uint8_t +*fuzz_link_metric_mdr_tx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t mdr) +{ +printf("fuzz_link_metric_mdr_tx_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_MDR_METRIC_TX); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_MDR_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_MDR_LENGTH); + /*** FUZZ over write length ***/ + //dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, mdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + uint8_t +*fuzz_link_metric_mdr_rx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t mdr) +{ +printf("fuzz_link_metric_mdr_rx_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_MDR_METRIC_RX); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_MDR_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_MDR_LENGTH); + /*** FUZZ over write length ***/ + //dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, mdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + + +/** + * NAME + * rfc5444_link_metric_cdr_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_cdr_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint64_t cdr) + * + * DESCRIPTION + * Call this function to insert the current datarate TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * cdr - the current data rate, in bits per second + * (bps), achieved on the link. If there is no + * distinction between maximum and current + * data rate, current data rate SHOULD be set + * equal to the maximum data rate. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | CDR | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | CDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | CDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + */ +uint8_t +*fuzz_link_metric_cdr_tx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t cdr) +{ +printf("fuzz_link_metric_cdr_tx_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + /*** FUZZ the tlv type ***/ + //NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_CDR_METRIC_TX); + //dest += sizeof(uint16_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_CDR_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_CDR_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, cdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +uint8_t +*fuzz_link_metric_cdr_rx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t cdr) +{ +printf("fuzz_link_metric_cdr_rx_tlv"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + /*** FUZZ the tlv type ***/ + //NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_CDR_METRIC_RX); + //dest += sizeof(uint16_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_CDR_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_CDR_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, cdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} +/** + * NAME + * rfc5444_link_metric_latency_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_latency_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint64_t latency) + * + * DESCRIPTION + * Call this function to insert the latency TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * latency - the transmission delay that a packet + * encounters as it is transmitted over the link. + * This is reported in absolute delay, in + * milliseconds. If latency cannot be calculated, + * a value of 0 should be reported. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | Latency | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | Latency | + * +-+-+-+-+-+-+-+-+ + * + */ +uint8_t +*fuzz_link_metric_latency_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t latency) +{ +printf("fuzz_link_metric_latency_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_LATENCY_METRIC); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_LATENCY_FLAGS); + dest += sizeof(uint8_t); +#endif + /*** FUZZ the length***/ + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_LATENCY_LENGTH + 2); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLONG(dest, latency); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +uint8_t +*fuzz_link_metric_resources_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources) +{ +printf("fuzz_link_metric_resources_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_RESOURCES_METRIC); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, resources); + dest += sizeof(uint8_t); + + /*** FUZZ the pointer ***/ + p2encoder_state->buildit_ptr = dest + 1; + return (dest); +} +/** + * NAME + * rfc5444_link_metric_rlq_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_rq_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t rlq) + * + * DESCRIPTION + * Call this function to insert the RLQ TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * rlq - a non-dimensional number, 0-100, representing + * the relative link quality. A value of 100 + * represents a link of the highest quality. If + * the RLQ cannot be calculated, a value of 100 + * should be reported. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | RLQ | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + */ +uint8_t +*fuzz_link_metric_rlq_tx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t rlq) +{ +printf("fuzz_link_metric_rlq_tx_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_RLQ_METRIC_TX); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RLQ_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_RLQ_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, rlq); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +uint8_t +*fuzz_link_metric_rlq_rx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t rlq) +{ +printf("fuzz_link_metric_rlq_rx_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_RLQ_METRIC_RX); + dest += sizeof(uint16_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RLQ_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_RLQ_LENGTH); + dest += sizeof(uint16_t); + + /*** FUZZ the rlq value ***/ + //NETWORK_ORDER_PUTBYTE(dest, rlq); + //dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} +/* + * MTU + */ +uint8_t +*fuzz_mtu_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint16_t mtu) +{ +printf("fuzz_mtu_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MTU); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MTU_LENGTH); + dest += sizeof(uint16_t); + + /*** FUZZ the mtu value ***/ + + //NETWORK_ORDER_PUTBYTE(dest, mtu); + //dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/** + * NAME + * rfc5444_status_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_status_tlv(rfc5444_encoder_state_t *p2encoder_state, + * uint8_t status_code) + * + * DESCRIPTION + * Call this function to insert the peer status TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * status_code - protocol status code reflecting success + * of previous request + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | Status Code | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ +uint8_t +*fuzz_status_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t status_code) +{ +printf("fuzz_status_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_STATUS); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_STATUS_FLAGS); + dest += sizeof(uint8_t); +#endif + + /*** FUZZ the length ***/ + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_STATUS_LENGTH+2); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, status_code); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + diff --git a/dlep_radio_ipv6/1fuzz_message_builder.c b/dlep_radio_ipv6/1fuzz_message_builder.c new file mode 100644 index 0000000..528b377 --- /dev/null +++ b/dlep_radio_ipv6/1fuzz_message_builder.c @@ -0,0 +1,2411 @@ +/*---------------------------------------------------------------------- + * dlep_message_builder.c -- Routines to build the DLEP messages + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" +#include "packet_dump.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" +#include "rfc5444_encoder_tlv.h" +#include "rfc5444_encoder.h" + +#include "dlep_sim_options.h" +#include "dlep_debug.h" +#include "dlep_porter.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" +#include "rfc5444_experimental_tlv.h" + +#include "dlep_message_builder.h" +#include "dlep_client_timer.h" +#include "fuzz_encoder_tlv.h" + +#include "fuzz_message_builder.h" + +extern int TCP_READY; + + +/* + * Local API to increment a sequence number. Sequence numbers + * are simply request-response correlators. They are not + * checked for 'sequencing' or lost messages. The originator + * determines the sequence number so it can correlate the + * response. + */ +static uint16_t +dlep_get_next_sequence_number (uint16_t sequence_number) +{ + sequence_number++; + if (!sequence_number) { + sequence_number++; + } + return (sequence_number); +} + + +/** + * NAME + * send_fuzz_attached_peer_discovery + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_attached_peer_discovery( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a attached peer discovery message + * from the radio to the router to initiate the discovery process. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_attached_peer_discovery (dlep_context_peer_t *p2peer) +{ +printf("send_fuzz_attached_peer_discovery\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + TCP_READY = 0; +// printf("\n INSIDE send_fuzz_attached_peer_discovery "); + p2es = rfc5444_encoder_packet_start(); + + /* Adding message header */ + rfc5444_encoder_message_block_start(p2es, + RFC5444_SIG_ATT_PEER_DISCOVERY); + + packet_dump("OUTGOING-", + p2es->packet_ptr, + 1); + /* required */ + rfc5444_version_tlv(p2es, + RFC5444_DLEP_MAJOR_VERSION, + RFC5444_DLEP_MINOR_VERSION); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_detached_peer_discovery + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_detached_peer_discovery( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a detached peer discovery message + * from the radio to the router to initiate the discovery process. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_detached_peer_discovery (dlep_context_peer_t *p2peer) +{ +printf("send_fuzz_detached_peer_discovery\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + /* + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); +*/ + +// added for D5 + +rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_DET_PEER_DISCOVERY); + +/* This function call to add message lenth */ + +#if 0 +rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_REQ); +#endif +#if 0 + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +/* + // added for testing, will remove it +// rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_DET_PEER_DISCOVERY); + */ + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2peer->sequence = + dlep_get_next_sequence_number(p2peer->sequence); + p2peer->expected_peer_offer_sequence = p2peer->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + +#endif + /* required */ + rfc5444_version_tlv(p2es, + RFC5444_DLEP_MAJOR_VERSION, + RFC5444_DLEP_MINOR_VERSION); + + /* optional */ + rfc5444_peer_tlv(p2es, p2config->local_type_description); +#if 0 + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); +#if 0 + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } +#endif + + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_peer_offer + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_offer(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer offer message + * from the router to the radio in response to the + * peer attached/detached discovery message. This + * confirms discovery. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_peer_offer (dlep_context_peer_t *p2peer) +{ +printf("send_fuzz_peer_offer\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + p2es = rfc5444_encoder_packet_start(); + + /* Adding Message header */ + + rfc5444_encoder_signal_block_start(p2es, + RFC5444_SIG_PEER_OFFER, + DLEP_SIGNAL_FLAGS); + + rfc5444_peer_tlv(p2es, p2config->local_type_description); + + rfc5444_ipv4_connection_point_tlv(p2es, p2config->local_tcp_port, + &p2config->local_ipv4); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending peer offer : \n"); + printf(" signal code=%u RFC5444_SIG_PEER_OFFER \n", + RFC5444_SIG_PEER_OFFER); + } + + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + + /* Oppening TCP socket */ +// dlep_tcp_porter_open(p2config); + + rfc5444_encoder_free(p2es); + + return; +} + + + /** + * NAME + * send_fuzz_peer_init + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_init( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer init message + * from the radio to the router to initiate the TCP synchronization process. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ + void + send_fuzz_peer_init (dlep_context_peer_t *p2peer) + { +printf("send_fuzz_peer_init\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_INIT_REQ); + + /* required */ + rfc5444_version_tlv(p2es, + RFC5444_DLEP_MAJOR_VERSION, + RFC5444_DLEP_MINOR_VERSION); + + rfc5444_heartbeat_interval_tlv(p2es, p2config->peer_heartbeat_interval); + + rfc5444_link_metric_mdr_rx_tlv(p2es, 100000000); + p2peer->mdr_rx=100000000; + + rfc5444_link_metric_mdr_tx_tlv(p2es, 100000000); + p2peer->mdr_tx=100000000; + + rfc5444_link_metric_cdr_rx_tlv(p2es, 100000000); + p2peer->cdr_rx=100000000; + rfc5444_link_metric_cdr_tx_tlv(p2es, 250); + p2peer->cdr_tx =250; + + rfc5444_link_metric_latency_tlv(p2es, 250); + p2peer->latency = 250; + + rfc5444_link_metric_resources_tx_tlv(p2es, 100); + p2peer->resources_tx = 100; + rfc5444_link_metric_resources_rx_tlv(p2es, 100); + p2peer->resources_rx = 100; + + rfc5444_link_metric_rlq_rx_tlv(p2es, 100); + p2peer->rlq_rx = 100; + rfc5444_link_metric_rlq_tx_tlv(p2es, 100); + p2peer->rlq_tx = 100; + + + + /* optional */ + rfc5444_peer_tlv(p2es, p2config->local_type_description); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } +#if 0 + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + + + printf("\n CALLING dlep_tcp_connect"); +#endif + +#if 0 + dlep_tcp_connect(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); +#endif + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + /* Setting this flag inorder for dlep_tcp_receive to get called after tcp connect + * and first dlep_tcp_send is called inorder to avoid infinite call in loop. + */ + TCP_READY = 1; + + rfc5444_encoder_free(p2es); +// printf("\n PEER INIT REQUEST Sent"); + + return; +} + + /** + * NAME + * send_fuzz_peer_init_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_init( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer init message response + * from the radio to the router. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ + void + send_fuzz_peer_init_ack (dlep_context_peer_t *p2peer) + { +printf("send_fuzz_peer_init_ack\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_INIT_RES); + rfc5444_status_tlv(p2es, p2peer->status_code); + + rfc5444_peer_tlv(p2es, p2config->local_type_description); + + rfc5444_heartbeat_interval_tlv(p2es, p2config->peer_heartbeat_interval); + + rfc5444_link_metric_mdr_rx_tlv(p2es, 100000000); + p2peer->mdr_rx=100000000; + + rfc5444_link_metric_mdr_tx_tlv(p2es, 100000000); + p2peer->mdr_tx=100000000; + + rfc5444_link_metric_cdr_rx_tlv(p2es, 100000000); + p2peer->cdr_rx=100000000; + + rfc5444_link_metric_cdr_tx_tlv(p2es, 250); + p2peer->cdr_tx = 100000000; + + rfc5444_link_metric_latency_tlv(p2es, 250); + p2peer->latency = 250; + + rfc5444_link_metric_rlq_rx_tlv(p2es, 100); + p2peer->rlq_rx = 100; + + rfc5444_link_metric_rlq_tx_tlv(p2es, 100); + p2peer->rlq_tx = 100; + + rfc5444_link_metric_resources_tlv(p2es, 100); + p2peer->resources = 100; + + rfc5444_mtu_tlv(p2es, 100); + p2peer->mtu = 100; +/* + rfc5444_ipv4_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2config->local_ipv4); + ipv4_zero_address(&p2peer->ipv4_address); +*/ + rfc5444_ipv6_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2config->local_ipv6); + ipv6_zero_address(&p2peer->ipv6_address); + + /* rfc5444_ipv4_attached_subnet_tlv(p2es, RFC5444_EXISTING_ADD_ADDRESS); + rfc5444_encoder_message_block_end(p2es); +*/ + // rfc5444_ipv6_attached_subnet_tlv(p2es, RFC5444_EXISTING_ADD_ADDRESS); + rfc5444_encoder_message_block_end(p2es); + + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } +#if 0 + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + + + printf("\n CALLING dlep_tcp_connect"); +#endif + +#if 0 + dlep_tcp_connect(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); +#endif + + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Session initialization response : \n"); + printf(" Message code=%u RFC5444_MSG_PEER_INIT_RES\n",RFC5444_MSG_PEER_INIT_RES); + + } + + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + /* Setting this flag inorder for dlep_tcp_receive to get called after tcp connect + * and first dlep_tcp_send is called inorder to avoid infinite call in loop. + */ + TCP_READY = 1; + + rfc5444_encoder_free(p2es); + + return; +} + + +/** + * NAME + * send_fuzz_peer_heartbeat + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_heartbeat( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer heartbeat to + * maintain a persistent presence with the peer. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_peer_heartbeat (dlep_context_peer_t *p2peer) +{ +printf("send_fuzz_peer_heartbeat\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + +// printf("\n INSIDE send_fuzz_peer_heartbeat"); + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + 18); + +#if 0 + /* + * Get a unique sequence number + */ + p2peer->sequence = + dlep_get_next_sequence_number(p2peer->sequence); + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + /* rfc5444_heartbeat_interval_tlv(p2es, + p2config->peer_heartbeat_interval); */ + rfc5444_encoder_message_block_end(p2es); +#if 0 +#ifdef MULTIPLE_PEER_MESSAGES_PACKED + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_HEARTBEAT); + + /* + * Get a unique sequence number + * HB does not have an ACK, so the sequence number is not important. + */ + p2peer->sequence = + dlep_get_next_sequence_number(p2peer->sequence); + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); +#endif +#endif + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + /* if (TCP_READY ) { + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + } else { // Else send with UDP socket if heartbeat sent before TCP connection. + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + } */ + + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending heartbeat message : \n"); + printf(" Message code=18 RFC5444_MSG_PEER_HEARTBEAT\n"); + } + + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_peer_update_request + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_update_request( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer update message + * from the router to the radio. It is used to indicate + * a new layer 3 address or the removal of a layer 3 + * address. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_peer_update_request (dlep_context_peer_t *p2peer) +{ +printf("send_fuzz_peer_update_request\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_UPDATE_REQ); + +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2peer->sequence = dlep_get_next_sequence_number(p2peer->sequence); + p2peer->expected_peer_update_response_sequence = p2peer->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + if (p2peer->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2peer->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2peer->update_ipv4_operation, + &p2peer->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2peer->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2peer->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2peer->update_ipv6_operation, + &p2peer->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } +#if 0 + rfc5444_encoder_tlv_block_end(p2es); +#endif + printf("Sending mdr ,cdr, latency as fuzz\n"); + fuzz_link_metric_mdr_rx_tlv(p2es, p2peer->mdr_rx); + fuzz_link_metric_mdr_tx_tlv(p2es, p2peer->mdr_tx); + fuzz_link_metric_cdr_rx_tlv(p2es, p2peer->cdr_rx); + fuzz_link_metric_cdr_tx_tlv(p2es, p2peer->cdr_tx); + fuzz_link_metric_latency_tlv(p2es, p2peer->latency); + rfc5444_link_metric_resources_tlv(p2es, p2peer->resources); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2peer->rlq_tx); + rfc5444_link_metric_rlq_rx_tlv(p2es, p2peer->rlq_rx); + rfc5444_mtu_tlv(p2es, p2peer->mtu); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session update request :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_UPDATE_REQ\n", + RFC5444_MSG_PEER_UPDATE_REQ); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + + return; +} + + +/** + * NAME + * send_fuzz_peer_update_response + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_update_response( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer update response message + * from the radio to the router. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_peer_update_response (dlep_context_peer_t *p2peer) +{ +printf("send_fuzz_peer_update_response\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_UPDATE_RES); +#if 0 + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_status_tlv(p2es, p2peer->status_code); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_status_tlv(p2es, p2peer->status_code); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session update response :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_UPDATE_RES\n", + RFC5444_MSG_PEER_UPDATE_RES); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_peer_termination + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_termination(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer termination message + * from the router to the radio or from the radio to the + * router to termiante the association. As result all + * neighbor neighbors are also terminated. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_peer_terminate (dlep_context_peer_t *p2peer) +{ +printf("send_fuzz_peer_terminate\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + printf("\n send_fuzz_peer_termination in builder.c "); + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_REQ); + +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2peer->sequence = dlep_get_next_sequence_number( + p2peer->sequence); + p2peer->expected_peer_offer_sequence = p2peer->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +// printf("\n Adding Status TLV"); + rfc5444_status_tlv(p2es, p2peer->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + rfc5444_encoder_message_block_end(p2es); +#endif +#ifdef MULTIPLE_PEER_MESSAGES_PACKED + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_REQ); + + /* + * acks will not align with incremented sequence + * + * p2peer->sequence = dlep_get_next_sequence_number( + * p2peer->sequence); + * p2peer->expected_peer_offer_sequence = p2peer->sequence; + */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + + printf("Sending fuzz status tlv\n"); + fuzz_status_tlv(p2es, p2peer->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session termination :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_TERM_REQ\n", + RFC5444_MSG_PEER_TERM_REQ); + + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_peer_termination_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_peer_termination_ack(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer termination ACK + * message from the router to the radio or from the radio + * to the router in response to the peer terminate request. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_peer_termination_ack (dlep_context_peer_t *p2peer) +{ +printf("send_fuzz_peer_termination_ack\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_RES); +#if 0 + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + +// rfc5444_status_tlv(p2es, p2peer->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session terrmination message :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_TERM_REQ\n", + RFC5444_MSG_PEER_TERM_REQ); + } + + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_up + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_up(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor up message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_up (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_fuzz_neighbor_up\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_UP_REQ); + printf("Sending ip address as fuzz\n"); + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + /* add the IPv4 address if there is one to add */ + if (p2neighbor->ipv4_address.v4_addr.v4_addr32) { + fuzz_ipv4_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv4_address); + ipv4_zero_address(&p2neighbor->ipv4_address); + } + + /* add the IPv6 address if there is one to add */ + else if (p2neighbor->ipv6_address.v6_addr.v6_addr32[0] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[1] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[2] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[3]) { + rfc5444_ipv6_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv6_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_rx); + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_rx); + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_mtu_tlv(p2es, p2neighbor->mtu); + + rfc5444_ipv4_attached_subnet_tlv(p2es, RFC5444_EXISTING_ADD_ADDRESS); + + + if (!p2neighbor->CREDIT_NOT_SUPPORTED) { + rfc5444_credit_window_status_tlv(p2es, p2neighbor->mrw, p2neighbor->rrw); + } + + rfc5444_encoder_message_block_end(p2es); +#if 0 +//ifdef MULTIPLE_NEIGHBOR_MESSAGES_PACKED + /**** neighbor down ****/ + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_DOWN_REQ); + + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + p2neighbor->expected_neighbor_term_ack_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + /**** neighbor up ****/ + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_UP_REQ); + + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + p2neighbor->expected_neighbor_init_ack_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + /* add the IPv4 address if there is one to add */ + if (p2neighbor->ipv4_address.v4_addr.v4_addr32) { + rfc5444_ipv4_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv4_address); + ipv4_zero_address(&p2neighbor->ipv4_address); + } + + /* add the IPv6 address if there is one to add */ + if (p2neighbor->ipv6_address.v6_addr.v6_addr32[0] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[1] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[2] || + p2neighbor->ipv6_address.v6_addr.v6_addr32[3]) { + rfc5444_ipv6_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv6_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + } + + rfc5444_link_metric_mdr_tlv(p2es, p2neighbor->mdr); + + rfc5444_link_metric_cdr_tlv(p2es, p2neighbor->cdr); + + rfc5444_link_metric_latency_tlv(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); +#endif + + rfc5444_encoder_packet_end(p2es); + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination up:\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_UP_REQ\n", + RFC5444_MSG_NEIGHBOR_UP_REQ); + + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_up_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_up_ack(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor up ack message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_up_ack (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_fuzz_neighbor_up_ack\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_UP_RES); +#if 0 + /* echo the sequence number */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); +#if 0 + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_metrics + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_metrics(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor metrics message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context with the + * metrics data set + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_metrics (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_fuzz_neighbor_metrics\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_METRICS); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + else if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_rx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_rx); + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv(p2es, p2neighbor->latency); + + printf("Sending relative link quality , resources, mtu as fuzz\n"); + + fuzz_link_metric_resources_tlv(p2es, p2neighbor->resources); + + fuzz_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + fuzz_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + + fuzz_mtu_tlv(p2es, p2neighbor->mtu); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination update to metrics:\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_METRICS\n", + RFC5444_MSG_NEIGHBOR_METRICS); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + +void +send_fuzz_neighbor_credit_grant_req (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_fuzz_neighbor_credit_grant_req\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + + p2es = rfc5444_encoder_packet_start(); + +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_METRICS); + +#if 0 + /* + * Get a unique sequence number */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_credit_grand_request_tlv(p2es, p2neighbor->cgr); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + + /* + * start the ack timer. Using same neighbor_up_ack_tmo Neighbor Up Time. + */ + (void)stw_system_timer_start(&p2neighbor->neighbor_update_ack_tmr, + p2peer->neighbor_up_ack_tmo, + p2peer->neighbor_up_ack_tmo, + &dlep_neighbor_update_ack_tmr, + (void *)p2neighbor); + + return; +} + + +void +send_fuzz_neighbor_credit_reject (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_fuzz_neighbor_credit_reject\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + + p2es = rfc5444_encoder_packet_start(); + + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_METRICS); + + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_rx_tlv(p2es, p2neighbor->resources_tx); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_address_request + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_address_request(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a peer heartbeat. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_address_request (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_fuzz_neighbor_address_request\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_ADDRESS_REQ); + + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = + dlep_get_next_sequence_number(p2neighbor->sequence); + p2neighbor->expected_neighbor_address_response_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_rx); + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_rx); + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_mtu_tlv(p2es, p2neighbor->mtu); + + rfc5444_ipv4_attached_subnet_tlv(p2es, RFC5444_EXISTING_ADD_ADDRESS); + + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_address_response + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_address_response(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor address response. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_address_response (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_fuzz_neighbor_address_response\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_ADDRESS_RES); + + /* + * echo the neighbor sequence number + */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_down + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_down(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor down message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_down (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_fuzz_neighbor_down\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_DOWN_REQ); +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + p2neighbor->expected_neighbor_term_ack_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + + printf("Sending mac address as fuzz\n"); + fuzz_mac_address_tlv(p2es, p2neighbor->mac_address); + +// rfc5444_status_tlv(p2es, p2neighbor->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination down :\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_DOWN_REQ\n", + RFC5444_MSG_NEIGHBOR_DOWN_REQ); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_down_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_down_ack(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor down ack message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_down_ack (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_fuzz_neighbor_down_ack\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_DOWN_RES); +#if 0 + /* echo the sequence number */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination down response :\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_DOWN_RES\n", + RFC5444_MSG_NEIGHBOR_DOWN_RES); + + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_link_char_request + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_link_char_request(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor, + * uint64_t cdr, + * uint16_t latency) + * + * DESCRIPTION + * This function is used to send a link characteristic message from + * the server to the client. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * cdr - requested data rate + * + * latency - maximum latency requested + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_link_char_request (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor, + uint64_t cdr, + uint64_t latency) +{ +printf("send_fuzz_neighbor_link_char_request\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_LINK_CHAR_REQ); + +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = + dlep_get_next_sequence_number(p2neighbor->sequence); + p2neighbor->expected_neighbor_link_char_response_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (cdr) { + rfc5444_link_metric_cdr_tx_tlv(p2es, cdr); + rfc5444_link_metric_cdr_rx_tlv(p2es, cdr); + } + + + if (latency) { + rfc5444_link_metric_latency_tlv(p2es, latency); + } + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_fuzz_neighbor_link_char_response + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_fuzz_neighbor_link_char_response(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a link characteristic response from + * the client to the server. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_fuzz_neighbor_link_char_response (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_fuzz_neighbor_link_char_response\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_LINK_CHAR_RES); +#if 0 + /* echo the sequence number */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_tx); + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_mtu_tlv(p2es, p2neighbor->mtu); + +#if 0 + rfc5444_link_metric_resources_rx_tlv(p2es, p2neighbor->resources_tx); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination link char response :\n"); + printf(" Message code=%u FC5444_MSG_LINK_CHAR_RES\n", + RFC5444_MSG_LINK_CHAR_RES); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + diff --git a/dlep_radio_ipv6/CMakeLists.txt b/dlep_radio_ipv6/CMakeLists.txt new file mode 100644 index 0000000..e1bad66 --- /dev/null +++ b/dlep_radio_ipv6/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.0.0) +project (dlep_radio_ipv6) +file(GLOB SOURCES "*.c") +add_executable(dlep_radio_ipv6 ${SOURCES}) +install( + TARGETS dlep_radio_ipv6 + RUNTIME DESTINATION bin) + diff --git a/dlep_radio_ipv6/cli.c b/dlep_radio_ipv6/cli.c new file mode 100644 index 0000000..4db9b26 --- /dev/null +++ b/dlep_radio_ipv6/cli.c @@ -0,0 +1,936 @@ +/*------------------------------------------------------------------ + * cli.c -- command line interpreter + * + * Copyright (c) 2009 by B. Berry + * All rights resevered. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include +#include "safe_types.h" + +#include "cli.h" + + +/** + * cli -- command line interpreter + * + * DESCRIPTION + * command line interpreter (cli) provides a directory + * hierarchy of commands similar in concept to the linux + * directory structure. There exists the concept of a root + * directory and subdirectory. Subdirectories can be created + * under root or under other subdirectories. Commands can + * be created under root or any subdirectory. + * + * When the user enters a command, the matching command + * structure is located from the registered commands + * and the associated call-back function is invoked to + * execute the command. + * + * When the user enters a directory name to change directories, + * the cli will change to that directory and display the + * contents. This new directory becomes the present + * working directory (pwd). + * + * User call backs are invoked with the (argc, *argv[]) parameters. + * argv[0] is the command string while argv[1,2,...,ARGC_MAX] are + * command specific parameters. + * + * There are several built-in commands for directory navigation: + * h help + * ~ moves to the top directory, root + * .. moves the directory up one level + * ld lists both commands and directories + * ! (bang) global command execution + * ls global list of commands + * + * Optional built in directories + * cli_config_dir - Commands to manage configuration. + * cli_show_dir - Commands to show internals: configuration, data, etc. + * cli_clear_dir - Commands to clear counters, runtime data, etc. + * cli_opertion_dir - Commands to manage the runtime operation. + * cli_debug_dir - Commands to facilitate debugging. + * + * PUBLIC FUNCTIONS + * cli_mkcmd - add a command to a directory + * cli_mkdir - add a subdirectory to directory + * cli_engine - command processing engine + * cli_init - initialization + * + * + */ + +/* + * #define CLI_DEBUG ( 1 ) + */ +//#define CLI_DEBUG ( 1 ) + +#ifdef CLI_DEBUG +#define DEBUG_PRINTF(myargs...) printf(myargs) +#else +#define DEBUG_PRINTF(myargs...) ((void)0) +#endif + + + +/* + * The maximum number of entries displayed on a single line + * is ENTRIES_PER_LINE. If there are more than ENTRIES_PER_LINE, + * a newline is injected to avoid line wrap. Useful for small + * screens. + */ +#define ENTRIES_PER_LINE ( 3 ) + + + + +/* + * navigation commands + */ +#define CLI_H "h" /* h => help */ +#define CLI_HELP "help" /* help */ +#define CLI_QUESTION "?" /* help */ +#define CLI_UP_ONE ".." /* move up one directory level */ +#define CLI_ROOT_DIR "~" /* move to root directory */ +#define CLI_LIST_DIR "ld" /* list the current directory */ +#define CLI_GLOBAL_BANG "!" /* global execution */ +#define CLI_GLOBAL_LIST "ls" /* global command list */ + + + +/* + * root directory structure + */ +static cli_record_t cli_root_element; + +/* + * pointer to present working directory (pwd) + */ +static cli_record_t *current_directory; + + +static struct t_nodal_record *list; + + +/* + * Public directories that applications can register with. + * Enable define for these root directories. Once defined, + * apps can register in this directory structure. If not, + * applications register to the root directory. + */ +#ifdef CLI_ROOT_DIRS +//cli_record_t cli_config_dir; +cli_record_t cli_show_dir; +//cli_record_t cli_clear_dir; +//cli_record_t cli_operation_dir; +cli_record_t cli_debug_dir; +cli_record_t cli_test_dir; +#endif + + +#define CLI_PROMPT_LEN ( 32 ) +static char cli_prompt[CLI_PROMPT_LEN]; + + + + +static void +cli_help (void) +{ + printf("\n"); + printf(" Built-in commands \n"); + printf(" h help \n"); + printf(" ~ Returns to the top or root command directory \n"); + printf(" .. Moves the from the current directory up one directory \n"); + printf(" ld current directory listing \n"); + printf(" ! (bang) global command seek and execute \n"); + printf(" ls Global list of commands \n"); + printf(" All commands followed by \n"); + + printf("\n"); + return; +} + + + +static boolean_t +str_exact (char *p1, char *p2, size_t n) +{ + while (*p1) { + if (*p1 == *p2) { + p1++; + p2++; + } else { + return (FALSE); + } + } + + if (*p1 == *p2) { + return (TRUE); + } else { + return (FALSE); + } +} + + + + +/* + * NAME + * cli_bind_entry + * + * SYNOPSIS + * #include "cli.h" + * static RC_CLI_t + * cli_bind_entry(char *name, + * cli_funcvar_t fv, + * cli_record_t *dir_rec, + * cli_record_t *cmd_rec) + * + * DESCRIPTION + * This is an internal function to add a command/directory + * into the specified chain. To add an entry into the + * root directory, specify NULL for the directory pointer. + * + * INPUT PARAMETERS + * name the name of the user command. + * + * fv a pointer to the target function to be invoked + * when the command is entered. If NULL then + * the name is considered to be a directory. + * + * dir_rec a pointer to the directory record + * + * cmd_rec a pointer to the command record to be added + * + * RETURN VALUE + * RC_CLI_OK + * error otherwise + * + */ +static RC_CLI_t +cli_bind_entry (char *name, + cli_funcvar_t fv, + cli_record_t *dir_rec, + cli_record_t *cmd_rec) +{ + cli_record_t *p2list; + cli_record_t *p2parent_directory; + + if (name == NULL) { + return (RC_CLI_NULL_NAME); + } + + if (cmd_rec == NULL) { + return (RC_CLI_NULL_CMD); + } + + if (dir_rec == NULL) { + p2list = &cli_root_element; + } else { + p2list = dir_rec; + } + + p2parent_directory = p2list; + + + /* + * can not re-use a record + */ + if (cmd_rec == p2list) { + return (RC_CLI_RECORD_CORRUPT); + } + + /* + * check if the directory is empty to add the + * first entry + */ + if (p2list->link2subdir == NULL) { + p2list->link2subdir = cmd_rec; + + DEBUG_PRINTF("\"%s\" is the First entry in directory [%s]\n", + name, p2list->name ); + + } else { + /* + * Directory is not empty, so walk the list to + * check for duplicates and append the entry. + */ + + p2list = p2list->link2subdir; + + while (p2list->next_entry != NULL) { + /* + * can not re-use a record + */ + if (cmd_rec == p2list) { + return (RC_CLI_RECORD_CORRUPT); + } + + /* + * do not allow duplicate names within the same subdirectory + */ + if (str_exact(p2list->name, name, CLI_ENTRY_LEN)) { + return (RC_CLI_DUPLICATE); + } + + p2list = p2list->next_entry; + } + + /* + * Now we can append the new entry. + */ + p2list->next_entry = cmd_rec; + + DEBUG_PRINTF("Appended \"%s\" in directory [%s]\n", + name, dir_rec->name); + } + + /* + * setup the new entry record + */ + strncpy(cmd_rec->name, name, CLI_ENTRY_LEN-1); + cmd_rec->name[CLI_ENTRY_LEN-1] = '\0'; + cmd_rec->parent_dir = p2parent_directory; + cmd_rec->next_entry = NULL; + cmd_rec->link2subdir = NULL; + cmd_rec->fv = fv; + + if (cmd_rec->fv) { + cmd_rec->cmd_list = list; + list = cmd_rec; + } + + return (RC_CLI_OK); +} + + +/** + * NAME + * cli_mkcmd + * + * SYNOPSIS + * #include "cli.h" + * RC_CLI_t + * cli_mkcmd(char *name, + * cli_funcvar_t fv, + * cli_record_t *dir_rec, + * cli_record_t *cmd_rec) + * + * DESCRIPTION + * Add the new command into the specified directory. + * To add a command into the root directory, + * specify NULL for the directory pointer. + * + * INPUT PARAMETERS + * name pointer to the command name. + * + * fv pointer to the target function to be invoked + * when the command is entered. + * + * dir_rec pointer to the directory record where the + * new command is to be added. Use NULL for root. + * + * cmd_rec pointer to the new command record. + * + * RETURN VALUE + * RC_CLI_OK + * error otherwise + * + * EXAMPLES + * The examples below add three commands to my_directory. + * + * rcode = cli_mkcmd ( "command_one", funct_one, + * &my_directory_record, &cmd_one_record ); + * rcode = cli_mkcmd ( "command_two", funct_two, + * &my_directory_record, &cmd_two_record ); + * rcode = cli_mkcmd ( "command_three", funct_three, + * &my_directory_record, &cmd_three_record ); + * + */ +RC_CLI_t +cli_mkcmd (char *name, + cli_funcvar_t fv, + cli_record_t *dir_rec, + cli_record_t *cmd_rec) +{ + RC_CLI_t rc; + + if (fv == NULL) { + return (RC_CLI_NULL_FV); + } + + /* + * bind into ROOT if directory not specified + */ + if (dir_rec == NULL) { + dir_rec = &cli_root_element; + } + + /* + * you must bind only to a directory + */ + if (dir_rec->fv != NULL) { + return (RC_CLI_DIR_INVALID); + } + + rc = cli_bind_entry(name, fv, dir_rec, cmd_rec); + return (rc); +} + + +/** + * NAME + * cli_mkdir + * + * SYNOPSIS + * #include "cli.h" + * RC_CLI_t + * cli_mkdir(char *name, cli_record_t *dir_rec, + * cli_record_t *sub_dir) + * + * DESCRIPTION + * Add a new directory into the specified directory. + * To add a new directory into the ROOT directory, + * specify NULL for the directory pointer. + * + * INPUT PARAMETERS + * name pointer to the direcory name. + * + * dir_rec pointer to the directory record where the + * new subdir is to be added. Use NULL for root. + * + * cmd_rec pointer to the new directory record. + * + * RETURN VALUE + * RC_CLI_OK + * error otherwise + * + * EXAMPLES + * The example below adds a_directory (subdirectory) to the + * root directory. This is a visible entry. + * + * rc = cli_mkdir( "a_directory", NULL, + * &a_directory_record); + * + * + * The example below adds a_sub_directory (subdirectory) to the + * previously created directory 'a_directory_record'. + * + * rc = cli_mkdir( "a_sub_directory", &a_directory_record, + * &a_subdir_record); + * + */ +RC_CLI_t +cli_mkdir (char *name, cli_record_t *dir_rec, + cli_record_t *sub_dir) +{ + RC_CLI_t rc; + + /* + * bind into ROOT if the directory is not specified + */ + if (dir_rec == NULL) { + dir_rec = &cli_root_element; + } + + /* + * must bind only to an existing directory + */ + if (dir_rec->fv != NULL) { + return (RC_CLI_DIR_INVALID); + } + + rc = cli_bind_entry(name, NULL, dir_rec, sub_dir); + return (rc); +} + + +/* + * NAME + * global_command_list + * + * SYNOPSIS + * #include "cli.h" + * static void + * global_command_list(void) + * + * DESCRIPTION + * Displays the global list of commands. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * void + * + */ +static void +global_command_list (void) +{ + uint16_t count; + cli_record_t *cmd_rec; + + count = 0; + + /* + * global list of command + */ + printf("\n"); + cmd_rec = list; + while (cmd_rec != NULL) { + if (count){ printf(", "); } + + printf("%s", cmd_rec->name); + count++; + + /* + * prevent line wrap + */ + if (count >= ENTRIES_PER_LINE) { + printf("\n"); + count = 0; + } + cmd_rec = cmd_rec->cmd_list; + } + + return; +} + + +/* + * NAME + * list_directory + * + * SYNOPSIS + * #include "cli.h" + * static void + * list_directory(void) + * + * DESCRIPTION + * Display the contents of the directory, both commands and + * subdirectories. Directories are enclosed in brackets, [..]. + * + * INPUT PARAMETERS + * none + * + * RETURN VALUE + * void + * + */ +static void +list_directory (void) +{ + uint16_t count; + cli_record_t *cmd_tmp; + + count = 0; + + /* + * first list all directoies + * list directory with brackets: [ directory ] + */ + printf("\n"); + cmd_tmp = current_directory->link2subdir; + while (cmd_tmp != NULL) { + + /* fv == NULL means it is a directory */ + if (cmd_tmp->fv == NULL) { + if (count){ printf(", "); } + + printf("[%s]", cmd_tmp->name); + count++; + + /* + * prevent line wrap + */ + if (count >= ENTRIES_PER_LINE) { + printf("\n"); + count = 0; + } + } + cmd_tmp = cmd_tmp->next_entry; + } + + /* + * list commands + */ + cmd_tmp = current_directory->link2subdir; + while (cmd_tmp != NULL) { + + if (cmd_tmp->fv != NULL) { + if (count){ printf(", "); } + + printf("%s", cmd_tmp->name); + count++; + + /* + * prevent line wrap + */ + if (count >= ENTRIES_PER_LINE) { + printf("\n"); + count = 0; + } + } + cmd_tmp = cmd_tmp->next_entry; + } + + return; +} + + +/* + * NAME + * cli_find_cmd + * + * SYNOPSIS + * #include "cli.h" + * static cli_record_t + * *cli_find_cmd(char *name) + * + * DESCRIPTION + * An internal function to scan the current directory for the + * specified entry. + * + * INPUT PARAMETERS + * name pointer to the string to look for (null terminated). + * + * RETURN VALUE + * NULL string NOT found + * ptr Pointer to entry record if a match was found + * + */ +static cli_record_t +*cli_find_cmd (char *name) +{ + cli_record_t *cmd_rec; + + DEBUG_PRINTF("\nAttempting to Find \"%s\" in directory [%s]\n", + name, current_directory->name ); + + /* + * check for global command search + */ + if (*name == '!') { + DEBUG_PRINTF("\nGlobal command search! \n"); + + name++; + cmd_rec = list; + while (cmd_rec != NULL) { + DEBUG_PRINTF("\nglobal comparing \"%s\" with entry \"%s\"\n", + name, cmd_rec->name); + + if (str_exact(cmd_rec->name, name, CLI_ENTRY_LEN)) { + DEBUG_PRINTF("\nGlobal match found for -%s- \n", name); + return (cmd_rec); + } + cmd_rec = cmd_rec->cmd_list; + } + + printf("\n*Unknown entry \"%s\"\n", name); + return (NULL); + } + + /* + * now compare to existing command and directory entries + */ + cmd_rec = current_directory->link2subdir; + while (cmd_rec != NULL) { + DEBUG_PRINTF("\ncomparing \"%s\" with entry \"%s\"\n", + name, cmd_rec->name); + + if (str_exact(cmd_rec->name, name, CLI_ENTRY_LEN)) { + DEBUG_PRINTF("\nMatch found for -%s- \n", name); + return (cmd_rec); + } + cmd_rec = cmd_rec->next_entry; + } + + /* + * check to see if the user wants to go back one directory + */ + if (str_exact(name, CLI_UP_ONE, 2)) { + DEBUG_PRINTF("\nGo up one dir level \n"); + current_directory = current_directory->parent_dir; + return (NULL); + } + + /* + * check to see if user wants to go to the root directory + */ + if (str_exact(name, CLI_ROOT_DIR, 1)) { + DEBUG_PRINTF("\nGo to root \n"); + current_directory = &cli_root_element; + return (NULL); + } + + /* + * check to see if user wants to list entries + */ + if (str_exact(name, CLI_LIST_DIR, 2)) { + DEBUG_PRINTF("\nList directory \n"); + list_directory(); + return (NULL); + } + + if (str_exact(name, CLI_GLOBAL_LIST, 2)) { + DEBUG_PRINTF("\nGlobal List \n"); + global_command_list(); + return (NULL); + } + + if (str_exact(name, CLI_H, 1) || + str_exact(name, CLI_HELP, 4) || + str_exact(name, CLI_QUESTION, 1)) { + cli_help(); + return (NULL); + } + + /* did not find a match */ + printf("\n*Unknown entry \"%s\"\n", name); + return (NULL); +} + + +/** + * NAME + * cli_engine + * + * SYNOPSIS + * #include "cli.h" + * void + * cli_engine(char *input_string) + * + * DESCRIPTION + * The CLI engine. + * + * INPUT PARAMETERS + * input_string - The string as entered by the user. The cli + * processor will use the first token to match a + * valid directory or command entry. If the + * entry matches with a directory, the current + * directory is changed to that directory. + * + * If the entry is a command, the remainder of the + * string is passed to the user function. The user + * function can then continue parsing token. + * + * RETURN VALUE + * None + * + * : + * For example, a simple CLI process. + * for(;;) { + * gets(input_string); + * cli_engine(input_string); + * } + * + */ +void +cli_engine (char *input_string) +{ + cli_record_t *next_level; + uint32_t i; + char *p2str; + + uint32_t argc; + char *argv[ARGC_MAX]; + + if ((input_string == NULL) || (*input_string == '\0')) { + DEBUG_PRINTF("\nEmpty string entered\n"); + + printf("\n%s >", cli_prompt); + fflush(stdout); + return; + } + + for (i=0; i", cli_prompt); + fflush(stdout); + return; + } + + DEBUG_PRINTF("\n0 input token \"%s\"\n", argv[0]); + + /* + * now pick off parameters. + */ + argc = 1; + for (i=1; ifv != NULL) { + /* + * call users registered function + */ + (next_level->fv)(argc, &argv[0]); + + } else { + /* + * change to the subdirectory + */ + current_directory = next_level; + } + } else { + /* Did not find a match */ + } + + printf("\n%s >", cli_prompt); + fflush(stdout); + return; +} + + + +/** + * NAME + * cli_set_prompt + * + * SYNOPSIS + * #include "cli.h" + * void + * cli_set_prompt(char *prompt) + * + * DESCRIPTION + * This function is used to set a prompt string. + * + * INPUT PARAMETERS + * prompt - pointer to the string prompt + * + * RETURN VALUE + * none + * + */ +void +cli_set_prompt (char *prompt) +{ + if (prompt) { + strncpy(cli_prompt, prompt, CLI_PROMPT_LEN); + cli_prompt[CLI_PROMPT_LEN-1] = '\0'; + } + + return; +} + + + +/** + * NAME + * cli_init + * + * SYNOPSIS + * #include "cli.h" + * RC_CLI_t + * cli_init (cli_init_data_t *init_data) + * + * DESCRIPTION + * This function initializes the CLI facility. All the + * parameters listed in init_data must be provided. + * + * INPUT PARAMETERS + * init_data pointer to initialization information + * prefix - string to be displayed at the + * root directory + * + * RETURN VALUE + * RC_CLI_OK + * error otherwise + * + */ +RC_CLI_t +cli_init (cli_init_data_t *init_data) +{ + RC_CLI_t rc; + + strncpy(cli_prompt, "prompt", CLI_PROMPT_LEN); + cli_prompt[CLI_PROMPT_LEN-1] = '\0'; + + /* + * initialize the ROOT directory + */ + strncpy(cli_root_element.name, init_data->prefix, CLI_ENTRY_LEN); + + cli_root_element.name[CLI_ENTRY_LEN-1] = '\0'; + cli_root_element.fv = NULL; + cli_root_element.parent_dir = &cli_root_element; + cli_root_element.next_entry = NULL; + cli_root_element.link2subdir = NULL; + + /* mark end of hte command list */ + list = NULL; + + +#ifdef CLI_ROOT_DIRS +// rc = cli_mkdir("config", NULL, &cli_config_dir); + rc = cli_mkdir("show", NULL, &cli_show_dir); +// rc = cli_mkdir("clear", NULL, &cli_clear_dir); +// rc = cli_mkdir("operation", NULL, &cli_operation_dir); + rc = cli_mkdir("debug", NULL, &cli_debug_dir); + rc = cli_mkdir("test", NULL, &cli_test_dir); +#endif + + current_directory = &cli_root_element; + return (RC_CLI_OK); +} + diff --git a/dlep_radio_ipv6/cli.h b/dlep_radio_ipv6/cli.h new file mode 100644 index 0000000..62ffb92 --- /dev/null +++ b/dlep_radio_ipv6/cli.h @@ -0,0 +1,148 @@ +/*------------------------------------------------------------------ + * cli.h -- embedded command line interpreter + * + * Copyright (C) 2009 by B. Berry + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __CLI_H__ +#define __CLI_H__ + +#include + +/* + * Public directories that applications can register with. + * Enable define for these root directories. Once defined, + * apps can register in this directory structure. If not, + * applications register to the root directory. + */ +#define CLI_ROOT_DIRS ( 1 ) + + +/* + * This is the maximum number of parameters that can be passed + * to the application function. The parameters are passed to + * the application in the argument count and argument value + * format. + */ +#define ARGC_MAX ( 11 ) + + +/* + * Number of characters in an entry's name, for directories + * and commands + */ +#define CLI_ENTRY_LEN ( 34 ) + + +/* + * return codes + */ +typedef enum { + RC_CLI_OK = 0, + RC_CLI_NULL_NAME, + RC_CLI_NULL_FV, + RC_CLI_DUPLICATE, + RC_CLI_RECORD_CORRUPT, + RC_CLI_NULL_CMD, + RC_CLI_DIR_INVALID, +} RC_CLI_t; + + + +/* + * type def for call back function to process user command parsers + */ +typedef void (*cli_funcvar_t)(uint32_t argc, char *argv[]); + + +/* + * The structure for a directory or command entry. + */ +typedef struct t_nodal_record { + struct t_nodal_record *cmd_list; + char name[CLI_ENTRY_LEN+1]; + cli_funcvar_t fv; + struct t_nodal_record *parent_dir; + struct t_nodal_record *next_entry; + struct t_nodal_record *link2subdir; +} cli_record_t; + + + +/* + * A few common root command directories + * if enabled. + */ +#ifdef CLI_ROOT_DIRS +extern cli_record_t cli_config_dir; +extern cli_record_t cli_show_dir; +extern cli_record_t cli_clear_dir; +//extern cli_record_t cli_operation_dir; +extern cli_record_t cli_debug_dir; +extern cli_record_t cli_test_dir; +#endif + + +/* + * The structure required to initialize the CLI facility. + * It must be initialized before use. + */ +typedef struct { + char prefix[CLI_ENTRY_LEN]; +} cli_init_data_t; + + + +/* + * prototypes + */ + +/* add a command */ +extern RC_CLI_t cli_mkcmd(char *name, + cli_funcvar_t fv, + cli_record_t *dir_rec, + cli_record_t *cmd_rec); + + +/* make a directory */ +extern RC_CLI_t cli_mkdir(char *name, + cli_record_t *dir_rec, + cli_record_t *sub_dir); + + +/* drive the cli */ +extern void cli_engine(char *input_string); + + +/* set the prompt string */ +void cli_set_prompt(char *prompt); + + +/* init function */ +extern RC_CLI_t cli_init(cli_init_data_t *init_data); + +#endif /* __CLI_H__ */ + diff --git a/dlep_radio_ipv6/config_examples/ipv6_radio1.cfg b/dlep_radio_ipv6/config_examples/ipv6_radio1.cfg new file mode 100644 index 0000000..dad4baf --- /dev/null +++ b/dlep_radio_ipv6/config_examples/ipv6_radio1.cfg @@ -0,0 +1,60 @@ +# +# DLEP Sim Radio Config File +# +SIM_NAME ipv6_radio1 + +DEBUG_FLAGS 0xFF +#DEBUG_FLAGS 0x00 + +# When the MANUAL_START is enabled, the user +# will need to enter "start" on the simulator +# cli to start the simulator. +MANUAL_START +#DISCOVERY_START + +# string for the peer type TLV +TYPE_DESCRIPTION DLEP_Radio_Sim_1 + +LOCAL_UDP_PORT 854 +LOCAL_TCP_PORT 11115 +LOCAL_IPV6 3000:1:1:1:1:1:1:1111 + +#Server pot values +ROUTER_UDP_PORT 11116 +ROUTER_TCP_PORT 11117 +ROUTER_IPV6 3000:1:1:1:1:1:1:1112 + +LOCAL_ID 1111 + + + +### +### Add counters and timers and thresholds +### + +# The node heartbeat interval is only used by the client. The +# server takes the clients value. Time units are seconds. +DLEP_PEER_HEARTBEAT_INTERVAL 5 +DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD 2 + + +# The heuristics to retry a lost session init ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_UP_ACK_TMO 1000 +DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD 4 + + +# The interval to send metrics. +# Time units are in milliseconds. +#DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 2000 +DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 0 + + +# The heuristics to retry a lost session term ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_DOWN_ACK_TMO 1000 +DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD 4 + +# +# end config +# diff --git a/dlep_radio_ipv6/config_examples/ipv6_radio2.cfg b/dlep_radio_ipv6/config_examples/ipv6_radio2.cfg new file mode 100644 index 0000000..93fb51d --- /dev/null +++ b/dlep_radio_ipv6/config_examples/ipv6_radio2.cfg @@ -0,0 +1,60 @@ +# +# DLEP Sim Radio Config File +# +SIM_NAME ipv6_radio1 + +DEBUG_FLAGS 0xFF +#DEBUG_FLAGS 0x00 + +# When the MANUAL_START is enabled, the user +# will need to enter "start" on the simulator +# cli to start the simulator. +MANUAL_START +#DISCOVERY_START + +# string for the peer type TLV +TYPE_DESCRIPTION DLEP_Radio_Sim_1 + +LOCAL_UDP_PORT 854 +LOCAL_TCP_PORT 11125 +LOCAL_IPV6 3000:1:1:1:1:1:1:1111 + +#Server pot values +ROUTER_UDP_PORT 11126 +ROUTER_TCP_PORT 11127 +ROUTER_IPV6 3000:1:1:1:1:1:1:1113 + +LOCAL_ID 1111 + + + +### +### Add counters and timers and thresholds +### + +# The node heartbeat interval is only used by the client. The +# server takes the clients value. Time units are seconds. +DLEP_PEER_HEARTBEAT_INTERVAL 5 +DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD 2 + + +# The heuristics to retry a lost session init ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_UP_ACK_TMO 1000 +DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD 4 + + +# The interval to send metrics. +# Time units are in milliseconds. +#DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 2000 +DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 0 + + +# The heuristics to retry a lost session term ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_DOWN_ACK_TMO 1000 +DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD 4 + +# +# end config +# diff --git a/dlep_radio_ipv6/config_examples/my_radio_discovery.cfg b/dlep_radio_ipv6/config_examples/my_radio_discovery.cfg new file mode 100644 index 0000000..8aaaa0a --- /dev/null +++ b/dlep_radio_ipv6/config_examples/my_radio_discovery.cfg @@ -0,0 +1,60 @@ +# +# DLEP Sim Radio Config File +# +SIM_NAME radio_2 + +#DEBUG_FLAGS 0xFF + +# When the MANUAL_START is enabled, the user +# will need to enter "start" on the simulator +# cli to start the simulator. +#MANUAL_START +DISCOVERY_START + +# string for the peer type TLV +TYPE_DESCRIPTION DLEP_Radio_Sim_2 + +LOCAL_UDP_PORT 38681 +LOCAL_TCP_PORT 38682 +LOCAL_IPV4 9.0.0.179 + +ROUTER_UDP_PORT 38677 + +ROUTER_TCP_PORT 38675 +ROUTER_IPV4 9.1.1.201 + +LOCAL_ID 2222 + + + +### +### Add counters and timers and thresholds +### + +# The node heartbeat interval is only used by the client. The +# server takes the clients value. Time units are seconds. +DLEP_PEER_HEARTBEAT_INTERVAL 5 +DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD 2 + + +# The heuristics to retry a lost session init ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_UP_ACK_TMO 1000 +DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD 4 + + +# The interval to send metrics. +# Time units are in milliseconds. +DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 2000 +#DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 0 + + +# The heuristics to retry a lost session term ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_DOWN_ACK_TMO 1000 +DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD 4 + +# +# end config +# + diff --git a/dlep_radio_ipv6/config_examples/my_radio_discovery_2.cfg b/dlep_radio_ipv6/config_examples/my_radio_discovery_2.cfg new file mode 100644 index 0000000..f70d272 --- /dev/null +++ b/dlep_radio_ipv6/config_examples/my_radio_discovery_2.cfg @@ -0,0 +1,60 @@ +# +# DLEP Sim Radio Config File +# +SIM_NAME radio_2 + +DEBUG_FLAGS 0xFF + +# When the MANUAL_START is enabled, the user +# will need to enter "start" on the simulator +# cli to start the simulator. +#MANUAL_START +DISCOVERY_START + +# string for the peer type TLV +TYPE_DESCRIPTION DLEP_Radio_Sim_2 + +LOCAL_UDP_PORT 38700 +LOCAL_TCP_PORT 38710 +LOCAL_IPV4 20.1.1.4 + +ROUTER_UDP_PORT 38777 + +ROUTER_TCP_PORT 38775 +ROUTER_IPV4 9.1.1.202 + +LOCAL_ID 2222 + + + +### +### Add counters and timers and thresholds +### + +# The node heartbeat interval is only used by the client. The +# server takes the clients value. Time units are seconds. +DLEP_PEER_HEARTBEAT_INTERVAL 5 +DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD 2 + + +# The heuristics to retry a lost session init ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_UP_ACK_TMO 1000 +DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD 4 + + +# The interval to send metrics. +# Time units are in milliseconds. +DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 2000 +#DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 0 + + +# The heuristics to retry a lost session term ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_DOWN_ACK_TMO 1000 +DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD 4 + +# +# end config +# + diff --git a/dlep_radio_ipv6/config_examples/uut.cfg b/dlep_radio_ipv6/config_examples/uut.cfg new file mode 100644 index 0000000..a6eb58e --- /dev/null +++ b/dlep_radio_ipv6/config_examples/uut.cfg @@ -0,0 +1,60 @@ +# +# DLEP Sim Radio Config File +# +SIM_NAME ipv6_radio1 + +DEBUG_FLAGS 0xFF +#DEBUG_FLAGS 0x00 + +# When the MANUAL_START is enabled, the user +# will need to enter "start" on the simulator +# cli to start the simulator. +MANUAL_START +#DISCOVERY_START + +# string for the peer type TLV +TYPE_DESCRIPTION DLEP_Radio_Sim_1 + +LOCAL_UDP_PORT 854 +LOCAL_TCP_PORT 11115 +LOCAL_IPV6 3000:1:1:1:1:1:1:1111 + +#Server pot values +ROUTER_UDP_PORT 11116 +ROUTER_TCP_PORT 11117 +ROUTER_IPV6 3000:1:1:1:1:1:1:1112 + +LOCAL_ID 1111 + + +### +### Add counters and timers and thresholds +### + +# The node heartbeat interval is only used by the client. The +# server takes the clients value. Time units are seconds. +DLEP_PEER_HEARTBEAT_INTERVAL 5 +DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD 2 + + +# The heuristics to retry a lost session init ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_UP_ACK_TMO 1000 +DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD 4 + + +# The interval to send metrics. +# Time units are in milliseconds. +#DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 2000 +DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO 0 + + +# The heuristics to retry a lost session term ack. +# Time units are in milliseconds. +DLEP_NEIGHBOR_DOWN_ACK_TMO 1000 +DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD 4 + +# +# end config +# + diff --git a/dlep_radio_ipv6/dlep_buffers.c b/dlep_radio_ipv6/dlep_buffers.c new file mode 100644 index 0000000..620e263 --- /dev/null +++ b/dlep_radio_ipv6/dlep_buffers.c @@ -0,0 +1,144 @@ +/*---------------------------------------------------------------------- + * dlep_buffers.c -- abstracted buffer routines + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include + +#include "safe_types.h" +#include "dlep_debug.h" + +#include "dlep_buffers.h" + +/* + * Porting: The implementation of the functions in this file can be + * changed to platform specific buffer management APIs. + */ + + +#define MAX_BUFFER_SIZE ( 1400 ) + + +/** + * NAME + * dlep_allocate_transmit_buffer + * + * SYNOPSIS + * uint8_t + * *dlep_allocate_transmit_buffer(void) + * + * DESCRIPTION + * This function is used to allocate a buffer for transmit + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * Pointer to a buffer or NULL if no buffer is available. + * + */ +uint8_t +*dlep_allocate_transmit_buffer (void) +{ +printf("dlep_allocate_transmit_buffer\n"); + void *ptr; + + ptr = malloc(MAX_BUFFER_SIZE); + return (ptr); +} + + +/** + * NAME + * dlep_allocate_receive_buffer + * + * SYNOPSIS + * uint8_t + * *dlep_allocate_receive_buffer(void) + * + * DESCRIPTION + * This function is used to allocate a receive buffer + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * Pointer to a buffer or NULL if no buffer is available. + * + */ +uint8_t +*dlep_allocate_receive_buffer (void) +{ +printf("dlep_allocate_receive_buffer\n"); + void *ptr; + + ptr = malloc(MAX_BUFFER_SIZE); + return (ptr); +} + + +/** + * NAME + * dlep_free_buffer + * + * SYNOPSIS + * void + * *dlep_free_buffer(void) + * + * DESCRIPTION + * This routine frees a previously allocated (transmit and + * receive) buffer. + * + * INPUT PARAMETERS + * ptr - This is a pointer to the buffer + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_free_buffer (void *ptr) +{ +printf("dlep_free_buffer\n"); + if (ptr) { + free(ptr); + } + return; +} + diff --git a/dlep_radio_ipv6/dlep_buffers.h b/dlep_radio_ipv6/dlep_buffers.h new file mode 100644 index 0000000..f868081 --- /dev/null +++ b/dlep_radio_ipv6/dlep_buffers.h @@ -0,0 +1,48 @@ +/*---------------------------------------------------------------------- + * dlep_buffers.h -- abstracted buffer routines + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_BUFFERS_H__ +#define __DLEP_BUFFERS_H__ + +#include "safe_types.h" + + +extern uint8_t +*dlep_allocate_transmit_buffer(void); + +extern uint8_t +*dlep_allocate_receive_buffer(void); + +extern void +dlep_free_buffer(void *ptr); + +#endif + diff --git a/dlep_radio_ipv6/dlep_client_message_parser.c b/dlep_radio_ipv6/dlep_client_message_parser.c new file mode 100644 index 0000000..3392051 --- /dev/null +++ b/dlep_radio_ipv6/dlep_client_message_parser.c @@ -0,0 +1,379 @@ +/*---------------------------------------------------------------------- + * dlep_client_message_parser.c -- client message parsing routine + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include + +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_config.h" + +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" + +#include "dlep_client_neighbor_fsm.h" +#include "dlep_client_peer_fsm.h" + +#include "dlep_client_message_parser.h" + +void +rfc5444_show_signal_scratch_pad ( + rfc5444_message_scratch_pad_t *msg_scratch_pad) +{ +printf("rfc5444_show_signal_scratch_pad\n"); + char *p2text; + + if (!msg_scratch_pad) { + return; + } + + switch (msg_scratch_pad->message_code) { + case RFC5444_SIG_ATT_PEER_DISCOVERY: + p2text = "RFC5444_SIG_ATT_PEER_DISCOVERY"; + break; + + case RFC5444_SIG_PEER_OFFER: + p2text = "RFC5444_SIG_PEER_OFFER"; + break; + } + + + printf("Signal Scratch Pad \n"); + + printf(" signal code=%u %s \n", + msg_scratch_pad->message_code, + p2text); +} + +/** + * NAME + * dlep_client_message_parser + * + * SYNOPSIS + * void + * dlep_client_message_parser(uint16_t message_code, + * uint16_t sequence_number, + * void *context_ptr) + * + * DESCRIPTION + * This function is used by the client application to handle the + * initial parse of a DLEP message. Only the valid set of DLEP + * messages expected by the client are processed. + * + * INPUT PARAMETERS + * message_code - This is the message code representing the + * message to be parsed. + * + * sequence_number - The sequence number of the message + * + * context_ptr - The pointer to the message scratch pad + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_client_message_parser (uint16_t message_code, + uint16_t sequence_number, + void *context_ptr, int signal) +{ +printf("dlep_client_message_parser\n"); + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *scratch_pad; + dlep_context_neighbor_t *p2neighbor; + + p2peer = context_ptr; + if (!p2peer) { + return; + } + + p2peer->status_code = RFC5444_SUCCESS; + + scratch_pad = &p2peer->message_scratch_pad; + + scratch_pad->message_code = message_code; + + scratch_pad->sequence = sequence_number; + scratch_pad->sequence_present = TRUE; + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + if (signal) { + rfc5444_show_signal_scratch_pad(scratch_pad); + } else { + rfc5444_show_message_scratch_pad(scratch_pad); + } + } + + /* + * now drive the state machine by the message type + */ + + if (signal) { + switch (message_code) { + + case RFC5444_SIG_ATT_PEER_DISCOVERY: + dlep_client_fsm_engine(peer_att_discovery_e, p2peer, NULL); + break; + /* this signal client does not receive */ + case RFC5444_SIG_PEER_OFFER: + dlep_client_fsm_engine(peer_offer_e, p2peer, NULL); + DLEP_DEBUG("%s-%u DLEP unexpected signal, signal_code=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + message_code); + break; + default: + DLEP_DEBUG("%s-%u DLEP unknown signal, signal_code=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + message_code); + break; + } + } + else { + switch (message_code) { + + case RFC5444_MSG_PEER_INIT_REQ: + dlep_client_fsm_engine(peer_init_request_e, p2peer, NULL); + break; + + case RFC5444_MSG_PEER_HEARTBEAT: + dlep_client_fsm_engine(peer_heartbeat_e, p2peer, NULL); + break; + + case RFC5444_MSG_PEER_UPDATE_REQ: + dlep_client_fsm_engine(peer_update_request_e, p2peer, NULL); + break; + + case RFC5444_MSG_PEER_UPDATE_RES: + dlep_client_fsm_engine(peer_update_response_e,p2peer, NULL); + break; + + case RFC5444_MSG_PEER_TERM_REQ: + dlep_client_fsm_engine(peer_term_request_e, p2peer, NULL); + break; + + case RFC5444_MSG_PEER_TERM_RES: + dlep_client_fsm_engine(peer_term_response_e, p2peer, NULL); + break; + + case RFC5444_MSG_NEIGHBOR_UP_RES: + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, + scratch_pad->mac_address); + if (!p2neighbor) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + scratch_pad->mac_address[0], + scratch_pad->mac_address[1], + scratch_pad->mac_address[2], + scratch_pad->mac_address[3], + scratch_pad->mac_address[4], + scratch_pad->mac_address[5]); + } else { + dlep_client_neighbor_fsm_engine(neighbor_init_ack_e, + p2peer, p2neighbor); + } + break; + + case RFC5444_MSG_NEIGHBOR_METRICS: + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, + scratch_pad->mac_address); + if (!p2neighbor) { + printf("\nRFC5444_MSG_NEIGHBOR_METRICS: Received with ERROR"); + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + scratch_pad->mac_address[0], + scratch_pad->mac_address[1], + scratch_pad->mac_address[2], + scratch_pad->mac_address[3], + scratch_pad->mac_address[4], + scratch_pad->mac_address[5]); + } else { + printf("\nRFC5444_MSG_NEIGHBOR_METRICS: Received "); + dlep_client_neighbor_fsm_engine(neighbor_update_ack_e, + p2peer, p2neighbor); + } + break; + + case RFC5444_MSG_NEIGHBOR_ADDRESS_RES: + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, + scratch_pad->mac_address); + if (!p2neighbor) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + scratch_pad->mac_address[0], + scratch_pad->mac_address[1], + scratch_pad->mac_address[2], + scratch_pad->mac_address[3], + scratch_pad->mac_address[4], + scratch_pad->mac_address[5]); + } else { + dlep_client_neighbor_fsm_engine(neighbor_update_addr_res_e, + p2peer, p2neighbor); + } + break; + + case RFC5444_MSG_NEIGHBOR_DOWN_REQ: + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, + scratch_pad->mac_address); + if (!p2neighbor) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + scratch_pad->mac_address[0], + scratch_pad->mac_address[1], + scratch_pad->mac_address[2], + scratch_pad->mac_address[3], + scratch_pad->mac_address[4], + scratch_pad->mac_address[5]); + } else { + dlep_client_neighbor_fsm_engine(neighbor_term_e, + p2peer, p2neighbor); + } + break; + + case RFC5444_MSG_NEIGHBOR_DOWN_RES: + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, + scratch_pad->mac_address); + if (!p2neighbor) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + scratch_pad->mac_address[0], + scratch_pad->mac_address[1], + scratch_pad->mac_address[2], + scratch_pad->mac_address[3], + scratch_pad->mac_address[4], + scratch_pad->mac_address[5]); + } else { + dlep_client_neighbor_fsm_engine(neighbor_term_ack_e, + p2peer, p2neighbor); + } + break; + + + case RFC5444_MSG_LINK_CHAR_REQ: + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, + scratch_pad->mac_address); + if (!p2neighbor) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + scratch_pad->mac_address[0], + scratch_pad->mac_address[1], + scratch_pad->mac_address[2], + scratch_pad->mac_address[3], + scratch_pad->mac_address[4], + scratch_pad->mac_address[5]); + } else { + dlep_client_neighbor_fsm_engine(neighbor_link_char_req_e, + p2peer, p2neighbor); + } + break; + + + /* messages that the client peer can not receive */ + case RFC5444_MSG_PEER_INIT_RES: + DLEP_DEBUG("%s-%u DLEP unexpected message, msg_code=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + message_code); + printf("\nUnexpected message sending termination message\n"); + p2peer->status_code = RFC5444_MSG_UNEXPECTED; + send_dlep_peer_termination(p2peer); + break; + case RFC5444_MSG_NEIGHBOR_UP_REQ: + DLEP_DEBUG("%s-%u DLEP unexpected message, msg_code=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + message_code); + printf("\nUnexpected message sending termination message\n"); + p2peer->status_code = RFC5444_MSG_UNEXPECTED; + send_dlep_peer_termination(p2peer); + break; + case RFC5444_MSG_LINK_CHAR_RES: + DLEP_DEBUG("%s-%u DLEP unexpected message, msg_code=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + message_code); + printf("\nUnexpected message sending termination message\n"); + p2peer->status_code = RFC5444_MSG_UNEXPECTED; + send_dlep_peer_termination(p2peer); + break; + + default: + DLEP_DEBUG("%s-%u DLEP unknown message, msg_code=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + message_code); + printf("\nUnknown message sending termination message\n"); + p2peer->status_code = RFC5444_MSG_UNKNOWN; + send_dlep_peer_termination(p2peer); + break; + } + + } + rfc5444_scrub_message_scratch_pad(scratch_pad); + + return; +} + diff --git a/dlep_radio_ipv6/dlep_client_message_parser.h b/dlep_radio_ipv6/dlep_client_message_parser.h new file mode 100644 index 0000000..e3580f8 --- /dev/null +++ b/dlep_radio_ipv6/dlep_client_message_parser.h @@ -0,0 +1,45 @@ +/*---------------------------------------------------------------------- + * dlep_client_message_parser.h -- Message parsing routines + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CLIENT_MESSAGE_PARSER_H__ +#define __DLEP_CLIENT_MESSAGE_PARSER_H__ + +#include "safe_types.h" +#include "dlep_context_peer.h" + + +extern void +dlep_client_message_parser(uint16_t message_code, + uint16_t sequence_number, + void *context_ptr,int signal); + +#endif + diff --git a/dlep_radio_ipv6/dlep_client_metrics.c b/dlep_radio_ipv6/dlep_client_metrics.c new file mode 100644 index 0000000..12a1f1c --- /dev/null +++ b/dlep_radio_ipv6/dlep_client_metrics.c @@ -0,0 +1,207 @@ +/*---------------------------------------------------------------------- + * dlep_client_metrics.c -- dynamic client metrics + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include + +#include "safe_types.h" +#include "dlep_context_neighbor.h" + + +static int32_t metric_index = 0; +static int32_t metric_direction = 1; + + +/** + * NAME + * dlep_client_metrics + * + * SYNOPSIS + * void + * dlep_client_metrics(dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to insert a dynamic nature to the + * metrics for test. + * + * INPUT PARAMETERS + * p2neighbor - pointer to the neighbor + * + * OUTPUT PARAMETERS + * p2neighbor - neighbor metrics updated + * + * RETURN VALUE + * none + * + */ +void +dlep_client_metrics (dlep_context_neighbor_t *p2neighbor) +{ +printf("dlep_client_metrics\n"); + if (!p2neighbor) { + return; + } + + /* + * could be more creative with file inputs + * or radio models. + */ + switch (metric_index) { + case 0: + p2neighbor->rlq_rx = 100; + p2neighbor->rlq_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_rx = 0; + p2neighbor->cdr_tx = 0; + p2neighbor->mdr_rx = 110000000; + p2neighbor->mdr_tx = 110000000; + break; + + case 1: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 11000000; + p2neighbor->cdr_rx = 11000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + + case 2: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 22000000; + p2neighbor->cdr_rx = 22000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + + case 3: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 33000000; + p2neighbor->cdr_rx = 33000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + + case 4: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 44000000; + p2neighbor->cdr_rx = 44000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_tx = 110000000; + break; + + case 5: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 55000000; + p2neighbor->cdr_rx = 55000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + + case 6: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 66000000; + p2neighbor->cdr_rx = 66000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + + case 7: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 77000000; + p2neighbor->cdr_rx = 77000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + + case 8: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 88000000; + p2neighbor->cdr_rx = 88000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + + case 9: + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources_tx = 100; + p2neighbor->resources_rx = 100; + p2neighbor->latency = 0; + p2neighbor->cdr_tx = 99000000; + p2neighbor->cdr_rx = 99000000; + p2neighbor->mdr_tx = 110000000; + p2neighbor->mdr_rx = 110000000; + break; + } + + if (metric_index >= 9) { + metric_direction = -1; + } else if (metric_index == 0) { + metric_direction = 1; + } + + metric_index += metric_direction; + return; +} + diff --git a/dlep_radio_ipv6/dlep_client_metrics.h b/dlep_radio_ipv6/dlep_client_metrics.h new file mode 100644 index 0000000..7efc8da --- /dev/null +++ b/dlep_radio_ipv6/dlep_client_metrics.h @@ -0,0 +1,43 @@ +/*---------------------------------------------------------------------- + * dlep_client_metrics.h -- dynamic client metrics + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CLIENT_METRICS_H__ +#define __DLEP_CLIENT_METRICS_H__ + +#include "safe_types.h" + + +extern void +dlep_client_metrics(dlep_context_neighbor_t *p2neighbor); + + +#endif + diff --git a/dlep_radio_ipv6/dlep_client_neighbor_event_handlers.c b/dlep_radio_ipv6/dlep_client_neighbor_event_handlers.c new file mode 100644 index 0000000..08fcd4e --- /dev/null +++ b/dlep_radio_ipv6/dlep_client_neighbor_event_handlers.c @@ -0,0 +1,1125 @@ +/*---------------------------------------------------------------------- + * dlep_client_neighbor_event_handlers.c -- client neighbor event handlers + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include + +#include "safe_types.h" +#include "time_units.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_sim_options.h" +#include "dlep_debug.h" +#include "dlep_porter.h" +#include "dlep_config.h" +#include "dlep_message_builder.h" + +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" + +#include "dlep_client_timer.h" +#include "dlep_client_neighbor_fsm.h" +#include "dlep_client_peer_fsm.h" + +#include "dlep_client_metrics.h" + +#include "dlep_client_neighbor_event_handlers.h" + + + +/** + * NAME + * initializing_neighbor_up_ack + * + * SYNOPSIS + * RC_FSM_t + * initializing_neighbor_up_ack(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the neighbor up ack message + * is received during the initializing state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +initializing_neighbor_up_ack (void *p2event, void *p2parm) +{ +printf("initializing_neighbor_up_ack\n"); + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (msg_scratch_pad->status_code_present) { + if (msg_scratch_pad->status_code == 0) { + //send_dlep_neighbor_up_ack(p2peer,p2neighbor); + //printf("\n SENT DLEP NEIGHBOR ACK \n"); + printf("success dest ack received\n"); + /* 0 is a success code */ + } else { + printf("Status code is not success\n"); + dlep_neighbor_clear(p2neighbor); + dlep_neighbor_remove(p2peer, &p2neighbor); + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u return code %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + msg_scratch_pad->status_code); + } + } + } + else { + printf("status tlv is mandatory , is not present \n"); + } + + +#if 0 + if (p2neighbor->expected_neighbor_init_ack_sequence != + msg_scratch_pad->sequence) { + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + "unexpected neighbor up ack \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor up ack rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + + stw_system_timer_stop(&p2neighbor->neighbor_init_ack_tmr); + + /* + * conditionally start the periodic timer to generate metrics + */ + /* if (p2peer->neighbor_update_interval_tmo) { + (void)stw_system_timer_start(&p2neighbor->neighbor_update_interval_tmr, + p2peer->neighbor_update_interval_tmo, + p2peer->neighbor_update_interval_tmo, + &dlep_neighbor_metrics_interval_tmr, + (void *)p2neighbor); + } */ + + return (RC_FSM_OK); +} + + +/** + * NAME + * initializing_neighbor_up_ack_tmo + * + * SYNOPSIS + * RC_FSM_t + * initializing_neighbor_up_ack_tmo(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the neighbor up ack + * message was not received within the guard timer during + * the initializing state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_STOP_PROCESING + * + */ +RC_FSM_t +initializing_neighbor_up_ack_tmo (void *p2event, void *p2parm) +{ +printf("initializing_neighbor_up_ack_tmo\n"); + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } +// printf("\n INSIDE START initializing_neighbor_up_ack_tmo"); + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + p2neighbor->neighbor_up_ack_tmo_count++; + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor up ack missed, count=%u threshold=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5], + p2neighbor->neighbor_up_ack_tmo_count, + p2peer->neighbor_up_missed_ack_threshold); + } + + if (p2neighbor->neighbor_up_ack_tmo_count >= + p2peer->neighbor_up_missed_ack_threshold) { +// printf("\n INSIDE neighbor_up_missed_ack_threshold "); + /* stop timers and clear context */ + dlep_neighbor_clear(p2neighbor); + dlep_neighbor_remove(p2peer, &p2neighbor); + return (RC_FSM_STOP_PROCESSING); + } +// printf("\n EXIT initializing_neighbor_up_ack_tmo "); + //send_dlep_neighbor_up(p2peer, p2neighbor); + return (RC_FSM_OK); +} + + + +RC_FSM_t +initializing_neighbor_update_ack (void *p2event, void *p2parm) +{ +printf("initializing_neighbor_update_ack\n"); + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (msg_scratch_pad->cws_present) { + msg_scratch_pad->cws_present = FALSE; + p2neighbor->mrw = msg_scratch_pad->mrw; + printf("\n DLEP NEIGHBOR ACK : Credit Accepted " + "Client MRW %llu , Router MRW %llu \n", + p2neighbor->mrw, msg_scratch_pad->mrw); + // printf("\n DLEP NEIGHBOR ACK : Credit Not Matches : " + // "Client MRW %llu , Router MRW %llu \n", + // p2neighbor->mrw, msg_scratch_pad->mrw); + stw_system_timer_stop(&p2neighbor->neighbor_update_ack_tmr); + } else if (msg_scratch_pad->credit_req_present) { + msg_scratch_pad->credit_req_present = FALSE; + if (p2neighbor->CREDIT_NOT_SUPPORTED) { + send_dlep_neighbor_credit_reject(p2peer, p2neighbor); + } else { + p2neighbor->cgr = 65534; + send_dlep_neighbor_credit_grant_req(p2peer, p2neighbor); + } + } else if (msg_scratch_pad->status_code_present) { + msg_scratch_pad->status_code_present = FALSE; + if (msg_scratch_pad->status_code == 0) { + printf("\n DLEP NEIGHBOR ACK : Credit Not Supported \n"); + /* 0 is a success code */ + } else { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u return code %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + msg_scratch_pad->status_code); + } + } + stw_system_timer_stop(&p2neighbor->neighbor_update_ack_tmr); + } else { + printf("\n DLEP NEIGHBOR ACK : Unknown TLV received \n"); + } + + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor up ack rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + +// stw_system_timer_stop(&p2neighbor->neighbor_update_ack_tmr); + + + return (RC_FSM_OK); +} + + +/** + * NAME + * initializing_neighbor_update_ack_tmo + * + * SYNOPSIS + * RC_FSM_t + * initializing_neighbor_update_ack_tmo(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the neighbor update ack + * message was not received within the guard timer during + * the update state. This is currently used only for Credit Grant + * Request. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_STOP_PROCESING + * + */ +RC_FSM_t +initializing_neighbor_update_ack_tmo (void *p2event, void *p2parm) +{ +printf("initializing_neighbor_update_ack_tmo\n"); + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } +// printf("\n INSIDE START initializing_neighbor_up_ack_tmo"); + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + p2neighbor->neighbor_update_ack_tmo_count++; + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor up ack missed, count=%u threshold=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5], + p2neighbor->neighbor_update_ack_tmo_count, + p2peer->neighbor_up_missed_ack_threshold); + } + + /* Leveraging the same threshold of Neighbor up */ + if (p2neighbor->neighbor_update_ack_tmo_count >= + p2peer->neighbor_up_missed_ack_threshold) { +// printf("\n INSIDE neighbor_up_missed_ack_threshold "); + /* stop timers and clear context */ + dlep_neighbor_clear(p2neighbor); + dlep_neighbor_remove(p2peer, &p2neighbor); + return (RC_FSM_STOP_PROCESSING); + } +// printf("\n EXIT initializing_neighbor_up_ack_tmo "); + send_dlep_neighbor_credit_grant_req(p2peer, p2neighbor); + return (RC_FSM_OK); +} + + +/** + * NAME + * update_neighbor_update_interval + * + * SYNOPSIS + * RC_FSM_t + * update_neighbor_update_interval(void *p2event, void *p2parm) + * + * DESCRIPTION + * The event handler is invoked when the neighbor update interval + * timer has expired indicating that it is time to send + * neighbor metrics. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + */ +RC_FSM_t +update_neighbor_update_interval (void *p2event, void *p2parm) +{ +printf("update_neighbor_update_interval\n"); + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + /* dynamically tweak metrics for testing */ +#ifdef DYNAMIC_METRICS_ENABLED + dlep_client_metrics(p2neighbor); +#endif + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + return (RC_FSM_OK); +} + + +/** + * NAME + * update_neighbor_update_address_response + * + * SYNOPSIS + * RC_FSM_t + * update_neighbor_update_address_response(void *p2event, void *p2parm) + * + * DESCRIPTION + * The event handler is invoked when the neighbor update address + * response was received. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + */ +RC_FSM_t +update_neighbor_update_address_response (void *p2event, void *p2parm) +{ +printf("update_neighbor_update_address_response\n"); + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor address response rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + + return (RC_FSM_OK); +} + + +/** + * NAME + * update_neighbor_down_request + * + * SYNOPSIS + * RC_FSM_t + * update_neighbor_down_request(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked upon user or system request to + * terminate the neighbor. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +update_neighbor_down_request (void *p2event, void *p2parm) +{ +printf("update_neighbor_down_request\n"); + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " user-system neighbor down request \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + + stw_system_timer_stop(&p2neighbor->neighbor_update_interval_tmr); + + send_dlep_neighbor_down(p2peer, p2neighbor); + + /* + * conditionally start the periodic timer to guard against + * lost term acks + */ + if (p2peer->neighbor_down_ack_tmo) { + (void)stw_system_timer_start(&p2neighbor->neighbor_term_ack_tmr, + p2peer->neighbor_down_ack_tmo, + p2peer->neighbor_down_ack_tmo, + &dlep_neighbor_term_ack_tmr, + (void *)p2neighbor); + } + + return (RC_FSM_OK); +} + + +/** + * NAME + * update_neighbor_down + * + * SYNOPSIS + * RC_FSM_t + * update_neighbor_down(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the neighbor down + * message is received during the synchronized state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_STOP_PROCESING + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +update_neighbor_down (void *p2event, void *p2parm) +{ +printf("update_neighbor_down\n"); + RC_FSM_t rc_fsm; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor down rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + + send_dlep_neighbor_down_ack(p2peer, p2neighbor); + + /* stop timers and clear context */ + dlep_neighbor_clear(p2neighbor); + dlep_neighbor_remove(p2peer, &p2neighbor); + rc_fsm = RC_FSM_STOP_PROCESSING; + return (rc_fsm); +} + + +/** + * NAME + * update_link_char_request + * + * SYNOPSIS + * RC_FSM_t + * update_link_char_request(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the link characteristic + * request is received during the synchronized state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * p2neighbor->cdr = msg_scratch_pad->cdr; + * p2neighbor->latency = msg_scratch_pad->latency; + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_STOP_PROCESING + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +update_link_char_request (void *p2event, void *p2parm) +{ +printf("update_link_char_request\n"); + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " link char request \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + + p2neighbor->cdr_tx = msg_scratch_pad->cdr_tx; + + p2neighbor->latency = msg_scratch_pad->latency; + + send_dlep_neighbor_link_char_response(p2peer, p2neighbor); + + return (RC_FSM_OK); +} + + + +/** + * NAME + * terminating_neighbor_down_ack + * + * SYNOPSIS + * RC_FSM_t + * terminating_neighbor_down_ack(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the neighbor down + * ack is received during the terminating state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_STOP_PROCESSING + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +terminating_neighbor_down_ack (void *p2event, void *p2parm) +{ +printf("terminating_neighbor_down_ack\n"); + RC_FSM_t rc_fsm; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + if (p2neighbor->expected_neighbor_link_char_response_sequence != + msg_scratch_pad->sequence) { + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " unexpected neighbor down ack \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u " + "mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor down ack \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5]); + } + + /* stop timers and clear context */ + stw_system_timer_stop(&p2neighbor->neighbor_term_ack_tmr); + dlep_neighbor_clear(p2neighbor); + dlep_neighbor_remove(p2peer, &p2neighbor); + rc_fsm = RC_FSM_STOP_PROCESSING; + return (rc_fsm); +} + + +/** + * NAME + * terminating_neighbor_down_ack_tmo + * + * SYNOPSIS + * RC_FSM_t + * terminating_neighbor_down_ack_tmo(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the neighbor down + * ack was not received within the guard timer during the + * terminating state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - This is a pointer to the neighbor context which is set prior + * to invoking the state machine. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_STOP_PROCESSING + * + */ +RC_FSM_t +terminating_neighbor_down_ack_tmo (void *p2event, void *p2parm) +{ +printf("terminating_neighbor_down_ack_tmo\n"); + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2neighbor = p2parm; + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u neighbor " + "does not exist \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + p2neighbor->neighbor_down_ack_tmo_count++; + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u mac=%02x:%02x:%02x:%02x:%02x:%02x \n" + " neighbor down ack missed, count=%u threshold=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2neighbor->mac_address[0], p2neighbor->mac_address[1], + p2neighbor->mac_address[2], p2neighbor->mac_address[3], + p2neighbor->mac_address[4], p2neighbor->mac_address[5], + p2neighbor->neighbor_down_ack_tmo_count, + p2peer->neighbor_down_missed_ack_threshold); + } + + if (p2neighbor->neighbor_down_ack_tmo_count >= + p2peer->neighbor_down_missed_ack_threshold) { + /* stop timers and clear context */ + dlep_neighbor_clear(p2neighbor); + dlep_neighbor_remove(p2peer, &p2neighbor); + return (RC_FSM_STOP_PROCESSING); + } + + //send_dlep_neighbor_down(p2peer, p2neighbor); + return (RC_FSM_OK); +} + + diff --git a/dlep_radio_ipv6/dlep_client_neighbor_event_handlers.h b/dlep_radio_ipv6/dlep_client_neighbor_event_handlers.h new file mode 100644 index 0000000..678509b --- /dev/null +++ b/dlep_radio_ipv6/dlep_client_neighbor_event_handlers.h @@ -0,0 +1,75 @@ +/*---------------------------------------------------------------------- + * dlep_client_neighbor_event_handlers.h -- client neighbor state machine + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reseved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CLIENT_SESSION_EVENT_HANDLERS_H__ +#define __DLEP_CLIENT_SESSION_EVENT_HANDLERS_H__ + +#include "safe_types.h" +#include "fsm.h" + + + +extern RC_FSM_t +initializing_neighbor_up_ack(void *p2event, void *p2parm); + +extern RC_FSM_t +initializing_neighbor_up_ack_tmo(void *p2event, void *p2parm); + +extern RC_FSM_t +initializing_neighbor_update_ack(void *p2event, void *p2parm); + +extern RC_FSM_t +initializing_neighbor_update_ack_tmo(void *p2event, void *p2parm); + +extern RC_FSM_t +update_neighbor_update_interval(void *p2event, void *p2parm); + +extern RC_FSM_t +update_neighbor_update_address_response(void *p2event, void *p2parm); + +extern RC_FSM_t +update_neighbor_down_request(void *p2event, void *p2parm); + +extern RC_FSM_t +update_neighbor_down(void *p2event, void *p2parm); + +extern RC_FSM_t +update_link_char_request(void *p2event, void *p2parm); + +extern RC_FSM_t +terminating_neighbor_down_ack(void *p2event, void *p2parm); + +extern RC_FSM_t +terminating_neighbor_down_ack_tmo(void *p2event, void *p2parm); + + +#endif + diff --git a/dlep_radio_ipv6/dlep_client_neighbor_fsm.c b/dlep_radio_ipv6/dlep_client_neighbor_fsm.c new file mode 100644 index 0000000..35fa8fb --- /dev/null +++ b/dlep_radio_ipv6/dlep_client_neighbor_fsm.c @@ -0,0 +1,498 @@ +/*---------------------------------------------------------------------- + * dlep_client_neighbor_fsm.c -- client neighbor state machine + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include + +#include "fsm.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_config.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" + +#include "dlep_client_neighbor_event_handlers.h" +#include "dlep_client_timer.h" + +#include "dlep_client_neighbor_fsm.h" + + + +/* + * normalized client neighbor event description + */ +static event_description_t normalized_event_table[] = + {{neighbor_init_ack_e, "Neighbor Up ACK Event"}, + {neighbor_up_ack_tmo_e, "Neighbor Up ACK TMO Event"}, + {neighbor_update_metrics_interval_e, "Internal Metrics Event"}, + {neighbor_update_ack_e, "Neighbor Update ACK Event"}, + {neighbor_update_ack_tmo_e, "Neighbor Update ACK TMO Event"}, + {neighbor_update_addr_res_e, "Neighbor Update Address Response Event"}, + {neighbor_term_user_req_e, "Neighbor Down User Request Event"}, + {neighbor_term_e, "Neighbor Down Recieved Event"}, + {neighbor_term_ack_e, "Neighbor Down ACK Event"}, + {neighbor_down_ack_tmo_e, "Neighbor Down ACK TMO Event"}, + {neighbor_link_char_req_e, "Neighbor Link Char Request Event"}, + {FSM_NULL_EVENT_ID, NULL} }; + + +/* + * normalized neighbor state description + */ +static state_description_t normalized_state_table[] = + {{neighbor_initializing_s, "Initializing` State"}, + {neighbor_update_s, "Update State"}, + {neighbor_terminating_s, "Terminating State"}, + {FSM_NULL_STATE_ID, NULL} }; + + +/* + * catch-all to ignore events + */ +static RC_FSM_t event_ignore (void *p2event, void *p2parm) +{ +printf("RC_FSM_t event_ignore\n"); + dlep_context_peer_t *p2peer; + p2peer = p2event; + + if (p2peer) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u event ignored \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + } else { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u event ignored! \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + } + return (RC_FSM_IGNORE_EVENT); +} + + +/* + * State event tables + */ +static event_tuple_t state_initializing_events[] = + {{neighbor_init_ack_e, + initializing_neighbor_up_ack, neighbor_update_s}, + {neighbor_up_ack_tmo_e, + initializing_neighbor_up_ack_tmo, neighbor_initializing_s}, + {neighbor_update_metrics_interval_e, + event_ignore, neighbor_initializing_s}, + {neighbor_update_ack_e, + event_ignore, neighbor_initializing_s}, + {neighbor_update_ack_tmo_e, + event_ignore, neighbor_initializing_s}, + {neighbor_update_addr_res_e, + event_ignore, neighbor_initializing_s}, + {neighbor_term_user_req_e, + event_ignore, neighbor_initializing_s}, + {neighbor_term_e, + event_ignore, neighbor_initializing_s}, + {neighbor_term_ack_e, + event_ignore, neighbor_initializing_s}, + {neighbor_down_ack_tmo_e, + event_ignore, neighbor_initializing_s}, + {neighbor_link_char_req_e, + event_ignore, neighbor_initializing_s}}; + + +static event_tuple_t state_update_events[] = + {{neighbor_init_ack_e, + event_ignore, neighbor_update_s}, + {neighbor_up_ack_tmo_e, + event_ignore, neighbor_update_s}, + {neighbor_update_metrics_interval_e, + update_neighbor_update_interval, neighbor_update_s}, + {neighbor_update_ack_e, + initializing_neighbor_update_ack, neighbor_update_s}, + {neighbor_update_ack_tmo_e, + initializing_neighbor_update_ack_tmo, neighbor_update_s}, + {neighbor_update_addr_res_e, + update_neighbor_update_address_response, neighbor_update_s}, + {neighbor_term_user_req_e, + update_neighbor_down_request, neighbor_terminating_s}, + {neighbor_term_e, + update_neighbor_down, neighbor_terminating_s}, + {neighbor_term_ack_e, + event_ignore, neighbor_update_s}, + {neighbor_down_ack_tmo_e, + event_ignore, neighbor_update_s}, + {neighbor_link_char_req_e, + update_link_char_request, neighbor_update_s}}; + + +static event_tuple_t state_terminating_events[] = + {{neighbor_init_ack_e, + event_ignore, neighbor_terminating_s}, + {neighbor_up_ack_tmo_e, + event_ignore, neighbor_terminating_s}, + {neighbor_update_metrics_interval_e, + event_ignore, neighbor_terminating_s}, + {neighbor_update_ack_e, + event_ignore, neighbor_terminating_s}, + {neighbor_update_ack_tmo_e, + event_ignore, neighbor_terminating_s}, + {neighbor_update_addr_res_e, + event_ignore, neighbor_terminating_s}, + {neighbor_term_user_req_e, + event_ignore, neighbor_terminating_s}, + {neighbor_term_e, + event_ignore, neighbor_terminating_s}, + {neighbor_term_ack_e, + terminating_neighbor_down_ack, neighbor_terminating_s}, + {neighbor_down_ack_tmo_e, + terminating_neighbor_down_ack_tmo, neighbor_terminating_s}, + {neighbor_link_char_req_e, + event_ignore, neighbor_terminating_s}}; + + + +/* + * neighbor state table + */ +static state_tuple_t dlep_neighbor_state_table[] = + {{neighbor_initializing_s, state_initializing_events}, + {neighbor_update_s, state_update_events}, + {neighbor_terminating_s, state_terminating_events}, + {FSM_NULL_STATE_ID, NULL} }; + + +/** + * NAME + * dlep_client_neighbor_fsm_get_state + * + * SYNOPSIS + * uint32_t + * dlep_client_neighbor_fsm_get_state( + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to return the current state + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * current state + * FSM_NULL_STATE_ID if there is an error. + * + */ +uint32_t +dlep_client_neighbor_fsm_get_state (dlep_context_neighbor_t *p2neighbor) +{ +printf("dlep_client_neighbor_fsm_get_state\n"); + uint32_t state; + + state = FSM_NULL_STATE_ID; + + if (p2neighbor) { + fsm_get_state(p2neighbor->neighbor_fsm_handle, &state); + } else { + /* ignore */ + } + return (state); +} + + +/** + * NAME + * dlep_client_neighbor_fsm_show_state_table + * + * SYNOPSIS + * void + * dlep_client_neighbor_fsm_show_state_table( + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to display the state machine table + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * None + * + */ +void +dlep_client_neighbor_fsm_show_state_table ( + dlep_context_neighbor_t *p2neighbor) +{ +printf("dlep_client_neighbor_fsm_show_state_table\n"); + if (p2neighbor) { + fsm_display_table(p2neighbor->neighbor_fsm_handle); + } else { + /* ignore */ + } + return; +} + + +/** + * NAME + * dlep_client_neighbor_fsm_show_history + * + * SYNOPSIS + * void + * dlep_client_neighbor_fsm_show_history( + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to display the state machine history + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * None + * + */ +void +dlep_client_neighbor_fsm_show_history (dlep_context_neighbor_t *p2neighbor) +{ +printf("dlep_client_neighbor_fsm_show_history\n"); + if (p2neighbor) { + fsm_show_history(p2neighbor->neighbor_fsm_handle); + } else { + /* ignore */ + } + return; +} + + +/** + * NAME + * dlep_client_neighbor_fsm_engine + * + * SYNOPSIS + * void + * dlep_client_neighbor_fsm_engine(uint32_t normalized_event, + * dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to process the state machine normalized + * events. + * + * INPUT PARAMETERS + * normalized_event - This is the state machine event to process. + * + * p2peer - This is a pointer to the peer context. + * + * p2neighbor - This is a pointer to the neighbor context. This is + * NULL for peer specific events. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_STOP_PROCESSING This indicates that the state machine + * is to be terminated and resources released. + * error otherwise + * + */ +void +dlep_client_neighbor_fsm_engine (uint32_t normalized_event, + dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("dlep_client_neighbor_fsm_engine\n"); + RC_FSM_t rc; + +// printf("\n INSIDE dlep_client_neighbor_fsm_engine "); + if (!p2peer) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer context is null \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + return; + } + + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: neighbor context is null \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + return; + } + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u normalized_event=%u peer_id=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + normalized_event, + p2peer->peer_id); + } + + rc = fsm_engine(p2neighbor->neighbor_fsm_handle, + normalized_event, + p2peer, + p2neighbor); + + if (rc == RC_FSM_STOP_PROCESSING) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u stopped \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + + /* cancel all neighbor timers and context */ + dlep_neighbor_clear(p2neighbor); + dlep_neighbor_remove(p2peer, &p2neighbor); + + } else if (rc == RC_FSM_IGNORE_EVENT) { + /* do nothing */ + } else if (rc != RC_FSM_OK) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u state machine rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + } + return; +} + + +/** + * NAME + * dlep_neighbor_fsm_destroy + * + * SYNOPSIS + * void + * dlep_neighbor_fsm_destroy(dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to destroy the neighbor state machine. + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context. + * + * OUTPUT PARAMETERS + * p2neighbor - updated + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_fsm_destroy (dlep_context_neighbor_t *p2neighbor) +{ +printf("dlep_neighbor_fsm_destroy\n"); + if (!p2neighbor) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: neighbor context is null \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + } else { + /* fsm_handle is nulled */ + fsm_destroy((fsm_t **)&p2neighbor->neighbor_fsm_handle); + } + return; +} + + +/** + * NAME + * dlep_neighbor_fsm_create + * + * SYNOPSIS + * void + * dlep_neighbor_fsm_create(dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to create the neighbor state machine. + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context. + * + * OUTPUT PARAMETERS + * p2neighbor - updated + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_fsm_create (dlep_context_neighbor_t *p2neighbor) +{ +printf("dlep_neighbor_fsm_create\n"); + RC_FSM_t rc; + + if (!p2neighbor) { + return; + } + + p2neighbor->neighbor_fsm_handle = NULL; + rc = fsm_create((fsm_t **)&p2neighbor->neighbor_fsm_handle, + "Session State Machine", + neighbor_initializing_s, + normalized_state_table, + normalized_event_table, + dlep_neighbor_state_table); + if (rc != RC_FSM_OK) { + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: neighbor local_id=%u state " + "machine rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2neighbor->local_id, + rc); + } + } + + return; +} + + diff --git a/dlep_radio_ipv6/dlep_client_neighbor_fsm.h b/dlep_radio_ipv6/dlep_client_neighbor_fsm.h new file mode 100644 index 0000000..e075c7a --- /dev/null +++ b/dlep_radio_ipv6/dlep_client_neighbor_fsm.h @@ -0,0 +1,103 @@ +/*---------------------------------------------------------------------- + * dlep_client_neighbor_fsm.h -- client neighbor state machine + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CLIENT_SESSION_FSM_H__ +#define __DLEP_CLIENT_SESSION_FSM_H__ + +#include "safe_types.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_peer.h" + +/* + * normalized client events + */ +typedef enum { + neighbor_init_ack_e = 0, + neighbor_up_ack_tmo_e, + neighbor_update_metrics_interval_e, + neighbor_update_ack_e, + neighbor_update_ack_tmo_e, + neighbor_update_addr_res_e, + neighbor_term_user_req_e, + neighbor_term_e, + neighbor_term_ack_e, + neighbor_down_ack_tmo_e, + neighbor_link_char_req_e, +} dlep_client_neighbor_events_e; + + +/* + * normalized client states + */ +typedef enum { + neighbor_initializing_s = 0, + neighbor_update_s, + neighbor_terminating_s, +} dlep_client_neighbor_states_e; + + + + +extern uint32_t +dlep_client_neighbor_fsm_get_state( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_client_neighbor_fsm_show_counter( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_client_neighbor_fsm_show_state_table( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_client_neighbor_fsm_show_history( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_client_neighbor_fsm_engine(uint32_t normalized_event, + dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +dlep_neighbor_fsm_destroy(dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_neighbor_fsm_create(dlep_context_neighbor_t *p2neighbor); + + +#endif + diff --git a/dlep_radio_ipv6/dlep_client_peer_event_handlers.c b/dlep_radio_ipv6/dlep_client_peer_event_handlers.c new file mode 100644 index 0000000..0a0013a --- /dev/null +++ b/dlep_radio_ipv6/dlep_client_peer_event_handlers.c @@ -0,0 +1,1634 @@ +/*---------------------------------------------------------------------- + * dlep_client_peer_event_handlers.c -- client peer state event handlers + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include + +#include "safe_types.h" +#include "time_units.h" + +#include "rfc5444_utils.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_porter.h" +#include "dlep_config.h" +#include "dlep_message_builder.h" + +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" + +#include "dlep_client_timer.h" +#include "dlep_client_peer_fsm.h" + +#include "dlep_client_peer_event_handlers.h" + +extern int TCP_READY; +extern int init; +/** + * NAME + * discovery_start_init + * + * SYNOPSIS + * RC_FSM_t + * discovery_start_init(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the start event is + * received during the discovery state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTNPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +discovery_start_init (void *p2event, void *p2parm) +{ + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; +#if 0 + send_dlep_attached_peer_discovery(p2peer); + + /*** start the peer offer guard timer ***/ + stw_system_timer_start(&p2peer->peer_offer_tmr, + secs_to_milliseconds(p2config->peer_offer_interval), + secs_to_milliseconds(p2config->peer_offer_interval), + &dlep_peer_offer_tmr, + (void *)p2peer->peer_id); +#endif + return (RC_FSM_OK); +} + +/** + * NAME + * discovery_peer_attached_rcvd + * + * SYNOPSIS + * RC_FSM_t + * discovery_peer_attached_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer discovery event is + * received during the discovery state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +discovery_peer_attached_rcvd (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + p2peer = p2event; + dlep_config_t *p2config; + + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + msg_scratch_pad = &p2peer->message_scratch_pad; + + p2config = p2peer->p2config; + + /* To avoid discovery message from unconfigured router */ + if (p2config->router_udp_port != htons(p2config->client_udp.sin_port)) { + return (RC_FSM_IGNORE_EVENT); + } + + + /* + * optional: peer type string was null terminated in scratch + */ + strcpy(p2peer->peer_type_description, + msg_scratch_pad->peer_type_description); + + dlep_client_fsm_engine(peer_offer_e, p2peer, NULL); + return (RC_FSM_OK); +} + +#if 0 +/** + * NAME + * discovery_peer_offer_rcvd + * + * SYNOPSIS + * RC_FSM_t + * discovery_peer_offer_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer offer event is + * received during the discovery state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +discovery_peer_offer_rcvd (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } +// printf("\n PEER OFFER RECEIVED"); + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; +#if 0 + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + /* + * verify that this is the expected response + */ + if (msg_scratch_pad->sequence != + p2peer->expected_peer_offer_sequence) { + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u sequence number miss-match, " + "expected %u-%u rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->expected_peer_offer_sequence, + msg_scratch_pad->sequence); + } + return (RC_FSM_IGNORE_EVENT); + } + + + /* optional */ + if (msg_scratch_pad->status_code_present) { + if (msg_scratch_pad->status_code == 0) { + /* 0 is a success code */ + } else { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u return code %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + msg_scratch_pad->status_code); + } + return (RC_FSM_IGNORE_EVENT); + } + } + + stw_system_timer_stop(&p2peer->peer_offer_tmr); + + /* save the router ID */ + p2peer->router_id = pkt_scratch_pad->router_id; + + + /* + * optional: peer type string was null terminated in scratch + */ + strcpy(p2peer->peer_type_description, + msg_scratch_pad->peer_type_description); + + /* start the peer hb timer if non-zero */ + if (p2peer->peer_heartbeat_interval) { + + printf("\n start peer_heartbeat timer"); + stw_system_timer_start(&p2peer->peer_heartbeat_tmr, + (p2peer->peer_heartbeat_interval), + (p2peer->peer_heartbeat_interval), + &dlep_peer_heartbeat_tmr, + (void *)p2peer->peer_id); + } + printf("\n calling peer_init"); + dlep_client_fsm_engine(peer_init_request_e, p2peer, NULL); + + return (RC_FSM_OK); +} + +#endif + +/** + * NAME + * discovery_peer_offer_tmo + * + * SYNOPSIS + * RC_FSM_t + * discovery_peer_offer_tmo(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer offer message + * was not received during the discovery state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +discovery_peer_offer_tmo (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2peer->peer_offer_timeout_count++; + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u peer offer timer expiration " + "count %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->peer_offer_timeout_count); + } +// send_dlep_attached_peer_discovery(p2peer); + + /* reset the state */ + fsm_set_exception_state(p2peer->fsm_handle, discovery_s); + return (RC_FSM_OK); +} + + + +/** + * NAME + * discovery_peer_offer_start + * + * SYNOPSIS + * RC_FSM_t + * discovery_peer_init_start(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the start event is + * received during the discovery state. + * + * INPUT PARAMETERS + * NAME + * discovery_peer_offer_start + * + * SYNOPSIS + * RC_FSM_t + * discovery_peer_init_start(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the start event is + * received during the discovery state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTNPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +discovery_peer_offer_start (void *p2event, void *p2parm) +{ +// dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + +// p2config = p2peer->p2config; + +// send_dlep_peer_init(p2peer); + + send_dlep_peer_offer(p2peer); + return (RC_FSM_OK); +} + + +#if 0 +/** + * NAME + * discovery_peer_init_start + * + * SYNOPSIS + * RC_FSM_t + * discovery_peer_init_start(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the start event is + * received during the discovery state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTNPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +discovery_peer_init_start (void *p2event, void *p2parm) +{ +// dlep_config_t *p2config; + dlep_context_peer_t *p2peer; +// printf("\n SENDING send_dlep_peer_init "); + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + +// p2config = p2peer->p2config; + + send_dlep_peer_init(p2peer); + + + return (RC_FSM_OK); +} + +#endif + + + + + +/** + * NAME + * discovery_peer_init_ack_rcvd + * + * SYNOPSIS + * RC_FSM_t + * discovery_peer_init_ack_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer initialization + * response event is received during the discovery state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +discovery_peer_init_ack_rcvd (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + +// printf("\n INSIDE discovery_peer_init_ack_rcvd"); +#if 0 + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + /* + * verify that this is the expected response + */ +#if 0 + if (msg_scratch_pad->sequence != + p2peer->expected_peer_offer_sequence) { + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u sequence number miss-match, " + "expected %u-%u rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->expected_peer_offer_sequence, + msg_scratch_pad->sequence); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + /* mandatory */ + if (msg_scratch_pad->status_code_present) { + if (msg_scratch_pad->status_code == 0) { + /* 0 is a success code */ +// printf("\n PEER INIT ACK Received SUCCESS"); + } else { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u return code %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + msg_scratch_pad->status_code); + } + return (RC_FSM_IGNORE_EVENT); + } + } + + /* save the router ID */ + p2peer->router_id = pkt_scratch_pad->router_id; + + + /* + * optional: peer type string was null terminated in scratch + */ + strcpy(p2peer->peer_type_description, + msg_scratch_pad->peer_type_description); + + /* start the peer hb timer if non-zero */ + + if (p2peer->peer_heartbeat_interval) { + stw_system_timer_start(&p2peer->peer_heartbeat_tmr, + (p2peer->peer_heartbeat_interval), + (p2peer->peer_heartbeat_interval), + &dlep_peer_heartbeat_tmr, + (uint32_t *)p2peer->peer_id); + } + + return (RC_FSM_OK); +} + + + + + + +/* + * peer_init_rcvd + * + * SYNOPSIS + * RC_FSM_t + * initialization_peer_init_ack_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer initialization + * request event is received during the initialization state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +initialization_peer_init_rcvd (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + +#if 0 + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + /* + * verify that this is the expected response + */ +#if 0 + if (msg_scratch_pad->sequence != + p2peer->expected_peer_offer_sequence) { + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u sequence number miss-match, " + "expected %u-%u rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->expected_peer_offer_sequence, + msg_scratch_pad->sequence); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + p2peer->peer_heartbeat_interval = msg_scratch_pad->hbt; // ASL__ change + + strcpy(p2peer->peer_type_description, + msg_scratch_pad->peer_type_description); + + if (msg_scratch_pad->ipv4_address_present) { + p2peer->update_ipv4_operation = msg_scratch_pad->ipv4_operation; + p2peer->ipv4_address = msg_scratch_pad->ipv4_address; + p2peer->ipv4_attached_subnet = msg_scratch_pad->ipv4_attached_subnet; + } + + /* start the peer hb timer if non-zero */ + + if (p2peer->peer_heartbeat_interval) { + p2peer->peer_heartbeat_timeout_count = 0; + stw_system_timer_start(&p2peer->peer_heartbeat_tmr, + (p2peer->peer_heartbeat_interval), + (p2peer->peer_heartbeat_interval), + &dlep_peer_heartbeat_tmr, + (void *)p2peer->peer_id); + } + + if(init == 1) { + stw_system_timer_stop(&p2peer->peer_heartbeat_tmr); + + dlep_neighbor_deallocate_all(p2peer); + TCP_READY = 0; + + p2peer->peer_heartbeat_timeout_count = 0; + + send_dlep_peer_init_ack(p2peer); + + fsm_set_exception_state(p2peer->fsm_handle, discovery_s); + return (RC_FSM_OK); + } + + dlep_client_fsm_engine(peer_init_response_e, p2peer, NULL); + return (RC_FSM_OK); +} + + + /* NAME + * initialization_peer_init_ack_start + * + * SYNOPSIS + * RC_FSM_t + * initialization_peer_init_ack_start (void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked as response to the peer initialization + * request received in initialization state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +initialization_peer_init_ack_start (void *p2event, void *p2parm) +{ + RC_FSM_t rc; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + /* clear count */ + +// printf(" resting time out count"); + // p2peer->peer_heartbeat_timeout_count = 0; + + p2peer->status_code = RFC5444_SUCCESS; + send_dlep_peer_init_ack(p2peer); + rc = RC_FSM_OK; + +// send_peer_init_ack(p2peer); + return (rc); +} + + + + /* NAME + * in_session_peer_heartbeat_rcvd + * + * SYNOPSIS + * RC_FSM_t + * in_session_peer_heartbeat_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer heartbeat message + * is received during the in_session state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +in_session_peer_heartbeat_rcvd (void *p2event, void *p2parm) +{ + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + printf("\n EXIT BEFOR clear counter in_session_peer_heartbeat_rcvd"); + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + /* clear count */ + +// printf(" resting time out count"); + p2peer->peer_heartbeat_timeout_count = 0; + return (RC_FSM_OK); +} + + +/** + * NAME + * in_session_peer_heartbeat_tmo + * + * SYNOPSIS + * RC_FSM_t + * in_session_peer_heartbeat_tmo(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer heartbeat message + * was not received within the guard timer during the in_session + * state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_STOP_PROCESSING + * + */ +RC_FSM_t +in_session_peer_heartbeat_tmo (void *p2event, void *p2parm) +{ + RC_FSM_t rc; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } + +#endif + p2peer->peer_heartbeat_timeout_count++; + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u missed heartbeats %u " + "threshold=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->peer_heartbeat_timeout_count, + p2peer->peer_heartbeat_missed_threshold); + } + + if (p2peer->peer_heartbeat_timeout_count > + p2peer->peer_heartbeat_missed_threshold) { + stw_system_timer_stop(&p2peer->peer_heartbeat_tmr); + + dlep_neighbor_deallocate_all(p2peer); + TCP_READY = 0; + + p2peer->peer_heartbeat_timeout_count = 0; + send_dlep_peer_termination(p2peer); + fsm_set_exception_state(p2peer->fsm_handle, discovery_s); + rc = RC_FSM_OK; + + /* p2peer->status_code = RFC5444_MSG_TIMEOUT; + dlep_client_fsm_engine(user_peer_term_request_e, p2peer, NULL); + rc = RC_FSM_OK; */ + + } else { + send_dlep_peer_heartbeat(p2peer); + rc = RC_FSM_OK; + } + return (rc); +} + +/** + * NAME + * in_session_peer_update_request_rcvd + * + * SYNOPSIS + * RC_FSM_t + * in_session_peer_update_request_rcvd(void *p2event, + * void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer update request + * message is received during the in_session state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +in_session_peer_update_request_rcvd (void *p2event, void *p2parm) +{ + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + + if (msg_scratch_pad->ipv4_address_present) { + p2peer->update_ipv4_operation = msg_scratch_pad->ipv4_operation; + p2peer->ipv4_address = msg_scratch_pad->ipv4_address; + p2peer->ipv4_attached_subnet = msg_scratch_pad->ipv4_attached_subnet; + } + + /* Reseting time out count */ + p2peer->peer_heartbeat_timeout_count = 0; + + send_dlep_peer_update_response(p2peer); + return (RC_FSM_OK); +} + + +/** + * NAME + * synchronized_peer_update_response_rcvd + * + * SYNOPSIS + * RC_FSM_t + * synchronized_peer_update_response_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * The event handler is invoked when the peer update response + * message has been received during the synchronized state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_IGNORE_EVENT + * + */ +RC_FSM_t +in_session_peer_update_response_rcvd (void *p2event, void *p2parm) +{ + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u peer update rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + + p2peer->status_code = msg_scratch_pad->status_code; + return (RC_FSM_OK); +} + + +/** + * NAME + * in_session_peer_term_request + * + * SYNOPSIS + * RC_FSM_t + * in_session_peer_term_request(void *p2event, void *p2parm) + * + * DESCRIPTION + * The event handler is invoked when the user or system issues + * a request to terminate the peer and all neighbors associated + * with the peer. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is + * set prior to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_OK + * + */ +RC_FSM_t +in_session_peer_term_request (void *p2event, void *p2parm) +{ + RC_FSM_t rc; + dlep_context_peer_t *p2peer; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u term rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + + //printf("\n in_session_peer_term_request calling send_peer_ter "); + dlep_neighbor_deallocate_all(p2peer); + + //p2peer->status_code = RFC5444_SUCCESS; + send_dlep_peer_termination(p2peer); + + rc = stw_system_timer_stop(&p2peer->peer_heartbeat_tmr); + if (rc != RC_STW_OK) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + } + + /* start the peer term timer */ + stw_system_timer_start(&p2peer->peer_term_ack_tmr, + (4*p2peer->peer_heartbeat_interval), + (4*p2peer->peer_heartbeat_interval), + &dlep_peer_term_ack_tmr, + (void *)p2peer->peer_id); + + return (RC_FSM_OK); +} + +/** + * NAME + * in_session_peer_term_rcvd + * + * SYNOPSIS + * RC_FSM_t + * in_session_peer_term_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer terminate message + * is received during the in_session state. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_STOP_PROCESSING + * + */ +RC_FSM_t +in_session_peer_term_rcvd (void *p2event, void *p2parm) +{ + RC_FSM_t rc; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u term rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + + p2peer->status_code = msg_scratch_pad->status_code; + + send_dlep_peer_termination_ack(p2peer); + + /* Reset the state *\ + fsm_set_exception_state(p2peer->fsm_handle, reset_s); + + /* cancel all timers and clear context */ + dlep_neighbor_deallocate_all(p2peer); + + rc = stw_system_timer_stop(&p2peer->peer_heartbeat_tmr); + if (rc != RC_STW_OK) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + + rc = stw_system_timer_stop(&p2peer->peer_term_ack_tmr); + if (rc != RC_STW_OK) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + +#if 0 + /*** start the router offer guard timer ***/ + + stw_system_timer_start(&p2peer->peer_offer_tmr, + secs_to_milliseconds(p2config->peer_offer_interval), + secs_to_milliseconds(p2config->peer_offer_interval), + &dlep_peer_offer_tmr, + (void *)p2peer->peer_id); +#endif + /* reset the state */ + fsm_set_exception_state(p2peer->fsm_handle, discovery_s); + + return (RC_FSM_OK); +} + + +/** + * NAME + * terminating_peer_term_ack_rcvd + * + * SYNOPSIS + * RC_FSM_t + * terminating_peer_term_ack_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer terminate + * ack is received during the terminating state. The neighbor + * are all terminated and cleaned and the peer state machine + * is stopped and removed. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_IGNORE_EVENT + * RC_FSM_STOP_PROCESSING which removes the state machine + * + */ +RC_FSM_t +terminating_peer_term_ack_rcvd (void *p2event, void *p2parm) +{ + RC_FSM_t rc; + + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + + printf("\n peer_term ack rcvd \n"); + +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->expected_peer_term_ack_sequence != + msg_scratch_pad->sequence) { + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u unexpected term ack \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + return (RC_FSM_IGNORE_EVENT); + } + } +#endif + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u term ack rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + + /* cancel all timers and clear context */ + dlep_neighbor_deallocate_all(p2peer); +// close(p2config->dlep_udp_sockfd); +// close(p2config->dlep_tcp_sockfd); + TCP_READY = 0; + + rc = stw_system_timer_stop(&p2peer->peer_heartbeat_tmr); + if (rc != RC_STW_OK) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + + rc = stw_system_timer_stop(&p2peer->peer_term_ack_tmr); + if (rc != RC_STW_OK) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } +#if 0 + /*** start the router offer guard timer ***/ + + if (p2config->start_on_discovery) { + stw_system_timer_start(&p2peer->peer_offer_tmr, + secs_to_milliseconds(p2config->peer_offer_interval), + secs_to_milliseconds(p2config->peer_offer_interval), + &dlep_peer_offer_tmr, + (void *)p2peer->peer_id); + } +// dlep_porter_open(p2config); +#endif + /* reset the state */ + fsm_set_exception_state(p2peer->fsm_handle, discovery_s); + + return (RC_FSM_OK); +} + + +/** + * NAME + * terminating_peer_term_ack_tmo + * + * SYNOPSIS + * RC_FSM_t + * terminating_peer_term_ack_tmo(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer terminate + * ack is not received dnd the guard timer expires. The neighbor + * are all terminated and cleaned and the peer state machine + * is stopped and removed. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_STOP_PROCESSING which removes the state machine + * + */ +RC_FSM_t +terminating_peer_term_ack_tmo (void *p2event, void *p2parm) +{ + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + + printf("\n terminating_peer_term_ack_tmo "); + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u term ack timeout \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + + + /* ignoring retry timers, just restart discovery */ + + /* cancel all timers and clear context */ + dlep_neighbor_deallocate_all(p2peer); +// close(p2config->dlep_udp_sockfd); +// close(p2config->dlep_tcp_sockfd); + TCP_READY = 0; +#if 0 + /*** start the router offer guard timer ***/ + if (p2config->start_on_discovery) { + stw_system_timer_start(&p2peer->peer_offer_tmr, + secs_to_milliseconds(p2config->peer_offer_interval), + secs_to_milliseconds(p2config->peer_offer_interval), + &dlep_peer_offer_tmr, + (void *)p2peer->peer_id); + } +#endif + /* reset the state */ +// dlep_porter_open(p2config); + fsm_set_exception_state(p2peer->fsm_handle, discovery_s); + + return (RC_FSM_OK); +} + + +/** + * NAME + * terminating_peer_term_rcvd + * + * SYNOPSIS + * RC_FSM_t + * terminating_peer_term_rcvd(void *p2event, void *p2parm) + * + * DESCRIPTION + * This event handler is invoked when the peer terminate + * message is received during the terminating state. The neighbors + * are all terminated and the peer state machine + * is stopped and removed. + * + * INPUT PARAMETERS + * p2event - This is a pointer to the peer context which is set prior + * to invoking the state machine. + * + * p2parm - NULL on entry + * + * OUTPUT PARAMETERS + * p2event - peer state and context updated + * + * RETURN VALUE + * RC_FSM_STOP_PROCESSING which removes the state machine + * + */ +RC_FSM_t +terminating_peer_term_rcvd (void *p2event, void *p2parm) +{ + RC_FSM_t rc; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + + rfc5444_packet_scratch_pad_t *pkt_scratch_pad; + rfc5444_message_scratch_pad_t *msg_scratch_pad; + + p2peer = p2event; + if (!p2peer) { + return (RC_FSM_IGNORE_EVENT); + } + + p2config = p2peer->p2config; + pkt_scratch_pad = &p2peer->packet_scratch_pad; + msg_scratch_pad = &p2peer->message_scratch_pad; + + printf("\n terminating_peer_term_rcvd "); + +#if 0 + if (p2peer->router_id != pkt_scratch_pad->router_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u router_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->router_id, + pkt_scratch_pad->router_id); + } + return (RC_FSM_IGNORE_EVENT); + } + + if (p2peer->client_id != pkt_scratch_pad->client_id) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u client_id %u-%u invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->client_id, + pkt_scratch_pad->client_id); + } + return (RC_FSM_IGNORE_EVENT); + } +#endif + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u term rcvd \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id); + } + + rc = stw_system_timer_stop(&p2peer->peer_heartbeat_tmr); + if (rc != RC_STW_OK) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + } + + send_dlep_peer_termination_ack(p2peer); + + /* Reset the state */ + fsm_set_exception_state(p2peer->fsm_handle, reset_s); + + +// close(p2config->dlep_udp_sockfd); +// close(p2config->dlep_tcp_sockfd); + TCP_READY = 0; + +#if 0 + /*** start the router offer guard timer ***/ + if (p2config->start_on_discovery) { + stw_system_timer_start(&p2peer->peer_offer_tmr, + secs_to_milliseconds(p2config->peer_offer_interval), + secs_to_milliseconds(p2config->peer_offer_interval), + &dlep_peer_offer_tmr, + (void *)p2peer->peer_id); + + } +#endif + /* reset the state */ +// dlep_porter_open(p2config); + fsm_set_exception_state(p2peer->fsm_handle, discovery_s); + + return (RC_FSM_OK); +} + + diff --git a/dlep_radio_ipv6/dlep_client_peer_event_handlers.h b/dlep_radio_ipv6/dlep_client_peer_event_handlers.h new file mode 100644 index 0000000..023b33f --- /dev/null +++ b/dlep_radio_ipv6/dlep_client_peer_event_handlers.h @@ -0,0 +1,101 @@ +/*---------------------------------------------------------------------- + * dlep_client_peer_event_handlers.h -- client peer state event handlers + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CLIENT_PEER_EVENT_HANDLERS_H__ +#define __DLEP_CLIENT_PEER_EVENT_HANDLERS_H__ + +#include "fsm.h" + + +extern RC_FSM_t +discovery_start_init(void *p2event, void *p2parm); + +extern RC_FSM_t +discovery_peer_attached_rcvd(void *p2event, void *p2parm); + +extern RC_FSM_t +discovery_peer_offer_start(void *p2event, void *p2parm); + +/* extern RC_FSM_t +discovery_peer_offer_rcvd(void *p2event, void *p2parm); */ + +extern RC_FSM_t +initialization_peer_init_rcvd(void *p2event, void *p2parm); + +extern RC_FSM_t +initialization_peer_init_ack_start(void *p2event, void *p2parm); +/* extern RC_FSM_t +discovery_peer_offer_tmo(void *p2event, void *p2parm); */ + +/* extern RC_FSM_t +discovery_peer_init_start(void *p2event, void *p2parm); */ + +/* extern RC_FSM_t +discovery_peer_init_ack_rcvd(void *p2event, void *p2parm); */ + +extern RC_FSM_t +in_session_peer_heartbeat_rcvd(void *p2event, void *p2parm); + +extern RC_FSM_t +in_session_peer_heartbeat_tmo(void *p2event, void *p2parm); + +/* extern RC_FSM_t +in_session_peer_update_rcvd(void *p2event, void *p2parm); */ + + +extern RC_FSM_t +in_session_peer_update_request_rcvd(void *p2event, void *p2parm); + +extern RC_FSM_t +in_session_peer_update_response_rcvd(void *p2event, void *p2parm); + + +extern RC_FSM_t +in_session_peer_term_request(void *p2event, void *p2parm); + +extern RC_FSM_t +in_session_peer_term_rcvd(void *p2event, void *p2parm); + +extern RC_FSM_t +terminating_peer_term_ack_rcvd(void *p2event, void *p2parm); + +extern RC_FSM_t +terminating_peer_term_ack_tmo(void *p2event, void *p2parm); + +extern RC_FSM_t +terminating_peer_term_rcvd(void *p2event, void *p2parm); + +extern RC_FSM_t +out_of_state_rom_rcvd(void *p2event, void *p2parm); + + +#endif + diff --git a/dlep_radio_ipv6/dlep_client_peer_fsm.c b/dlep_radio_ipv6/dlep_client_peer_fsm.c new file mode 100644 index 0000000..f732212 --- /dev/null +++ b/dlep_radio_ipv6/dlep_client_peer_fsm.c @@ -0,0 +1,568 @@ +/*---------------------------------------------------------------------- + * dlep_client_fsm.c -- DLEP Client state machine + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include + +#include "fsm.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_config.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" + +#include "dlep_client_neighbor_event_handlers.h" +#include "dlep_client_peer_event_handlers.h" +#include "dlep_client_timer.h" +#include "dlep_client_peer_fsm.h" + +/* + * normalized client peer event description + */ +static event_description_t normalized_event_table[] = + {{start_init_e, "Start Event"}, + {peer_att_discovery_e, "Attached Discovery Event"}, + {peer_offer_e, "Peer Offer Event"}, + {peer_offer_tmo_e, "Peer Offer TMO Event"}, + {peer_init_request_e, "Peer Initialization Request Event"}, + {peer_init_response_e, "Peer Initialization Response Event"}, + {peer_heartbeat_e, "Peer Heartbeat Event"}, + {peer_heartbeat_tmo_e, "Peer Heartbeat TMO Event"}, + {peer_update_request_e, "Peer Update Request Event"}, + {peer_update_response_e, "Peer Update Response Event"}, + {user_peer_term_request_e, "User Node Term Request Event"}, + {peer_term_request_e, "Peer Term Event"}, + {peer_term_response_e, "Peer Term Response Event"}, + {peer_term_response_tmo_e, "Peer Term Response TMO Event"}, + {FSM_NULL_EVENT_ID, NULL} }; + + +/* + * normalized peer state description + */ +static state_description_t normalized_state_table[] = + {{discovery_s, "Idle State"}, + {initialization_s, "Initialized State"}, + {in_session_s, "Established State"}, + {terminating_s, "Terminating State"}, + {reset_s, "Resetting state"}, + {FSM_NULL_STATE_ID, NULL} }; + + +/* + * catch-all to ignore events + */ +static RC_FSM_t event_ignore (void *p2event, void *p2parm) +{ + dlep_context_peer_t *p2peer; + + p2peer = p2event; + + if (p2peer) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u event ignored: p2peer=%p peer_id=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer, + p2peer->peer_id); + } + } else { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u event ignored! \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + } + return (RC_FSM_OK); // IGNORE_EVENT); +} + + +/* + _ State event tables + */ +static event_tuple_t state_discovery_events[] = + {{start_init_e, + discovery_start_init, discovery_s}, + {peer_att_discovery_e, + discovery_peer_attached_rcvd, initialization_s}, + {peer_offer_e, + discovery_peer_offer_start, initialization_s}, + {peer_offer_tmo_e, + event_ignore, discovery_s}, + {peer_init_request_e, + initialization_peer_init_rcvd, in_session_s}, + {peer_init_response_e, + initialization_peer_init_ack_start, in_session_s}, + {peer_heartbeat_e, + event_ignore, discovery_s}, + {peer_heartbeat_tmo_e, + event_ignore, discovery_s}, + {peer_update_request_e, + event_ignore, discovery_s}, + {peer_update_response_e, + event_ignore, discovery_s}, + {user_peer_term_request_e, + event_ignore, discovery_s}, + {peer_term_request_e, + event_ignore, discovery_s}, + {peer_term_response_e, + event_ignore, discovery_s}, + {peer_term_response_tmo_e, + event_ignore, discovery_s}}; + +static event_tuple_t state_initialization_events[] = + {{start_init_e, + event_ignore, initialization_s}, + {peer_att_discovery_e, + event_ignore, initialization_s}, + {peer_offer_e, + event_ignore, initialization_s}, + {peer_offer_tmo_e, + event_ignore, initialization_s}, + {peer_init_request_e, + initialization_peer_init_rcvd, in_session_s}, + {peer_init_response_e, + initialization_peer_init_ack_start, in_session_s}, + {peer_heartbeat_e, + event_ignore, initialization_s}, + {peer_heartbeat_tmo_e, + event_ignore, initialization_s}, + {peer_update_request_e, + event_ignore, initialization_s}, + {peer_update_response_e, + event_ignore, initialization_s}, + {user_peer_term_request_e, + event_ignore, initialization_s}, + {peer_term_request_e, + event_ignore, initialization_s}, + {peer_term_response_e, + event_ignore, initialization_s}, + {peer_term_response_tmo_e, + event_ignore, initialization_s}}; + + + +static event_tuple_t state_in_session_events[] = + { {start_init_e, + event_ignore, in_session_s}, + {peer_att_discovery_e, + event_ignore, in_session_s}, + {peer_offer_e, + event_ignore, in_session_s}, + {peer_offer_tmo_e, + event_ignore, in_session_s}, + {peer_init_request_e, + event_ignore, in_session_s}, + {peer_init_response_e, + event_ignore, in_session_s}, + {peer_heartbeat_e, + in_session_peer_heartbeat_rcvd, in_session_s}, + {peer_heartbeat_tmo_e, + in_session_peer_heartbeat_tmo, in_session_s}, + {peer_update_request_e, + in_session_peer_update_request_rcvd, in_session_s}, + {peer_update_response_e, + in_session_peer_update_response_rcvd, in_session_s}, + {user_peer_term_request_e, + in_session_peer_term_request, terminating_s}, + {peer_term_request_e, + in_session_peer_term_rcvd, terminating_s}, + {peer_term_response_e, + event_ignore, in_session_s}, + {peer_term_response_tmo_e, + event_ignore, in_session_s}}; + + +static event_tuple_t state_terminating_events[] = + { {start_init_e, + event_ignore, terminating_s}, + {peer_att_discovery_e, + event_ignore, terminating_s}, + {peer_offer_e, + event_ignore, terminating_s}, + {peer_offer_tmo_e, + event_ignore, terminating_s}, + {peer_init_request_e, + event_ignore, terminating_s}, + {peer_init_response_e, + event_ignore, terminating_s}, + {peer_heartbeat_e, + event_ignore, terminating_s}, + {peer_heartbeat_tmo_e, + event_ignore, terminating_s}, + {peer_update_request_e, + event_ignore, terminating_s}, + {peer_update_response_e, + event_ignore, terminating_s}, + {user_peer_term_request_e, + event_ignore, terminating_s}, + {peer_term_request_e, + terminating_peer_term_rcvd, terminating_s}, + {peer_term_response_e, + terminating_peer_term_ack_rcvd, reset_s}, + {peer_term_response_tmo_e, + terminating_peer_term_ack_tmo, reset_s}}; + +static event_tuple_t state_reset_events[] = + {{start_init_e, + event_ignore, reset_s}, + {peer_att_discovery_e, + event_ignore, reset_s}, + {peer_offer_e, + event_ignore, reset_s}, + {peer_offer_tmo_e, + event_ignore, reset_s}, + {peer_init_request_e, + event_ignore, reset_s}, + {peer_init_response_e, + event_ignore, reset_s}, + {peer_heartbeat_e, + event_ignore, reset_s}, + {peer_heartbeat_tmo_e, + event_ignore, reset_s}, + {peer_update_request_e, + event_ignore, reset_s}, + {peer_update_response_e, + event_ignore, reset_s}, + {user_peer_term_request_e, + event_ignore, reset_s}, + {peer_term_request_e, + event_ignore, reset_s}, + {peer_term_response_e, + event_ignore, reset_s}, + {peer_term_response_tmo_e, + event_ignore, reset_s}}; + + +/* + * State table + */ +static state_tuple_t dlep_client_state_table[] = + + { {discovery_s, state_discovery_events}, + {initialization_s, state_initialization_events}, + {in_session_s, state_in_session_events}, + {terminating_s, state_terminating_events}, + {reset_s,state_reset_events}, + {FSM_NULL_STATE_ID, NULL} }; + + +/** + * NAME + * dlep_client_fsm_get_state + * + * SYNOPSIS + * uint32_t + * dlep_client_fsm_get_state(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to return the current state + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * current state + * FSM_NULL_STATE_ID if there is an error. + * + */ +uint32_t +dlep_client_fsm_get_state (dlep_context_peer_t *p2peer) +{ + uint32_t state; + + state = FSM_NULL_STATE_ID; + + if (p2peer) { + fsm_get_state(p2peer->fsm_handle, &state); + } else { + /* ignore */ + } + return (state); +} + + +/** + * NAME + * dlep_client_fsm_show_state_table + * + * SYNOPSIS + * void + * dlep_client_fsm_show_state_table(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to display the state machine counters + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * None + * + */ +void +dlep_client_fsm_show_state_table (dlep_context_peer_t *p2peer) +{ + if (p2peer) { + fsm_display_table(p2peer->fsm_handle); + } else { + /* ignore */ + } + return; +} + + +/** + * NAME + * dlep_client_fsm_show_history + * + * SYNOPSIS + * void + * dlep_client_fsm_show_history(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to display the state machine history + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * None + * + */ +void +dlep_client_fsm_show_history (dlep_context_peer_t *p2peer) +{ + if (p2peer) { + fsm_show_history(p2peer->fsm_handle); + } else { + /* ignore */ + } + return; +} + + +/** + * NAME + * dlep_client_fsm_engine + * + * SYNOPSIS + * void + * dlep_client_fsm_engine(uint32_t normalized_event, + * dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to process the state machine normalized + * events. + * + * INPUT PARAMETERS + * normalized_event - This is the state machine event to process. + * + * p2peer - This is a pointer to the peer context. + * + * p2neighbor - This is a pointer to the neighbor context. This is + * NULL for peer specific events. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * RC_FSM_STOP_PROCESSING This indicates that the state machine + * is to be terminated and resources released. + * error otherwise + * + */ +void +dlep_client_fsm_engine (uint32_t normalized_event, + dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ + RC_FSM_t rc; + + if (!p2peer) { + DLEP_DEBUG("%s-%u Error: peer is null \n", + DEBUG_FUNCTION, + DEBUG_LINE); + return; + } + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u normalized_event=%u p2peer=%p " + "peer_id=%u p2neighbor=%p \n", + DEBUG_FUNCTION, + DEBUG_LINE, + normalized_event, + p2peer, + p2peer->peer_id, + p2neighbor); + } + + rc = fsm_engine(p2peer->fsm_handle, + normalized_event, + p2peer, + p2neighbor); + + if (rc == RC_FSM_STOP_PROCESSING) { + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u p2peer=%p peer_id=%u stopped \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer, + p2peer->peer_id); + } + + /* cancel all timers and clear context */ + dlep_neighbor_deallocate_all(p2peer); + + /* stop peer timers */ + dlep_peer_clear(p2peer); + dlep_peer_remove(&p2peer); + + } else if (rc != RC_FSM_OK) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u radio state " + "machine rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + } + return; +} + + +/** + * NAME + * dlep_fsm_destroy + * + * SYNOPSIS + * void + * dlep_fsm_destroy(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to destroy the client state machine. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context. + * + * OUTPUT PARAMETERS + * p2peer - updated + * + * RETURN VALUE + * None + * + */ +void +dlep_fsm_destroy (dlep_context_peer_t *p2peer) +{ + if (!p2peer) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer is null \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + } else { + /* fsm_handle is nulled */ + fsm_destroy((fsm_t **)&p2peer->fsm_handle); + } + return; +} + + +/** + * NAME + * dlep_fsm_create + * + * SYNOPSIS + * void + * dlep_fsm_create(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to create the client state machine. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context. + * + * OUTPUT PARAMETERS + * p2peer - updated + * + * RETURN VALUE + * None + * + */ +void +dlep_fsm_create (dlep_context_peer_t *p2peer) +{ + RC_FSM_t rc; + + if (!p2peer) { + return; + } + + p2peer->fsm_handle = NULL; + rc = fsm_create((fsm_t **)&p2peer->fsm_handle, + "DLEP State Machine", + discovery_s, + normalized_state_table, + normalized_event_table, + dlep_client_state_table); + if (rc != RC_FSM_OK) { + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u radio state " + "machine rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + } + + return; +} + + diff --git a/dlep_radio_ipv6/dlep_client_peer_fsm.h b/dlep_radio_ipv6/dlep_client_peer_fsm.h new file mode 100644 index 0000000..8334007 --- /dev/null +++ b/dlep_radio_ipv6/dlep_client_peer_fsm.h @@ -0,0 +1,103 @@ +/*---------------------------------------------------------------------- + * dlep_client_fsm.h -- DLEP Client state machine + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reseved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CLIENT_FSM_H__ +#define __DLEP_CLIENT_FSM_H__ + +#include "dlep_context_peer.h" +#include "dlep_context_neighbor.h" + +/* + * normalized client events + */ +typedef enum { + start_init_e = 0, + peer_att_discovery_e, + peer_offer_e, + peer_offer_tmo_e, + peer_init_request_e, + peer_init_response_e, + peer_heartbeat_e, + peer_heartbeat_tmo_e, + peer_update_request_e, + peer_update_response_e, + user_peer_term_request_e, + peer_term_request_e, + peer_term_response_e, + peer_term_response_tmo_e, +} dlep_client_events_e; + + +/* + * normalized client states + */ +typedef enum { + discovery_s = 0, + initialization_s, + in_session_s, + terminating_s, + reset_s, +} dlep_client_states_e; + + + + +extern uint32_t +dlep_client_fsm_get_state(dlep_context_peer_t *p2peer); + + +extern void +dlep_client_fsm_show_counter(dlep_context_peer_t *p2peer); + + +extern void +dlep_client_fsm_show_state_table(dlep_context_peer_t *p2peer); + + +extern void +dlep_client_fsm_show_history(dlep_context_peer_t *p2peer); + + +extern void +dlep_client_fsm_engine(uint32_t normalized_event, + dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +dlep_fsm_destroy(dlep_context_peer_t *p2peer); + + +extern void +dlep_fsm_create(dlep_context_peer_t *p2peer); + + +#endif + diff --git a/dlep_radio_ipv6/dlep_client_timer.c b/dlep_radio_ipv6/dlep_client_timer.c new file mode 100644 index 0000000..c63b988 --- /dev/null +++ b/dlep_radio_ipv6/dlep_client_timer.c @@ -0,0 +1,301 @@ +/*---------------------------------------------------------------------- + * dlep_client_timer.c -- Client state machine guard timers + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "dlep_context_peer_management.h" +#include "dlep_client_neighbor_fsm.h" +#include "dlep_client_peer_fsm.h" +#include "dlep_client_timer.h" + + + +/** + * NAME + * dlep_peer_offer_tmr + * + * SYNOPSIS + * void + * dlep_peer_offer_tmr(stw_tmr_t *tmr, void *parm) + * + * DESCRIPTION + * The expiration of this timer indicates that the peer offer + * response expected by the peer has not been received. + * + * INPUT PARAMETERS + * tmr - This is the timer handle + * + * p2arm - This is the local peer id that was set when the timer + * was started. + * + * RETURN VALUE + * None + * + */ +void +dlep_peer_offer_tmr (stw_tmr_t *tmr, void *parm) +{ +printf("dlep_peer_offer_tmr \n"); + uint32_t peer_id; + dlep_context_peer_t *p2peer; + + peer_id = (uint32_t)parm; + p2peer = dlep_get_peer_by_peer_id(peer_id); + + printf("\n peer offer time out"); + dlep_client_fsm_engine(peer_offer_tmo_e, p2peer, NULL); + return; +} + + +/** + * NAME + * dlep_peer_heartbeat_tmr + * + * SYNOPSIS + * void + * dlep_peer_heartbeat_tmr(stw_tmr_t *tmr, void *parm) + * + * DESCRIPTION + * The expiration of this timer indicates that it is time to + * for the peer send another peer heartbeat. + * + * INPUT PARAMETERS + * tmr - This is the timer handle + * + * p2arm - This is the local peer id that was set when + * the timer was started. + * + * RETURN VALUE + * None + * + */ +void +dlep_peer_heartbeat_tmr (stw_tmr_t *tmr, void *parm) +{ +printf("dlep_peer_heartbeat_tmr"); + uint32_t peer_id; + dlep_context_peer_t *p2peer; + + peer_id = (uint32_t)parm; + p2peer = dlep_get_peer_by_peer_id(peer_id); + + dlep_client_fsm_engine(peer_heartbeat_tmo_e, p2peer, NULL); + return; +} + + +/** + * NAME + * dlep_peer_term_ack_tmr + * + * SYNOPSIS + * void + * dlep_peer_term_ack_tmr(stw_tmr_t *tmr, void *parm) + * + * DESCRIPTION + * The expiration of this timer indicates that the term ACK + * expected by the peer was not received. + * + * INPUT PARAMETERS + * tmr - This is the timer handle + * + * p2arm - This is the local peer id that was set when + * the timer was started. + * + * RETURN VALUE + * None + * + */ +void +dlep_peer_term_ack_tmr (stw_tmr_t *tmr, void *parm) +{ +printf("dlep_peer_term_ack_tmr\n"); + uint32_t peer_id; + dlep_context_peer_t *p2peer; + + peer_id = (uint32_t)parm; + p2peer = dlep_get_peer_by_peer_id(peer_id); + + printf("\n Peer term ack tmr out "); + dlep_client_fsm_engine(peer_term_response_tmo_e, p2peer, NULL); + return; +} + + +/** + * NAME + * dlep_neighbor_init_ack_tmr + * + * SYNOPSIS + * void + * dlep_neighbor_init_ack_tmr(stw_tmr_t *tmr, void *parm) + * + * DESCRIPTION + * The expiration of this timer indicates that the neighbor + * neighbor up ack was not received. The neighbor up may the + * be retransmitted. + * + * INPUT PARAMETERS + * p2arm + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_init_ack_tmr (stw_tmr_t *tmr, void *parm) +{ +printf("dlep_neighbor_init_ack_tmr\n"); + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2neighbor = parm; + p2peer = p2neighbor->p2peer; + + dlep_client_neighbor_fsm_engine(neighbor_up_ack_tmo_e, + p2peer, p2neighbor); + return; +} + + +/** + * NAME + * dlep_neighbor_update_ack_tmr + * + * SYNOPSIS + * void + * dlep_neighbor_update_ack_tmr(stw_tmr_t *tmr, void *parm) + * + * DESCRIPTION + * The expiration of this timer indicates that the neighbor + * update ack was not received. The neighbor update may the + * be retransmitted. + * + * INPUT PARAMETERS + * p2arm + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_update_ack_tmr (stw_tmr_t *tmr, void *parm) +{ +printf("dlep_neighbor_update_ack_tmr\n"); + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2neighbor = parm; + p2peer = p2neighbor->p2peer; + + dlep_client_neighbor_fsm_engine(neighbor_update_ack_tmo_e, + p2peer, p2neighbor); + return; +} + + + +/** + * NAME + * dlep_neighbor_metrics_interval_tmr + * + * SYNOPSIS + * void + * dlep_neighbor_metrics_interval_tmr(stw_tmr_t *tmr, void *parm) + * + * DESCRIPTION + * The expiration of this timer is used to periodically + * generate the periodic neighbor metrics message. + * + * INPUT PARAMETERS + * tmr - This is a handle to the timer + * + * p2arm - This is a pointer to the neighbor context that + * was set when the timer was started. + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_metrics_interval_tmr (stw_tmr_t *tmr, void *parm) +{ +printf("dlep_neighbor_metrics_interval_tmr\n"); + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2neighbor = parm; + p2peer = p2neighbor->p2peer; + + dlep_client_neighbor_fsm_engine(neighbor_update_metrics_interval_e, + p2peer, p2neighbor); + return; +} + + +/** + * NAME + * dlep_neighbor_term_ack_tmr + * + * SYNOPSIS + * void + * dlep_neighbor_term_ack_tmr(stw_tmr_t *tmr, void *parm) + * + * DESCRIPTION + * The expiration of this timer indicates that theneighbor + * neighbor down was not received. The neighbor down may the + * be retransmitted. + * + * INPUT PARAMETERS + * p2arm + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_term_ack_tmr (stw_tmr_t *tmr, void *parm) +{ +printf("dlep_neighbor_term_ack_tmr\n"); + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + p2neighbor = parm; + p2peer = p2neighbor->p2peer; + + dlep_client_neighbor_fsm_engine(neighbor_down_ack_tmo_e, + p2peer, p2neighbor); + return; +} + diff --git a/dlep_radio_ipv6/dlep_client_timer.h b/dlep_radio_ipv6/dlep_client_timer.h new file mode 100644 index 0000000..c133dc6 --- /dev/null +++ b/dlep_radio_ipv6/dlep_client_timer.h @@ -0,0 +1,64 @@ +/*---------------------------------------------------------------------- + * dlep_client_timer.h + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CLIENT_TIMER_H__ +#define __DLEP_CLIENT_TIMER_H__ + +#include "stw_system_timer.h" + + +extern void +dlep_peer_offer_tmr(stw_tmr_t *tmr, void *parm); + +extern void +dlep_peer_heartbeat_tmr(stw_tmr_t *tmr, void *parm); + +extern void +dlep_peer_term_ack_tmr(stw_tmr_t *tmr, void *parm); + +extern void +dlep_neighbor_init_ack_tmr(stw_tmr_t *tmr, void *parm); + +extern void +dlep_neighbor_update_ack_tmr(stw_tmr_t *tmr, void *parm); + +//exter n void +//d lep_n ei ghbor_met rics_tmr(stw_tmr_t *tmr, void *parm); + +extern void +dlep_neighbor_metrics_interval_tmr(stw_tmr_t *tmr, void *parm); + +extern void +dlep_neighbor_term_ack_tmr(stw_tmr_t *tmr, void *parm); + + +#endif + diff --git a/dlep_radio_ipv6/dlep_config.c b/dlep_radio_ipv6/dlep_config.c new file mode 100644 index 0000000..fa74704 --- /dev/null +++ b/dlep_radio_ipv6/dlep_config.c @@ -0,0 +1,670 @@ +/*---------------------------------------------------------------------- + * dlep_config.c -- Routine to parse the configuration file + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include +#include + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_config.h" + + +static dlep_config_t dlep_config; + + +/** + * NAME + * dlep_get_config_ptr + * + * SYNOPSIS + * dlep_config_t *dlep_get_config_ptr(void) + * + * DESCRIPTION + * This function can be used to get the pointer to the + * configuration structure. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * The configuration structure pointer. + * + */ +dlep_config_t *dlep_get_config_ptr (void) +{ + return (&dlep_config); +} + + +/** + * NAME + * dlep_default_config + * + * SYNOPSIS + * void + * dlep_default_config(void) + * + * DESCRIPTION + * This function sets the configuration data to default values, where + * default values apply. + * + * INPUT PARAMETERS + * p2config Pointer to the config structure + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * None + * + */ +void +dlep_default_config (void) +{ + dlep_config_t *p2config; + + p2config = &dlep_config; + + strcpy(p2config->filename, "dlep_sim.cfg"); + + strcpy(p2config->sim_name, "dlep"); + + p2config->local_udp_port = 0; + p2config->local_tcp_port = 0; + + p2config->local_ipv4_dot[0] = '\0'; + ipv4_zero_address(&p2config->local_ipv4); + + p2config->local_ipv6_dot[0] = '\0'; + ipv6_zero_address(&p2config->local_ipv6); + + p2config->router_udp_port = 0; + p2config->router_tcp_port = 0; + + p2config->router_ipv4_dot[0] = '\0'; + ipv4_zero_address(&p2config->router_ipv4); + + p2config->router_ipv6_dot[0] = '\0'; + ipv6_zero_address(&p2config->router_ipv6); + + p2config->start_on_launch = TRUE; + + strcpy(p2config->local_type_description, "no type description"); + + + p2config->local_id = 0; + + p2config->peer_offer_interval = + DLEP_PEER_OFFER_INTERVAL_DEFAULT; + + p2config->peer_heartbeat_interval = + DLEP_PEER_HEARTBEAT_INTERVAL_DEFAULT; + p2config->peer_heartbeat_missed_threshold = + DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_DEFAULT; + + p2config->peer_term_ack_tmo = + DLEP_PEER_TERM_ACK_TMO_DEFAULT; + p2config->peer_term_missed_ack_threshold = + DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_DEFAULT; + + p2config->neighbor_up_ack_tmo = + DLEP_NEIGHBOR_UP_ACK_TMO_DEFAULT; + p2config->neighbor_up_missed_ack_threshold = + DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_DEFAULT; + + p2config->neighbor_update_interval_tmo = + DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_DEFAULT; + + p2config->neighbor_activity_timer = + DLEP_NEIGHBOR_ACTIVITY_TIMER_DEFAULT; + + p2config->neighbor_down_ack_tmo = + DLEP_NEIGHBOR_DOWN_ACK_TMO_DEFAULT; + p2config->neighbor_down_missed_ack_threshold = + DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_DEFAULT; + + return; +} + + +/** + * NAME + * dlep_display_config + * + * SYNOPSIS + * void + * dlep_display_config(dlep_config_t *p2config) + * + * DESCRIPTION + * This function displays the configuration data to the console. + * + * INPUT PARAMETERS + * p2config Pointer to the config structure + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_display_config (dlep_config_t *p2config) +{ + if (!p2config) { + return; + } + + printf("\n%s DLEP Configuration from %s \n", + p2config->sim_name, + p2config->filename); + + printf(" local udp port=%u \n", + p2config->local_udp_port); + printf(" local tcp port=%u \n", + p2config->local_tcp_port); + printf(" local ipv6=%s \n", + p2config->local_ipv6_dot); + + if (p2config->router_udp_port) { + printf(" router udp port=%u \n", + p2config->router_udp_port); + } + + if (p2config->router_tcp_port) { + printf(" router tcp port=%u \n", + p2config->router_tcp_port); + } + + if (p2config->router_udp_port && p2config->router_tcp_port) { + printf(" router ipv6=%s \n", + p2config->router_ipv6_dot); + } + + + printf("\n"); + + printf(" Type Description: %s \n", + p2config->local_type_description); + + printf(" local ID=%u \n", + p2config->local_id); + + printf(" peer_offer_tmo=%u seconds \n", + p2config->peer_offer_interval); + + printf(" peer_heartbeat_interval=%u seconds \n", + p2config->peer_heartbeat_interval); + + printf(" peer_heartbeat_missed_threshold=%u \n", + p2config->peer_heartbeat_missed_threshold); + + printf(" peer_term_ack_tmo=%u milliseconds \n", + p2config->peer_term_ack_tmo); + + printf(" peer_term_missed_ack_threshold=%u \n", + p2config->peer_term_missed_ack_threshold); + + printf("\n"); + + printf(" neighbor_up_ack_tmo=%u milliseconds \n", + p2config->neighbor_up_ack_tmo); + + printf(" neighbor_up_missed_ack_threshold=%u \n", + p2config->neighbor_up_missed_ack_threshold); + + printf(" neighbor_update_interval_tmo=%u milliseconds \n", + p2config->neighbor_update_interval_tmo); + + printf(" neighbor_activity_timer=%u seconds \n", + p2config->neighbor_activity_timer); + + printf(" neighbor_down_ack_tmo=%u milliseconds \n", + p2config->neighbor_down_ack_tmo); + + printf(" neighbor_down_missed_ack_threshold=%u \n", + p2config->neighbor_down_missed_ack_threshold); + + printf("\n"); + return; +} + + +/** + * NAME + * dlep_read_config_file + * + * SYNOPSIS + * void + * dlep_read_config_file(dlep_config_t *p2config) + * + * DESCRIPTION + * This function parses the configuration file and assigns + * the appropriate parameters in the config struct. + * + * INPUT PARAMETERS + * p2config - This is a pointer to the DLEP configuration data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_read_config_file (dlep_config_t *p2config) +{ + int i, line_count; + uint32_t temp; + + FILE *fp; + +#define MAX_INPUT_LENGTH ( 512 ) + char input_string[MAX_INPUT_LENGTH]; + +#define ARGC_MAX ( 5 ) + uint32_t argc; + char *argv[ARGC_MAX]; + + fp = fopen(p2config->filename, "r"); + if (!fp) { + printf("Error: problem opening config file: %s\n", + p2config->filename); + return; + } + + line_count = 0; + while (fgets(input_string, MAX_INPUT_LENGTH, fp)) { + + if (input_string[0] == '\0') { + continue; + } else if (input_string[0] == '#') { + continue; + } + + argv[0] = strtok(input_string, " \t\n"); + argc = 1; + + for (i=1; isim_name, argv[1], DLEP_SIM_NAME_LEN); + } + + /* peer debug flags */ + else if (strncmp(argv[0], "DEBUG_FLAGS", + strlen("DEBUG_FLAGS")) == 0) { + if (dlep_debug_flags) { + /* cli debug flag sticks */ + } else { + dlep_debug_flags = strtoul(argv[1], NULL, 16); + } + } + + else if (strncmp(argv[0], "MANUAL_START", + strlen("MANUAL_START")) == 0) { + p2config->start_on_launch = FALSE; + } + + else if (strncmp(argv[0], "DISCOVERY_START", + strlen("DISCOVERY_START")) == 0) { + p2config->start_on_discovery = TRUE; + } + + else if (strncmp(argv[0], "LOCAL_UDP_PORT", + strlen("LOCAL_UDP_PORT")) == 0) { + p2config->local_udp_port = strtoul(argv[1], NULL, 10); + } + + else if (strncmp(argv[0], "LOCAL_TCP_PORT", + strlen("LOCAL_TCP_PORT")) == 0) { + p2config->local_tcp_port = strtoul(argv[1], NULL, 10); + } + + else if (strncmp(argv[0], "LOCAL_IPV4", + strlen("LOCAL_IPV4")) == 0) { + strcpy(p2config->local_ipv4_dot, argv[1]); + + ipv4_dot_decimal2digits(&p2config->local_ipv4, argv[1]); + } + + else if (strncmp(argv[0], "LOCAL_IPV6", //added for local + strlen("LOCAL_IPV6")) == 0) { + strcpy(p2config->local_ipv6_dot, argv[1]); + ipv6_ascii2digits(&p2config->local_ipv6, argv[1]); + int j; +#if 0 + for(j=0;j<4;j++) + printf("local ipv6 ascii values %lu\n",p2config->local_ipv6.v6_addr.v6_addr32[i]); +#endif + } + + + else if (strncmp(argv[0], "ROUTER_UDP_PORT", + strlen("ROUTER_UDP_PORT")) == 0) { + p2config->router_udp_port = strtoul(argv[1], NULL, 10); + } + + else if (strncmp(argv[0], "ROUTER_TCP_PORT", + strlen("ROUTER_TCP_PORT")) == 0) { + p2config->router_tcp_port = strtoul(argv[1], NULL, 10); + } + + else if (strncmp(argv[0], "ROUTER_IPV4", + strlen("ROUTER_IPV4")) == 0) { + strcpy(p2config->router_ipv4_dot, argv[1]); + + ipv4_dot_decimal2digits(&p2config->router_ipv4, argv[1]); + p2config->router_ipv4.v4_addr.v4_addr32 = + htonl(p2config->router_ipv4.v4_addr.v4_addr32); + } + + else if (strncmp(argv[0], "ROUTER_IPV6", //added for router + strlen("ROUTER_IPV6")) == 0) { + strcpy(p2config->router_ipv6_dot, argv[1]); + + ipv6_ascii2digits(&p2config->router_ipv6, argv[1]); +#if 0 + memcpy(p2config->router_ipv6.v6_addr.v6_addr32,p2config->router_ipv6.v6_addr.v6_addr32,sizeof(ipv6_address_t)); + char ipAddress[16]; + inet_ntop(AF_INET6, &(p2config->router_ipv6.v6_addr), ipAddress,16); + printf("The IPV6 address is: %s\n", ipAddress); +#endif + // int i; + // for(i=0;i<4;i++) +#if 0 + printf("ipv6 ascii values %02x:02x:%02x:%02x:%02x:%02x:%02x:%02x\n",(int)p2config->router_ipv6.v6_addr.v6_addr16[0], + (int)p2config->router_ipv6.v6_addr.v6_addr16[1], + (int)p2config->router_ipv6.v6_addr.v6_addr16[2], + (int)p2config->router_ipv6.v6_addr.v6_addr16[3], + (int)p2config->router_ipv6.v6_addr.v6_addr16[4], + (int)p2config->router_ipv6.v6_addr.v6_addr16[5], + (int)p2config->router_ipv6.v6_addr.v6_addr16[6], + (int)p2config->router_ipv6.v6_addr.v6_addr16[7]); +#endif +#if 0 //vinod + p2config->router_ipv6.v6_addr.v6_addr32[0] = + htonl(p2config->router_ipv6.v6_addr.v6_addr32[0]); + p2config->router_ipv6.v6_addr.v6_addr32[1] = + htonl(p2config->router_ipv6.v6_addr.v6_addr32[1]); + p2config->router_ipv6.v6_addr.v6_addr32[2] = + htonl(p2config->router_ipv6.v6_addr.v6_addr32[2]); + p2config->router_ipv6.v6_addr.v6_addr32[3] = + htonl(p2config->router_ipv6.v6_addr.v6_addr32[3]); +#endif + + p2config->router_ipv6.v6_addr.v6_addr16[0] = + htonl(p2config->router_ipv6.v6_addr.v6_addr16[0]); + p2config->router_ipv6.v6_addr.v6_addr16[1] = + htonl(p2config->router_ipv6.v6_addr.v6_addr16[1]); + p2config->router_ipv6.v6_addr.v6_addr16[2] = + htonl(p2config->router_ipv6.v6_addr.v6_addr16[2]); + p2config->router_ipv6.v6_addr.v6_addr16[3] = + htonl(p2config->router_ipv6.v6_addr.v6_addr16[3]); + p2config->router_ipv6.v6_addr.v6_addr16[4] = + htonl(p2config->router_ipv6.v6_addr.v6_addr16[4]); + p2config->router_ipv6.v6_addr.v6_addr16[5] = + htonl(p2config->router_ipv6.v6_addr.v6_addr16[5]); + p2config->router_ipv6.v6_addr.v6_addr16[6] = + htonl(p2config->router_ipv6.v6_addr.v6_addr16[6]); + p2config->router_ipv6.v6_addr.v6_addr16[7] = + htonl(p2config->router_ipv6.v6_addr.v6_addr16[7]); + + + } + + + else if (strncmp(argv[0], "TYPE_DESCRIPTION", + strlen("TYPE_DESCRIPTION")) == 0) { + strncpy(p2config->local_type_description, + argv[1], RFC5444_TLV_PEER_TYPE_MAX_LENGTH); + + p2config->local_type_description[RFC5444_TLV_PEER_TYPE_MAX_LENGTH] = '\0'; + } + + else if (strncmp(argv[0], "LOCAL_ID", + strlen("LOCAL_ID")) == 0) { + temp = strtoul(argv[1], NULL, 10); + p2config->local_id = temp; + } + + else if (strncmp(argv[0], "DLEP_PEER_HEARTBEAT_INTERVAL", + strlen("DLEP_PEER_HEARTBEAT_INTERVAL")) == 0) { + p2config->peer_heartbeat_interval = strtoul(argv[1], NULL, 10); + + if (p2config->peer_heartbeat_interval < + DLEP_PEER_HEARTBEAT_INTERVAL_MIN) { + p2config->peer_heartbeat_interval = + DLEP_PEER_HEARTBEAT_INTERVAL_MIN; + } + + if (p2config->peer_heartbeat_interval > + DLEP_PEER_HEARTBEAT_INTERVAL_MAX) { + p2config->peer_heartbeat_interval = + DLEP_PEER_HEARTBEAT_INTERVAL_MAX; + } + } + + else if (strncmp(argv[0], "DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD", + strlen("DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD")) == 0) { + p2config->peer_heartbeat_missed_threshold = + strtoul(argv[1], NULL, 10); + + if (p2config->peer_heartbeat_missed_threshold < + DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_MIN) { + p2config->peer_heartbeat_missed_threshold = + DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_MIN; + } + + if (p2config->peer_heartbeat_missed_threshold > + DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_MAX) { + p2config->peer_heartbeat_missed_threshold = + DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_MAX; + } + } + + else if (strncmp(argv[0], "DLEP_PEER_TERM_ACK_TMO", + strlen("DLEP_PEER_TERM_ACK_TMO")) == 0) { + p2config->peer_term_ack_tmo = strtoul(argv[1], NULL, 10); + + if (p2config->peer_term_ack_tmo < + DLEP_PEER_TERM_ACK_TMO_MIN) { + p2config->peer_term_ack_tmo = + DLEP_PEER_TERM_ACK_TMO_MIN; + } + + if (p2config->peer_term_ack_tmo > + DLEP_PEER_TERM_ACK_TMO_MAX) { + p2config->peer_term_ack_tmo = + DLEP_PEER_TERM_ACK_TMO_MAX; + } + } + + else if (strncmp(argv[0], "DLEP_PEER_TERM_MISSED_ACK_THRESHOLD", + strlen("DLEP_PEER_TERM_MISSED_ACK_THRESHOLD")) == 0) { + p2config->peer_term_missed_ack_threshold = + strtoul(argv[1], NULL, 10); + + if (p2config->peer_term_missed_ack_threshold < + DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_MIN) { + p2config->peer_term_missed_ack_threshold = + DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_MIN; + } + + if (p2config->peer_term_missed_ack_threshold > + DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_MAX) { + p2config->peer_term_missed_ack_threshold = + DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_MAX; + } + } + + else if (strncmp(argv[0], "DLEP_NEIGHBOR_UP_ACK_TMO", + strlen("DLEP_NEIGHBOR_UP_ACK_TMO")) == 0) { + p2config->neighbor_up_ack_tmo = strtoul(argv[1], NULL, 10); + + if (p2config->neighbor_up_ack_tmo < + DLEP_NEIGHBOR_UP_ACK_TMO_MIN) { + p2config->neighbor_up_ack_tmo = + DLEP_NEIGHBOR_UP_ACK_TMO_MIN; + } + + if (p2config->neighbor_up_ack_tmo > + DLEP_NEIGHBOR_UP_ACK_TMO_MAX) { + p2config->neighbor_up_ack_tmo = + DLEP_NEIGHBOR_UP_ACK_TMO_MAX; + } + } + + else if (strncmp(argv[0], "DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD", + strlen("DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD")) == 0) { + p2config->neighbor_up_missed_ack_threshold = + strtoul(argv[1], NULL, 10); + + if (p2config->neighbor_up_missed_ack_threshold < + DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_MIN) { + p2config->neighbor_up_missed_ack_threshold = + DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_MIN; + } + + if (p2config->neighbor_up_missed_ack_threshold > + DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_MAX) { + p2config->neighbor_up_missed_ack_threshold = + DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_MAX; + } + } + + else if (strncmp(argv[0], "DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO", + strlen("DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO")) == 0) { + p2config->neighbor_update_interval_tmo = + strtoul(argv[1], NULL, 10); + + if (p2config->neighbor_update_interval_tmo > 0) { + if (p2config->neighbor_update_interval_tmo < + DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_MIN) { + p2config->neighbor_update_interval_tmo = + DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_MIN; + } + + if (p2config->neighbor_update_interval_tmo > + DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_MAX) { + p2config->neighbor_update_interval_tmo = + DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_MAX; + } + } + } + + else if (strncmp(argv[0], "DLEP_NEIGHBOR_ACTIVITY_TIMER", + strlen("DLEP_NEIGHBOR_ACTIVITY_TIMER")) == 0) { + p2config->neighbor_activity_timer = strtoul(argv[1], NULL, 10); + + if (!p2config->neighbor_activity_timer) { + if (p2config->neighbor_activity_timer < + DLEP_NEIGHBOR_ACTIVITY_TIMER_MIN) { + p2config->neighbor_activity_timer = + DLEP_NEIGHBOR_ACTIVITY_TIMER_MIN; + } + + if (p2config->neighbor_activity_timer > + DLEP_NEIGHBOR_ACTIVITY_TIMER_MAX) { + p2config->neighbor_activity_timer = + DLEP_NEIGHBOR_ACTIVITY_TIMER_MAX; + } + } + } + + else if (strncmp(argv[0], "DLEP_NEIGHBOR_DOWN_ACK_TMO", + strlen("DLEP_NEIGHBOR_DOWN_ACK_TMO")) == 0) { + p2config->neighbor_down_ack_tmo = strtoul(argv[1], NULL, 10); + + if (p2config->neighbor_down_ack_tmo < + DLEP_NEIGHBOR_DOWN_ACK_TMO_MIN) { + p2config->neighbor_down_ack_tmo = + DLEP_NEIGHBOR_DOWN_ACK_TMO_MIN; + } + + if (p2config->neighbor_down_ack_tmo > + DLEP_NEIGHBOR_DOWN_ACK_TMO_MAX) { + p2config->neighbor_down_ack_tmo = + DLEP_NEIGHBOR_DOWN_ACK_TMO_MAX; + } + } + + else if (strncmp(argv[0], "DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD", + strlen("DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD")) == 0) { + p2config->neighbor_down_missed_ack_threshold = + strtoul(argv[1], NULL, 10); + + if (p2config->neighbor_down_missed_ack_threshold < + DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_MIN) { + p2config->neighbor_down_missed_ack_threshold = + DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_MIN; + } + + if (p2config->neighbor_down_missed_ack_threshold > + DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_MAX) { + p2config->neighbor_down_missed_ack_threshold = + DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_MAX; + } + } + + else { + printf("%s-%u Unknown config file option -%s-\n", + __FUNCTION__, + __LINE__, + argv[0]); + } + } + + fclose(fp); + return; +} + diff --git a/dlep_radio_ipv6/dlep_config.h b/dlep_radio_ipv6/dlep_config.h new file mode 100644 index 0000000..6004ad6 --- /dev/null +++ b/dlep_radio_ipv6/dlep_config.h @@ -0,0 +1,285 @@ +/*---------------------------------------------------------------------- + * dlep_config.h - routines to parse the config file + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CONFIG_H__ +#define __DLEP_CONFIG_H__ + +#include +#include +#include + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" +#include "stw_system_timer.h" + +#include "rfc5444_types.h" + + + + +#define ROUTER_DEFAULT_PORT ( 5000 ) +#define RADIO_DEFAULT_PORT ( 5001 ) + + +/* + * The configuration range for the router offer timeout + * in seconds. The MIM is retransmitted if the ROM is + * not received. + */ +#define DLEP_PEER_OFFER_INTERVAL_MIN ( 1 ) +#define DLEP_PEER_OFFER_INTERVAL_MAX ( 60 ) +#define DLEP_PEER_OFFER_INTERVAL_DEFAULT ( 5 ) + +/* + * The configuration range for the peer heartbeat timeout. + * This is the time that each node, server and client, + * expects to receive the peer heartbeat. 0 disables. + * Time units are in seconds. + */ +#define DLEP_PEER_HEARTBEAT_INTERVAL_MIN ( 1 ) +#define DLEP_PEER_HEARTBEAT_INTERVAL_MAX ( 60 ) +#define DLEP_PEER_HEARTBEAT_INTERVAL_DEFAULT ( 5 ) + +/* + * The number of consecutive missed HBs that result in + * a failure. + */ +#define DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_MIN ( 2 ) +#define DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_MAX ( 8 ) +#define DLEP_PEER_HEARTBEAT_MISSED_THRESHOLD_DEFAULT ( 3 ) + + +/* + * The configuration range for the peer terminate ack timeout. + * This is the time the client waits for the peer term ack. + * Time units are milliseconds. + */ +#define DLEP_PEER_TERM_ACK_TMO_MIN ( 100 ) +#define DLEP_PEER_TERM_ACK_TMO_MAX ( 5000 ) +#define DLEP_PEER_TERM_ACK_TMO_DEFAULT ( 1000 ) + +/* + * The max number of peer term ack timeouts that are tolerated. + */ +#define DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_MIN ( 1 ) +#define DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_MAX ( 5 ) +#define DLEP_PEER_TERM_MISSED_ACK_THRESHOLD_DEFAULT ( 3 ) + + +/* + * The configuration range for the neighbor up ack timeout. + * This is the time the client waits for the neighbor up ack. + * Time units are milliseconds. + */ +#define DLEP_NEIGHBOR_UP_ACK_TMO_MIN ( 100 ) +#define DLEP_NEIGHBOR_UP_ACK_TMO_MAX ( 40000 ) +#define DLEP_NEIGHBOR_UP_ACK_TMO_DEFAULT ( 1000 ) + +/* + * The configuration range for the retransmission threshold for + * the neighbor up. + */ +#define DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_MIN ( 1 ) +#define DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_MAX ( 5 ) +#define DLEP_NEIGHBOR_UP_MISSED_ACK_THRESHOLD_DEFAULT ( 3 ) + + +/* + * The configuration range the for the periodic neighbor update + * timer. The client sends neighbor updates at this interval. + * Time units are milliseconds. + */ +#define DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_MIN ( 100 ) +#define DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_MAX ( 5000 ) +#define DLEP_NEIGHBOR_UPDATE_INTERVAL_TMO_DEFAULT ( 400 ) + +/* + * The configuration range the for the neighbor activity + * timer. The server expects to see traffic on a neighbor + * session during this interval. Time units are seconds. + * 0 disables. + */ +#define DLEP_NEIGHBOR_ACTIVITY_TIMER_MIN ( 0 ) +#define DLEP_NEIGHBOR_ACTIVITY_TIMER_MAX ( 5 ) +#define DLEP_NEIGHBOR_ACTIVITY_TIMER_DEFAULT ( 10 ) + + +/* + * The configuration range the neighbor down ack timeout. + * This is the time the client waits for the neighbor down ack. + * Time units are milliseconds. + */ +#define DLEP_NEIGHBOR_DOWN_ACK_TMO_MIN ( 100 ) +#define DLEP_NEIGHBOR_DOWN_ACK_TMO_MAX ( 5000 ) +#define DLEP_NEIGHBOR_DOWN_ACK_TMO_DEFAULT ( 1000 ) + +/* + * The max number of neighbor down ack timeouts that are tolerated. + * Once the threshold is reached, neighbor downs are stopped + * and the neighbor cleaned up. + */ +#define DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_MIN ( 1 ) +#define DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_MAX ( 5 ) +#define DLEP_NEIGHBOR_DOWN_MISSED_ACK_THRESHOLD_DEFAULT ( 3 ) + + +#define DLEP_FILENAME_LEN ( 128 ) +#define ROOT_PATH_LEN ( 512 ) +#define DLEP_SIM_NAME_LEN ( 32 ) + + +/* + * Defines the data used to manage config data + * and stateless data + */ +typedef struct { + char filename[DLEP_FILENAME_LEN]; + + char sim_name[DLEP_SIM_NAME_LEN]; + + /* port for the local udp and tcp */ + uint16_t local_udp_port; + uint16_t local_tcp_port; + + /* ipv4 for the local */ + char local_ipv4_dot[IPV4_ADDR_STRING_LEN]; + ipv4_address_t local_ipv4; + + /* ipv6 for the local */ // added for local + char local_ipv6_dot[IPV6_ADDR_STRING_LEN]; + ipv6_address_t local_ipv6; + + /* port for the client */ + uint16_t router_udp_port; + uint16_t router_tcp_port; + boolean_t router_port_present; + + /* The router IPv4 address info */ + char router_ipv4_dot[IPV4_ADDR_STRING_LEN]; + ipv4_address_t router_ipv4; + boolean_t router_ipv4_present; + + /* The router IPv6 address info */ //added for router + char router_ipv6_dot[IPV6_ADDR_STRING_LEN]; + ipv6_address_t router_ipv6; + boolean_t router_ipv6_present; + + /* Used by radio discovery */ + char dlep_multicast_ipv4_dot[IPV4_ADDR_STRING_LEN]; + ipv4_address_t dlep_multicast_ipv4; + + char dlep_multicast_ipv6_dot[IPV6_ADDR_STRING_LEN]; + ipv6_address_t dlep_multicast_ipv6; + + /* + * Configuration data + */ + char local_type_description[RFC5444_TLV_PEER_TYPE_MAX_LENGTH+1]; + + + uint16_t flow_control; + uint16_t auth_type; + + boolean_t start_on_launch; + boolean_t start_on_discovery; + + uint32_t local_id; + + //FIX -- uint8_t heartbeat_interval; + + uint32_t peer_offer_interval; + + /* 0-60 seconds. 0-disables. Must match the peer's interval */ + uint32_t peer_heartbeat_interval; + + /* missed HBs that indicate failure */ + uint32_t peer_heartbeat_missed_threshold; + + uint32_t peer_term_ack_tmo; + uint32_t peer_term_missed_ack_threshold; + + uint32_t neighbor_up_ack_tmo; + uint32_t neighbor_up_missed_ack_threshold; + + /* to drive periodic updates in milliseconds, 400 default */ + uint32_t neighbor_update_interval_tmo; + + uint32_t neighbor_activity_timer; + + uint32_t neighbor_down_ack_tmo; + uint32_t neighbor_down_missed_ack_threshold; + + int dlep_udp_sockfd; + int dlep_tcp_sockfd; + int dlep_tcp_client_sockfd; + + struct sockaddr_in dlep_addr; + struct sockaddr_in client; + struct sockaddr_in client_udp; + + struct sockaddr_in6 client_udp_6; + struct sockaddr_in6 dlep_addr6; + struct sockaddr_in6 client_6; + + struct ipv6_mreq group6; + struct ip_mreq group; + int reuse; + + int client_lenght; + socklen_t dlep_sock_len; + + struct sockaddr_in msg_addr; + struct sockaddr_in6 msg6_addr; + socklen_t msg_sock_len; + +} dlep_config_t; + + + + +extern +dlep_config_t *dlep_get_config_ptr(void); + +extern void +dlep_default_config(void); + +extern void +dlep_display_config(dlep_config_t *p2config); + +extern void +dlep_read_config_file(dlep_config_t *p2config); + + +#endif + + diff --git a/dlep_radio_ipv6/dlep_context_neighbor.c b/dlep_radio_ipv6/dlep_context_neighbor.c new file mode 100644 index 0000000..2c58ad6 --- /dev/null +++ b/dlep_radio_ipv6/dlep_context_neighbor.c @@ -0,0 +1,316 @@ +/*---------------------------------------------------------------------- + * dlep_context_neighbor.c -- neighbor context management routines + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include +#include + +#include "stw_system_timer.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_server_neighbor_fsm.h" +#include "dlep_context_neighbor.h" + + +static uint16_t sid = 0; + + +static uint16_t sid_alloc (void) +{ + sid++; + return (sid); +} + + +/** + * NAME + * dlep_get_next_neighbor_id + * + * SYNOPSIS + * #include "dlep_context_neighbor.h" + * uint16_t + * dlep_get_next_neighbor_id(void) + * + * DESCRIPTION + * This function returns the next neighbor ID. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * Next neighbor ID + * + */ +uint16_t +dlep_get_next_neighbor_id (void) +{ + return (sid_alloc()); +} + + +/** + * NAME + * dlep_neighbor_init + * + * SYNOPSIS + * #include "dlep_context_neighbor.h" + * void + * dlep_neighbor_init(dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function initializes the neighbor context data after the + * neighbor has been allocated. + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context + * + * OUTPUT PARAMETERS + * p2neighbor - updated + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_init (dlep_context_neighbor_t *p2neighbor) +{ +printf("dlep_neighbor_init\n"); + if (!p2neighbor) { + return; + } + + p2neighbor->p2next_neighbor = NULL; + + p2neighbor->local_id = 0; + + /* The global neighbor id to be assigned by the server */ + p2neighbor->sequence = 0; + + p2neighbor->status_code = RFC5444_SUCCESS; + + /* + * Saved sequence number to match the neighbor init + * ACK from the router. + */ + p2neighbor->expected_neighbor_init_ack_sequence = 0; + p2neighbor->expected_neighbor_term_ack_sequence = 0; + p2neighbor->expected_neighbor_address_response_sequence = 0; + p2neighbor->expected_neighbor_link_char_response_sequence = 0; + + /* + * RF metrics + */ + p2neighbor->rlq_tx = 100; + p2neighbor->resources = 100; + p2neighbor->latency = 10; + p2neighbor->cdr_tx = 1000000000; + p2neighbor->mdr_tx = 1000000000; + p2neighbor->mtu = 1500; + + /* + * This is the number of times the init ACK timer has + * expired waiting on the init ACK. + */ + p2neighbor->neighbor_up_ack_tmo_count = 0; + + /* + * This is the number of times the update ACK timer has + * expired waiting on the update ACK. + */ + p2neighbor->neighbor_update_ack_tmo_count = 0; + + /* + * used by the activity tmr to track messages on the neighbor neighbor + * TRUE == active + */ + p2neighbor->neighbor_activity_flag = 0; + + /* + * default activity timer duration, seconds + */ + p2neighbor->neighbor_activity_duration = 5; + + /* Initialize IPv4/IPv6 addresses */ + ipv4_zero_address(&p2neighbor->ipv4_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + + p2neighbor->ipv6_subnet_prefix = 0; + p2neighbor->update_ipv6_operation = RFC5444_NO_ADDRESS; + + /* + * This is the number of times the terminate ACK timer has + * expired waiting on the terminate ACK. + */ + p2neighbor->neighbor_down_ack_tmo_count = 0; + + p2neighbor->neighbor_fsm_handle = NULL; + dlep_neighbor_fsm_create(p2neighbor); + + stw_system_timer_prepare(&p2neighbor->neighbor_init_ack_tmr); + stw_system_timer_prepare(&p2neighbor->neighbor_update_ack_tmr); + stw_system_timer_prepare(&p2neighbor->neighbor_activity_tmr); + stw_system_timer_prepare(&p2neighbor->neighbor_update_interval_tmr); + stw_system_timer_prepare(&p2neighbor->neighbor_term_ack_tmr); + + return; +} + + +/** + * NAME + * dlep_neighbor_clear + * + * SYNOPSIS + * #include "dlep_context_neighbor.h" + * void + * dlep_neighbor_clear(dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function should be called as part of the work needed to + * tear down a neighbor. All activity is stopped and neighbor + * internal resources are released. + * + * The context block itself is not released. + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context + * + * OUTPUT PARAMETERS + * p2neighbor - updated + * + * RETURN VALUE + * None + * + */ +void +dlep_neighbor_clear (dlep_context_neighbor_t *p2neighbor) +{ +printf("dlep_neighbor_clear\n"); + if (!p2neighbor) { + return; + } + + p2neighbor->local_id = 0; + + mac_zero_address(p2neighbor->mac_address); + + stw_system_timer_stop(&p2neighbor->neighbor_init_ack_tmr); + stw_system_timer_stop(&p2neighbor->neighbor_update_ack_tmr); + stw_system_timer_stop(&p2neighbor->neighbor_activity_tmr); + stw_system_timer_stop(&p2neighbor->neighbor_update_interval_tmr); + stw_system_timer_stop(&p2neighbor->neighbor_term_ack_tmr); + return; +} + + +/** + * NAME + * dlep_neighbor_display + * + * SYNOPSIS + * #include "dlep_context_neighbor.h" + * void + * dlep_neighbor_display(dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function displays the neighbor context data + * + * INPUT PARAMETERS + * p2neighbor - This is a pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_neighbor_display (dlep_context_neighbor_t *p2neighbor) +{ +printf("dlep_neighbor_display\n"); + ipv4_address_t addr_ipv4; + ipv6_address_t addr_ipv6; + if (!p2neighbor) { + return; + } + + mac_print_address (" Neighbor MAC=", p2neighbor->mac_address); +#if 0 + addr_ipv6.v6_addr.v6_addr32[0] = p2neighbor->ipv6_address.v6_addr.v6_addr32[0]; //added + addr_ipv6.v6_addr.v6_addr32[1] = p2neighbor->ipv6_address.v6_addr.v6_addr32[1]; + addr_ipv6.v6_addr.v6_addr32[2] = p2neighbor->ipv6_address.v6_addr.v6_addr32[2]; + addr_ipv6.v6_addr.v6_addr32[3] = p2neighbor->ipv6_address.v6_addr.v6_addr32[3]; +#endif +//vinod + + addr_ipv6.v6_addr.v6_addr16[0] = p2neighbor->ipv6_address.v6_addr.v6_addr16[0]; + addr_ipv6.v6_addr.v6_addr16[1] = p2neighbor->ipv6_address.v6_addr.v6_addr16[1]; + addr_ipv6.v6_addr.v6_addr16[2] = p2neighbor->ipv6_address.v6_addr.v6_addr16[2]; + addr_ipv6.v6_addr.v6_addr16[3] = p2neighbor->ipv6_address.v6_addr.v6_addr16[3]; + addr_ipv6.v6_addr.v6_addr16[4] = p2neighbor->ipv6_address.v6_addr.v6_addr16[4]; + addr_ipv6.v6_addr.v6_addr16[5] = p2neighbor->ipv6_address.v6_addr.v6_addr16[5]; + addr_ipv6.v6_addr.v6_addr16[6] = p2neighbor->ipv6_address.v6_addr.v6_addr16[6]; + addr_ipv6.v6_addr.v6_addr16[7] = p2neighbor->ipv6_address.v6_addr.v6_addr16[7]; + + + ipv6_print_address(" Neighbor IPv6=", &addr_ipv6); + + addr_ipv4.v4_addr.v4_addr32 = p2neighbor->ipv4_address.v4_addr.v4_addr32; + ipv4_print_address(" Neighbor IPv4=", &addr_ipv4); + + /* ipv4_print_address(" Neighbor IPv4=",&p2neighbor->ipv4_address); + ipv4_print_address(NULL,&p2neighbor->ipv4_address); */ + + printf(" activity timer=%u milliseconds \n", + p2neighbor->neighbor_activity_duration); + + printf(" Metrics:\n"); + printf(" RLQ TX=%u <0-100>", p2neighbor->rlq_tx); + printf(" RLQ RX=%u <0-100> \n", p2neighbor->rlq_rx); + printf(" Resources =%u <0-100> \n", p2neighbor->resources); + printf(" Latency=%llu milliseconds \n", p2neighbor->latency); + printf(" CDR TX=%llu bps ", p2neighbor->cdr_tx); + printf(" CDR RX=%llu bps \n", p2neighbor->cdr_rx); + printf(" MDR TX=%llu bps ", p2neighbor->mdr_tx); + printf(" MDR RX=%llu bps \n", p2neighbor->mdr_rx); + printf(" MTU=%u \n",p2neighbor->mtu); + + return; +} + + diff --git a/dlep_radio_ipv6/dlep_context_neighbor.h b/dlep_radio_ipv6/dlep_context_neighbor.h new file mode 100644 index 0000000..993a501 --- /dev/null +++ b/dlep_radio_ipv6/dlep_context_neighbor.h @@ -0,0 +1,151 @@ +/*---------------------------------------------------------------------- + * dlep_context_neighbor.h -- Session context definitions + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CONTEXT_NEIGHBOR_H__ +#define __DLEP_CONTEXT_NEIGHBOR_H__ + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" +#include "stw_system_timer.h" + +#include "rfc5444_types.h" + + + +/* + * Defines the data used to manage a neighbor + * and its stateful data + */ +typedef struct context_neighbor_t_ { + struct context_neighbor_t_ *p2next_neighbor; + + /* pointer back to the peer context */ + void *p2peer; + + /* used to track responses */ + uint16_t sequence; + + /* a locally metered neighbor ID for user I/F */ + uint32_t local_id; + + /* Set the status code from the last neighbor operation + * or as required to sending a neighbor message. + */ + uint16_t status_code; + + /* squirrel away the sequence number to track responses */ + uint16_t expected_neighbor_init_ack_sequence; + uint16_t expected_neighbor_term_ack_sequence; + uint16_t expected_neighbor_address_response_sequence; + uint16_t expected_neighbor_link_char_response_sequence; + + uint8_t mac_address[MAC_ADDR_LEN_IN_BYTES]; + ipv4_address_t ipv4_address; + ipv6_address_t ipv6_address; + + /* + * neighbor_update_address layer 3 addresses + * update layer 3 addresses for the sim + */ + uint8_t update_ipv4_operation; + ipv4_address_t update_ipv4_address; + + uint8_t update_ipv6_operation; + uint8_t ipv6_subnet_prefix; + ipv6_address_t update_ipv6_address; + ipv6_address_t update_ipv6_subnet_address; + + /* + * RF metrics + */ +#if 0 + uint8_t rlq; /* 0-poor, 100-good */ + uint8_t resources; /* 0-100% */ + uint16_t latency; /* millisec */ + uint64_t cdr; /* kbps */ + uint64_t mdr; /* kbps */ +#endif + uint8_t rlq_rx; /* 0-poor, 100-good */ + uint8_t rlq_tx; /* 0-poor, 100-good */ + uint8_t resources_rx; /* 0 -100% */ + uint8_t resources_tx; /* 0 -100% */ + uint64_t latency; /* millisec */ + uint8_t resources; /* 0 -100% */ + uint16_t mtu; + uint64_t cdr_rx; /* bps */ + uint64_t cdr_tx; /* bps */ + uint64_t mdr_tx; /* bps */ + uint64_t mdr_rx; /* bps */ + uint64_t mrw; /* credits */ + uint64_t rrw; /* credits */ + uint64_t cgr; /* credits */ + uint32_t eft; /* millisec */ + + boolean_t CREDIT_NOT_SUPPORTED; /* credits */ + /* neighbor state machine handle */ + void *neighbor_fsm_handle; + + /* state machine working variables */ + uint32_t neighbor_up_ack_tmo_count; + uint32_t neighbor_update_ack_tmo_count; + uint32_t neighbor_down_ack_tmo_count; + + uint32_t neighbor_activity_duration; + boolean_t neighbor_activity_flag; + + stw_tmr_t neighbor_init_ack_tmr; + stw_tmr_t neighbor_update_ack_tmr; + stw_tmr_t neighbor_activity_tmr; + stw_tmr_t neighbor_update_interval_tmr; + stw_tmr_t neighbor_term_ack_tmr; + +} dlep_context_neighbor_t; + + + + +extern uint16_t +dlep_get_next_neighbor_id(void); + +extern void +dlep_neighbor_init(dlep_context_neighbor_t *p2neighbor); + +extern void +dlep_neighbor_clear(dlep_context_neighbor_t *p2neighbor); + +extern void +dlep_neighbor_display(dlep_context_neighbor_t *p2neighbor); + + +#endif + diff --git a/dlep_radio_ipv6/dlep_context_neighbor_management.c b/dlep_radio_ipv6/dlep_context_neighbor_management.c new file mode 100644 index 0000000..fb1303f --- /dev/null +++ b/dlep_radio_ipv6/dlep_context_neighbor_management.c @@ -0,0 +1,476 @@ +/*---------------------------------------------------------------------- + * dlep_context_neighbor_management.c + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include +#include +#include +#include + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_context_peer.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" + + +static uint32_t local_id = 5000; + + +/* + * Porting: The implementation of the functions in this file can be + * changed to platform specific resource management APIs, such as + * AVL or RB trees. + */ + + +/* + * function to meter a local id + */ +static uint32_t +dlep_get_next_local_id (void) +{ + local_id++; + if (!local_id) { + local_id++; + } + return (local_id); +} + + +/** + * NAME + * dlep_allocate_session + * + * SYNOPSIS + * #include "dlep_context_neighbor_management.h" + * dlep_context_neighbor_t + * *dlep_neighbor_allocate(dlep_context_peer_t *p2peer, + * uint8_t *mac_address) + * + * DESCRIPTION + * Allocates a neighbor context block for a new neighbor. The + * neighbor context is set to defaults and put in the database. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context. + * + * mac_address - This is a pointer the MAC address assigned + * to the neighbor. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * A pointer to the newly allocated neighbor context. + * NULL is returned if the allocation failed. + * + */ +dlep_context_neighbor_t +*dlep_neighbor_allocate (dlep_context_peer_t *p2peer, + uint8_t *mac_address) +{ +printf("dlep_neighbor_allocate\n"); + dlep_context_neighbor_t *p2ctx; + + if (!p2peer) { + return (NULL); + } + + if (!mac_address) { + return (NULL); + } + + p2ctx = NULL; + p2ctx = malloc(sizeof(dlep_context_neighbor_t)); + if (!p2ctx) { + DLEP_DEBUG("%s-%u Error: No resource for new neighbor block \n", + DEBUG_FUNCTION, + DEBUG_LINE); + return (NULL); + } + + dlep_neighbor_init(p2ctx); + + p2ctx->p2peer = p2peer; + + p2ctx->local_id = dlep_get_next_local_id(); + + /* The sequence number must be used to correlate the + * ACKs with the original request. + */ + p2ctx->sequence = 0; + + mac_copy_address(p2ctx->mac_address, mac_address); + + /* + * insert the new context in the list + */ + p2ctx->p2next_neighbor = p2peer->neighbor_list; + p2peer->neighbor_list = p2ctx; + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Allocated local id=%u neighbor %p \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2ctx->local_id, + p2ctx); + } + + return (p2ctx); +} + + +/** + * NAME + * dlep_neighbor_remove + * + * SYNOPSIS + * #include "dlep_context_neighbor_management.h" + * void + * dlep_neighbor_remove(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t **p2neighbor) + * + * DESCRIPTION + * This function removes the neighbor context block from + * the nodes database. Dynamically allocated memory + * must be freed prior to removing a neighbor. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context. + * + * p2neighbor - A pointer to the neighbor context block pointer + * + * OUTPUT PARAMETERS + * p2neighbor - updated. + * + * RETURN VALUE + * none + * + */ +void +dlep_neighbor_remove (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t **p2neighbor) +{ +printf("dlep_neighbor_remove\n"); + dlep_context_neighbor_t *p2previous; + dlep_context_neighbor_t *p2ctx; + + if (!p2peer) { + DLEP_DEBUG("%s-%u peer context null \n", + DEBUG_FUNCTION, + DEBUG_LINE); + return; + } + + p2ctx = p2peer->neighbor_list; + + if (!p2ctx) { + DLEP_DEBUG("%s-%u Empty neighbor list \n", + DEBUG_FUNCTION, + DEBUG_LINE); + return; + } + + if (p2ctx == *p2neighbor) { + p2peer->neighbor_list = p2ctx->p2next_neighbor; + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u deallocating local id=%u %p \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2ctx->local_id, + p2ctx); + } + + /* now free the block */ + free(p2ctx); + + *p2neighbor = NULL; + return; + } + + p2previous = p2peer->neighbor_list; + p2ctx = p2previous->p2next_neighbor; + + while (p2ctx) { + + if (p2ctx == *p2neighbor) { + p2previous->p2next_neighbor = p2ctx->p2next_neighbor; + + if (dlep_debug_flags & DLEP_NEIGHBOR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u deallocating local id=%u %p \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2ctx->local_id, + p2ctx); + } + + free(p2ctx); + + *p2neighbor = NULL; + break; + + } else { + /* walk the list */ + p2previous = p2ctx; + p2ctx = p2ctx->p2next_neighbor; + } + } + return; +} + + +/** + * NAME + * dlep_get_neighbor_by_local_id + * + * SYNOPSIS + * #include "dlep_context_neighbor_management.h" + * dlep_context_neighbor_t + * *dlep_get_neighbor_by_local_id(dlep_context_peer_t *p2peer, + * uint32_t local_id) + * + * DESCRIPTION + * This function searches the database for the specified local ID + * and returns the neighbor context pointer. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context + * + * local_id - The local ID to locate + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * A pointer to the neighbor context. + * NULL is returned if the neighbor was not found. + * + */ +dlep_context_neighbor_t +*dlep_get_neighbor_by_local_id (dlep_context_peer_t *p2peer, + uint32_t local_id) +{ +printf("dlep_get_neighbor_by_local_id\n"); + dlep_context_neighbor_t *result; + dlep_context_neighbor_t *p2ctx; + + if (!p2peer) { + DLEP_DEBUG("%s-%u null peer context \n", + DEBUG_FUNCTION, + DEBUG_LINE); + return (NULL); + } + + result = NULL; + + p2ctx = p2peer->neighbor_list; + while (p2ctx) { + + if (p2ctx->local_id == local_id) { + result = p2ctx; + break; + + } else { + /* walk the list */ + p2ctx = p2ctx->p2next_neighbor; + } + } + return (result); +} + + +/** + * NAME + * dlep_get_neighbor_by_mac_address + * + * SYNOPSIS + * #include "dlep_context_neighbor_management.h" + * dlep_context_neighbor_t + * *dlep_get_neighbor_by_mac_address(dlep_context_peer_t *p2peer, + * uint8_t *p2mac_address) + * + * DESCRIPTION + * This function searches the database for the specified MAC address + * and returns the neighbor context pointer. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context + * + * p2mac_address - the MAC to locate + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * A pointer to the neighbor context. + * NULL is returned if the neighbor was not found. + * + */ +dlep_context_neighbor_t +*dlep_get_neighbor_by_mac_address (dlep_context_peer_t *p2peer, + uint8_t *p2mac_address) +{ +printf("dlep_get_neighbor_by_mac_address\n"); + dlep_context_neighbor_t *result; + dlep_context_neighbor_t *p2ctx; + + if (!p2peer) { + return (NULL); + } + + result = NULL; + + p2ctx = p2peer->neighbor_list; + while (p2ctx) { + + if (mac_compare_address(p2ctx->mac_address, p2mac_address)) { +// printf("\n Checking MAC in the MAC LIST"); + result = p2ctx; + break; + + } else { + /* walk the list */ + p2ctx = p2ctx->p2next_neighbor; + } + } +// printf("\n Not preset MAC in the MAC list"); + return (result); +} + + +/** + * NAME + * dlep_neighbor_deallocate_all + * + * SYNOPSIS + * #include "dlep_context_neighbor_management.h" + * void + * dlep_neighbor_deallocate_all(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function removes and frees all neighbor context blocks + * tied to this node. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_neighbor_deallocate_all (dlep_context_peer_t *p2peer) + +{ +printf("dlep_neighbor_deallocate_all\n"); + dlep_context_neighbor_t *p2ctx; + + if (!p2peer) { + return; + } + + /* + * Now free each block + */ + while (p2peer->neighbor_list) { + p2ctx = p2peer->neighbor_list; + + /* clear and stop processing */ + dlep_neighbor_clear(p2ctx); + + p2peer->neighbor_list = p2ctx->p2next_neighbor; + free(p2ctx); + } + + /* + * Nullify the node's neighbor list + */ + p2peer->neighbor_list = NULL; + return; +} + + +/** + * NAME + * dlep_neighbor_list_all + * + * SYNOPSIS + * #include "dlep_context_neighbor_management.h" + * void + * dlep_neighbor_list_all(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function displays all established neighbors on + * the peer to stdout. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_neighbor_list_all (dlep_context_peer_t *p2peer) +{ +printf("dlep_neighbor_list_all\n"); + dlep_context_neighbor_t *p2ctx; + + if (!p2peer) { + return; + } + + p2ctx = p2peer->neighbor_list; + while (p2ctx) { + dlep_neighbor_display(p2ctx); + p2ctx = p2ctx->p2next_neighbor; + } + printf("\n"); + return; +} + + diff --git a/dlep_radio_ipv6/dlep_context_neighbor_management.h b/dlep_radio_ipv6/dlep_context_neighbor_management.h new file mode 100644 index 0000000..200121a --- /dev/null +++ b/dlep_radio_ipv6/dlep_context_neighbor_management.h @@ -0,0 +1,63 @@ +/*---------------------------------------------------------------------- + * dlep_context_neighbor_management.h + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CONTEXT_SESSION_MANAGEMENT_H__ +#define __DLEP_CONTEXT_SESSION_MANAGEMENT_H__ + +#include "dlep_context_neighbor.h" +#include "dlep_context_peer.h" + + +extern dlep_context_neighbor_t +*dlep_neighbor_allocate(dlep_context_peer_t *p2peer, + uint8_t *mac_address); + +extern void +dlep_neighbor_remove(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t **p2context); + +extern dlep_context_neighbor_t +*dlep_get_neighbor_by_local_id(dlep_context_peer_t *p2peer, + uint32_t local_id); + +extern dlep_context_neighbor_t +*dlep_get_neighbor_by_mac_address(dlep_context_peer_t *p2peer, + uint8_t *mac_address); + +extern void +dlep_neighbor_deallocate_all(dlep_context_peer_t *p2peer); + +extern void +dlep_neighbor_list_all(dlep_context_peer_t *p2peer); + + +#endif + diff --git a/dlep_radio_ipv6/dlep_context_peer.c b/dlep_radio_ipv6/dlep_context_peer.c new file mode 100644 index 0000000..4bc7f00 --- /dev/null +++ b/dlep_radio_ipv6/dlep_context_peer.c @@ -0,0 +1,482 @@ +/*---------------------------------------------------------------------- + * dlep_context_peer.c -- Routines to manage the peer context data + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "stw_system_timer.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_config.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_peer.h" + + +extern void +dlep_fsm_destroy(dlep_context_peer_t *p2peer); + +extern void +dlep_fsm_create(dlep_context_peer_t *p2peer); + + + +/* Meters a locally unique ID for nodes */ +static uint32_t peer_id_meter = 0; + + +/* + * API to increment seq ID + */ +uint16_t +get_next_sequence_number (dlep_context_peer_t *p2peer) +{ + if (!p2peer) { + return (0); + } + + p2peer->sequence++; + if (!p2peer->sequence) { + p2peer->sequence++; + } + return (p2peer->sequence); +} + + + +/* + * Local API to meter peer IDs + */ +static uint32_t +get_next_peer_id (void) +{ + peer_id_meter++; + if (!peer_id_meter) { + peer_id_meter++; + } + return (peer_id_meter); +} + +/* Below two init functions are added for DLEPv7 */ + +/* + * init optional signal data + */ +static uint32_t init_optional_signal(void) { + + uint32_t opt_signal = 0; + + opt_signal |= (~(~0 << (RFC5444_MAX_MESSAGE_CODE - 1))); + + opt_signal &= (~(1 << (RFC5444_MSG_PEER_UPDATE_RES -1))); + opt_signal &= (~(1 << (RFC5444_MSG_PEER_UPDATE_REQ -1))); + opt_signal &= (~(1 << (RFC5444_MSG_LINK_CHAR_RES -1))); + opt_signal &= (~(1 << (RFC5444_MSG_LINK_CHAR_REQ -1))); + + return opt_signal; +} + +/* + * init optional data item + */ +static uint32_t init_optional_data_item(void) { + + uint32_t opt_data = 0; + + opt_data |= (~(~0 << (RFC5444_MAX_DATA_ITEM - 1))); + + + opt_data &= (~(1 << (RFC5444_TLV_LINK_RESOURCES_METRIC_RX - 1))); + opt_data &= (~(1 << (RFC5444_TLV_LINK_RESOURCES_METRIC_TX - 1))); + opt_data &= (~(1 << (RFC5444_TLV_LINK_RLQ_METRIC_TX -1))); + opt_data &= (~(1 << (RFC5444_TLV_LINK_RLQ_METRIC_RX -1))); + opt_data &= (~(1 << (RFC5444_TLV_CREDIT_WINDOW_STATUS -1))); + opt_data &= (~(1 << (RFC5444_TLV_CREDIT_GRANT -1))); + opt_data &= (~(1 << (RFC5444_TLV_CREDIT_REQUEST -1))); + opt_data &= (~(1 << (RFC5444_TLV_VENDOR_EXTENSION -1))); + opt_data &= (~(1 << (RFC5444_TLV_IPV4_ATTACHED_SUBNET -1))); + opt_data &= (~(1 << (RFC5444_TLV_IPV6_ATTACHED_SUBNET -1))); + + return opt_data; +} + +/** + * NAME + * dlep_peer_init + * + * SYNOPSIS + * #include "dlep_context_peer.h" + * void + * dlep_peer_init(dlep_config_t *p2config, + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function initializes the peer context data after the + * peer has been allocated. The function copies the configuration + * parameters to the peer context. This prevents changes to + * configuration parameters occuring while the protocol is + * active. + * + * INPUT PARAMETERS + * p2config - A pointer to the configuration data + * + * p2peer - A pointer to the peer context + * + * OUTPUT PARAMETERS + * p2peer - updated + * + * RETURN VALUE + * None + * + */ +void +dlep_peer_init (dlep_config_t *p2config, dlep_context_peer_t *p2peer) +{ + if (!p2config || !p2peer) { + return; + } + + p2peer->p2config = p2config; + + /* + * The next_node pointer and the IPv4:Port are already present + */ + p2peer->peer_id = get_next_peer_id(); + + p2peer->sequence = 0; + p2peer->router_id = 0; + p2peer->client_id = 0; + + p2peer->expected_peer_offer_sequence = 0; + p2peer->expected_peer_term_ack_sequence = 0; + p2peer->expected_peer_update_response_sequence = 0; + + p2peer->status_code = RFC5444_SUCCESS; + + strcpy(p2peer->peer_type_description, "no peer description"); + p2peer->peer_type_description[RFC5444_TLV_PEER_TYPE_MAX_LENGTH] = '\0'; + + + p2peer->peer_term_ack_tmo = + p2config->peer_term_ack_tmo; + p2peer->peer_term_missed_ack_threshold = + p2config->peer_term_missed_ack_threshold; + + p2peer->peer_heartbeat_interval = + p2config->peer_heartbeat_interval; + p2peer->peer_heartbeat_missed_threshold = + p2config->peer_heartbeat_missed_threshold; + + p2peer->neighbor_up_ack_tmo = + p2config->neighbor_up_ack_tmo; + p2peer->neighbor_up_missed_ack_threshold = + p2config->neighbor_up_missed_ack_threshold; + + p2peer->neighbor_update_interval_tmo = + p2config->neighbor_update_interval_tmo; + + p2peer->neighbor_activity_timer = + p2config->neighbor_activity_timer; + + p2peer->neighbor_down_ack_tmo = + p2config->neighbor_down_ack_tmo; + p2peer->neighbor_down_missed_ack_threshold = + p2config->neighbor_down_missed_ack_threshold; + + + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + ipv4_zero_address(&p2peer->update_ipv4_address); + + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + ipv6_zero_address(&p2peer->update_ipv6_address); + + + /* + * This is the number of times the timer has + * expired waiting on the ack msg. + */ + p2peer->peer_offer_timeout_count = 0; + p2peer->peer_heartbeat_timeout_count = 0; + p2peer->peer_term_ack_timeout_count = 0; + + /* + * pointer to a single linked list of neighbors associated + * with this node. + */ + p2peer->neighbor_list = NULL; + + p2peer->fsm_handle = NULL; + dlep_fsm_create(p2peer); + + /* + * init optional data and signal item + */ + p2peer->optional_signal = init_optional_signal(); + p2peer->optional_data_item = init_optional_data_item(); + + stw_system_timer_prepare(&p2peer->peer_offer_tmr); + stw_system_timer_prepare(&p2peer->peer_heartbeat_tmr); + stw_system_timer_prepare(&p2peer->peer_term_ack_tmr); + + return; +} + + +/** + * NAME + * dlep_peer_clear + * + * SYNOPSIS + * #include "dlep_context_peer.h" + * void + * dlep_peer_clear(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function should be called as part of the work + * needed to tear down a node. + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer data + * structure to be freed. + * + * OUTPUT PARAMETERS + * p2peer - cleared + * + * RETURN VALUE + * None + * + */ +void +dlep_peer_clear (dlep_context_peer_t *p2peer) +{ + RC_STW_t rc; + + if (!p2peer) { + printf("%s-%u peer pointer null \n", + DEBUG_FUNCTION, DEBUG_LINE); + return; + } + + rc = stw_system_timer_stop(&p2peer->peer_offer_tmr); + if (rc != RC_STW_OK) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + + rc = stw_system_timer_stop(&p2peer->peer_heartbeat_tmr); + if (rc != RC_STW_OK) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + + rc = stw_system_timer_stop(&p2peer->peer_term_ack_tmr); + if (rc != RC_STW_OK) { + DLEP_DEBUG("%s-%u peer_id=%u rc_stw rc=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + rc); + } + + p2peer->peer_id = 0; + p2peer->peer_udp_port = 0; + p2peer->peer_tcp_port = 0; + + dlep_fsm_destroy(p2peer); + return; +} + + +/** + * NAME + * dlep_peer_display + * + * SYNOPSIS + * #include "dlep_context_peer.h" + * void + * dlep_peer_display(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function displays the peer node data + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_peer_short_display (dlep_context_peer_t *p2peer) +{ + if (!p2peer) { + return; + } + + printf("\nDLEP Local Client %u \n", + p2peer->peer_id); + + /* printf(" Client ID=%u \n", + p2peer->client_id); + + printf(" Router ID=%u \n", + p2peer->router_id); */ + + printf(" Peer Description=%s \n", + p2peer->peer_type_description); + + printf(" Peer UDP port=%u \n", + p2peer->peer_udp_port); + + printf(" Peer TCP port=%u \n", + p2peer->peer_tcp_port); + + ipv4_print_address(" Peer IPv4", + &p2peer->peer_ipv4); + + ipv6_print_address(" Peer IPv6", + &p2peer->peer_ipv6); + + return; +} + + +/** + * NAME + * dlep_peer_display + * + * SYNOPSIS + * #include "dlep_context_peer.h" + * void + * dlep_peer_display(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function displays the peer node data + * + * INPUT PARAMETERS + * p2peer - This is a pointer to the peer data + * structure to be freed. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_peer_display (dlep_context_peer_t *p2peer) +{ + if (!p2peer) { + return; + } + + printf("\nDLEP Local Client %u \n", + p2peer->peer_id); + + /* printf(" Client ID=%u \n", + p2peer->client_id); + + printf(" Router ID=%u \n", + p2peer->router_id); */ + + printf(" Peer Description=%s \n", + p2peer->peer_type_description); + + printf(" Peer UDP port=%u \n", + p2peer->peer_udp_port); + + printf(" Peer TCP port=%u \n", + p2peer->peer_tcp_port); + + ipv4_print_address(" Peer IPv4", + &p2peer->peer_ipv4); + + ipv6_print_address(" Peer IPv6", + &p2peer->peer_ipv6); + + /* printf(" router offer timeout count=%u \n", + p2peer->peer_offer_timeout_count); */ + + printf(" peer heartbeat missed count=%u \n", + p2peer->peer_heartbeat_timeout_count); + + /* printf(" peer term ack missed count=%u \n", + p2peer->peer_term_ack_timeout_count); */ + + printf(" peer term ack missed threshold=%u \n", + p2peer->peer_term_missed_ack_threshold); + + printf(" neighbor_up_ack_tmo=%u milliseconds \n", + p2peer->neighbor_up_ack_tmo); + + printf(" neighbor_up_missed_ack_threshold=%u \n", + p2peer->neighbor_up_missed_ack_threshold); + + printf(" neighbor_update_interval_tmo=%u milliseconds \n", + p2peer->neighbor_update_interval_tmo); + + printf(" neighbor_activity_timer=%u \n", + p2peer->neighbor_activity_timer); + + printf(" neighbor_down_ack_tmo=%u milliseconds \n", + p2peer->neighbor_down_ack_tmo); + + printf(" neighbor_down_missed_ack_threshold=%u \n", + p2peer->neighbor_down_missed_ack_threshold); + + printf(" Metrics:\n"); + printf(" RLQ TX=%u <0-100>", p2peer->rlq_tx); + printf(" RLQ RX=%u <0-100> \n", p2peer->rlq_rx); + printf(" Resources =%u <0-100>", p2peer->resources); + printf(" Latency=%llu milliseconds \n", p2peer->latency); + printf(" CDR TX=%llu bps ", p2peer->cdr_tx); + printf(" CDR RX=%llu bps \n", p2peer->cdr_rx); + printf(" MDR TX=%llu bps ", p2peer->mdr_tx); + printf(" MDR RX=%llu bps \n", p2peer->mdr_rx); + printf(" MTU=%u \n",p2peer->mtu); + + return; +} + + diff --git a/dlep_radio_ipv6/dlep_context_peer.h b/dlep_radio_ipv6/dlep_context_peer.h new file mode 100644 index 0000000..d256572 --- /dev/null +++ b/dlep_radio_ipv6/dlep_context_peer.h @@ -0,0 +1,230 @@ +/*---------------------------------------------------------------------- + * dlep_context_peer.h -- routines to manage the peer context data + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CONTEXT_PEER_H__ +#define __DLEP_CONTEXT_PEER_H__ + +#include +#include +#include + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" +#include "stw_system_timer.h" + +#include "rfc5444_scratch_pad.h" + +#include "dlep_config.h" +#include "dlep_context_neighbor.h" + + +#define ERROR_STRING_LENGTH ( 32 ) + + + +/* + * Defines the data used to manage a node + */ +typedef struct context_peer_t_ { + struct context_peer_t_ *p2next_peer; + + /* a locally unique ID for display and user I/F */ + uint32_t peer_id; + + /* DLEP IDs */ + uint32_t router_id; + uint32_t client_id; + + /* link to the configuration data */ + dlep_config_t *p2config; + + /* + * incremented with each peer and neighbor message + * transmitted + */ + uint16_t sequence; + + /* expected seq set when the modem init is sent */ + uint16_t expected_peer_offer_sequence; + + /* expected seq set when the peer term is sent */ + uint16_t expected_peer_term_ack_sequence; + + /* expected seq set when the peer update is sent */ + uint16_t expected_peer_update_response_sequence; + + /* + * If the return code is non-zero, an error occurred + * and the Return Status TLV will be inserted when a + * response is built. + */ + uint16_t status_code; + + char peer_type_description[RFC5444_TLV_PEER_TYPE_MAX_LENGTH+1]; + + /* + * peer ip address info to uniquely discriminate nodes + */ +#if 0 + uint16_t peer_port; +#endif + uint16_t peer_udp_port; + uint16_t peer_tcp_port; + ipv4_address_t peer_ipv4; + ipv6_address_t peer_ipv6; + + struct sockaddr_in msg_addr; + struct sockaddr_in6 msg6_addr; + + socklen_t msg_sock_len; + + ipv4_address_t ipv4_address; + ipv6_address_t ipv6_address; + + + ipv4_address_t ipv4_attached_subnet; + // ipv6_address_t ipv6_attached_subnet; + + uint32_t peer_term_ack_tmo; + uint32_t peer_term_missed_ack_threshold; + + uint32_t peer_heartbeat_interval; + uint32_t peer_heartbeat_missed_threshold; + + /* + * peer_update addresses + * update layer 3 addresses for the sim + */ + uint8_t update_ipv4_operation; + ipv4_address_t update_ipv4_address; + + uint8_t update_ipv6_operation; + ipv6_address_t update_ipv6_address; + + + uint32_t neighbor_up_ack_tmo; + uint32_t neighbor_up_missed_ack_threshold; + + /* + * used by the client to drive periodic updates + * in milliseconds + */ + uint32_t neighbor_update_interval_tmo; + + uint32_t neighbor_activity_timer; + + uint32_t neighbor_down_ack_tmo; + uint32_t neighbor_down_missed_ack_threshold; + + + /* + * Peer Link-wide RF metrics + */ + uint16_t peer_supported_metrics; + + uint8_t rlq_rx; /* 0-poor, 100-good */ + uint8_t rlq_tx; /* 0-poor, 100-good */ + uint8_t resources_rx; /* 0 -100% */ + uint8_t resources_tx; /* 0 -100% */ + uint8_t resources; /* added for v27 */ + uint64_t latency; /* millisec */ + uint64_t cdr_rx; /* bps */ + uint64_t cdr_tx; /* bps */ + uint64_t mdr_tx; /* bps */ + uint64_t mdr_rx; /* bps */ + uint32_t eft; /* millisec */ + uint16_t mtu; /* added for v27 */ + /* + * Adding optional and data signal + */ + uint32_t optional_signal; + uint32_t optional_data_item; + + /* + * A few peer state working variables + */ + uint32_t peer_offer_timeout_count; + uint32_t peer_heartbeat_timeout_count; + uint32_t peer_term_ack_timeout_count; + + /* + * The list of neighbors associated with this node. + * For simplicity, this is a linked list. If the + * number of neighbors per peer is small, this is + * not a problem. If the numbers increase we can + * go to a hasher. + */ + dlep_context_neighbor_t *neighbor_list; + + /* + * peer state machine handle + */ + void *fsm_handle; + + stw_tmr_t peer_offer_tmr; + stw_tmr_t peer_heartbeat_tmr; + stw_tmr_t peer_term_ack_tmr; + + /* + * When a received message is parsed, its contents are + * parsed here. The data is then passed to the state + * machine where it is processed relative to the + * state for correctness. + */ + rfc5444_packet_scratch_pad_t packet_scratch_pad; + rfc5444_message_scratch_pad_t message_scratch_pad; + + uint32_t ttl; + +} dlep_context_peer_t; + + + +extern uint16_t +get_next_sequence_number(dlep_context_peer_t *p2peer); + +extern void +dlep_peer_init(dlep_config_t *p2config, dlep_context_peer_t *p2peer); + +extern void +dlep_peer_clear(dlep_context_peer_t *p2peer); + +extern void +dlep_peer_short_display(dlep_context_peer_t *p2peer); + +extern void +dlep_peer_display(dlep_context_peer_t *p2peer); + + +#endif + diff --git a/dlep_radio_ipv6/dlep_context_peer_management.c b/dlep_radio_ipv6/dlep_context_peer_management.c new file mode 100644 index 0000000..808e291 --- /dev/null +++ b/dlep_radio_ipv6/dlep_context_peer_management.c @@ -0,0 +1,499 @@ +/*---------------------------------------------------------------------- + * dlep_context_node_management.c + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include +#include +#include +#include + +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" + + +/* + * List anchor for the local nodes + */ +static dlep_context_peer_t *p2peer_list = NULL; + + +/** + * NAME + * dlep_allocate_node + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * dlep_context_peer_t + * *dlep_peer_allocate(ipv4_address_t *p2ipv4, uint16_t udp_port, tcp_port) + * + * DESCRIPTION + * Allocates a context block for a new node. The context + * block is set to defaults and put on the list. The IPv4 + * address and the port uniquely discriminate the node. + * + * INPUT PARAMETERS + * p2ipv4 - This is a pointer to the IPv4 address structure. + * + * udp_port - This is the udp port for the node. + * + * tcp_port - This is the tcp port for the node. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * A pointer to the newly allocated nod context. + * NULL is returned if the block could not be allocated. + * + */ +dlep_context_peer_t +*dlep_peer_allocate (ipv6_address_t *p2ipv6, ipv4_address_t *p2ipv4, uint16_t udp_port, uint16_t tcp_port) +{ + dlep_context_peer_t *p2ctx; + + p2ctx = NULL; + p2ctx = malloc(sizeof(dlep_context_peer_t)); + if (!p2ctx) { + DLEP_DEBUG("%s-%u Error: No resources for new peer context block \n", + DEBUG_FUNCTION, + DEBUG_LINE); + + return (NULL); + } + ipv6_copy_address(&p2ctx->peer_ipv6, p2ipv6); + ipv4_copy_address(&p2ctx->peer_ipv4, p2ipv4); + p2ctx->peer_udp_port = udp_port; + p2ctx->peer_tcp_port = tcp_port; + + + + /* + * jam the new peer context in the list + */ + p2ctx->p2next_peer = p2peer_list; + p2peer_list = p2ctx; + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Allocated peer block %p \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2ctx); + } + + return (p2ctx); +} + +/** + * NAME + * dlep_peer_remove + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * void + * dlep_peer_remove(dlep_context_peer_t **p2peer) + * + * DESCRIPTION + * This function removes a peer context block from the database. + * All dynamically allocate resources must be freed prior to + * removing a node. + * + * INPUT PARAMETERS + * p2peer - A pointer to the peer context block pointer + * + * OUTPUT PARAMETERS + * p2peer - nulled + * + * RETURN VALUE + * No return code + * The callers pointer is NULLed. If there was a problem, the + * callers peer context pointer is not updated. + * + */ +void +dlep_peer_remove (dlep_context_peer_t **p2peer) +{ + dlep_context_peer_t *p2previous; + dlep_context_peer_t *p2ctx; + + if (!p2peer_list) { + return; + } + + p2ctx = p2peer_list; + if (p2ctx == *p2peer) { + p2peer_list = p2ctx->p2next_peer; + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u deallocating \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2ctx->peer_id); + } + + /* now free the block and update the caller's pointer */ + free(p2ctx); + *p2peer = NULL; + return; + } + + p2previous = p2peer_list; + p2ctx = p2previous->p2next_peer; + + while (p2ctx) { + if (p2ctx == *p2peer) { + p2previous->p2next_peer = p2ctx->p2next_peer; + + if (dlep_debug_flags & DLEP_PEER_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u deallocating \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2ctx->peer_id); + } + + /* now free the block and update the caller's pointer */ + free(p2ctx); + *p2peer = NULL; + break; + + } else { + /* walk the list */ + p2previous = p2ctx; + p2ctx = p2ctx->p2next_peer; + } + } + return; +} + + +/** + * NAME + * dlep_get_peer_by_peer_id + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * dlep_context_peer_t + * *dlep_get_peer_by_peer_id(uint16_t peer_id) + * + * DESCRIPTION + * This function searches the database for the specified peer ID + * and returns the context block pointer. + * + * INPUT PARAMETERS + * peer_id - The locally unique peer ID to look up + * + * RETURN VALUE + * A pointer to the peer context block. + * NULL is returned if the peer was not found. + * + */ +dlep_context_peer_t +*dlep_get_peer_by_peer_id (uint16_t peer_id) +{ + dlep_context_peer_t *result; + dlep_context_peer_t *p2ctx; + + result = NULL; + p2ctx = p2peer_list; + while (p2ctx) { + + if (p2ctx->peer_id == peer_id) { + result = p2ctx; + break; + + } else { + /* walk the list */ + p2ctx = p2ctx->p2next_peer; + } + } + return (result); +} + + +/** + * NAME + * dlep_peer_get_by_ipv4 + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * dlep_context_peer_t + * *dlep_peer_get_by_ipv4(ipv4_address_t *p2ipv4, + * uint16_t port) + * + * DESCRIPTION + * This function returns the pointer to the peer context block. + * + * INPUT PARAMETERS + * p2ipv4 - This is a pointer to the IPv4 address to locate + * + * port - This is the port used by the peer + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * The pointer to the peer context block. + * NULL is returned if the peer context is not located. + * + */ +dlep_context_peer_t +*dlep_peer_get_by_ipv4 (ipv4_address_t *p2ipv4, uint16_t udp_port, uint16_t tcp_port) +{ + dlep_context_peer_t *result; + dlep_context_peer_t *p2ctx; + + if (!p2ipv4) { + return (NULL); + } + + result = NULL; + p2ctx = p2peer_list; + while (p2ctx) { + + if (ipv4_compare_address(&p2ctx->peer_ipv4, p2ipv4) && + p2ctx->peer_udp_port == udp_port && + p2ctx->peer_tcp_port == tcp_port) { + result = p2ctx; + break; + + } else { + /* walk the list */ + p2ctx = p2ctx->p2next_peer; + } + } + return (result); +} + + +/* dlep_peer_get_by_ipv6 */ //added for ipv6 + +dlep_context_peer_t +*dlep_peer_get_by_ipv6 (ipv6_address_t *p2ipv6, uint16_t udp_port, uint16_t tcp_port) +{ + dlep_context_peer_t *result; + dlep_context_peer_t *p2ctx; + + if (!p2ipv6) { + return (NULL); + } + + result = NULL; + p2ctx = p2peer_list; + while (p2ctx) { + + if (ipv6_compare_address(&p2ctx->peer_ipv6, p2ipv6) && + p2ctx->peer_udp_port == udp_port && + p2ctx->peer_tcp_port == tcp_port) { + result = p2ctx; + break; + + } else { + /* walk the list */ + p2ctx = p2ctx->p2next_peer; + } + } + return (result); +} + + + + +/** + * NAME + * dlep_peer_deallocate_all + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * void + * dlep_peer_deallocate_all(void) + * + * DESCRIPTION + * This function removes and frees all peer context blocks. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_peer_deallocate_all (void) +{ + dlep_context_peer_t *p2ctx; + dlep_context_peer_t *p2free; + + p2ctx = p2peer_list; + while (p2ctx) { + p2free = p2ctx; + + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2ctx->peer_id); + } + + /* walk the list */ + p2ctx = p2ctx->p2next_peer; + free(p2free); + } + p2peer_list = NULL; + return; +} + +/** + * NAME + * dlep_peer_short_list_all + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * void + * dlep_peer_short_list_all(void) + * + * DESCRIPTION + * This function generates a short list of all peers. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_peer_short_list_all (void) +{ + dlep_context_peer_t *p2ctx; + + p2ctx = p2peer_list; + while (p2ctx) { + dlep_peer_short_display(p2ctx); + p2ctx = p2ctx->p2next_peer; + } + printf("\n"); + return; +} + + +/** + * NAME + * dlep_peer_list_all + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * void + * dlep_peer_list_all(void) + * + * DESCRIPTION + * This function generates a list of all peers. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_peer_list_all (void) +{ + dlep_context_peer_t *p2ctx; + + p2ctx = p2peer_list; + while (p2ctx) { + dlep_peer_display(p2ctx); + p2ctx = p2ctx->p2next_peer; + } + printf("\n"); + return; +} + + +/** + * NAME + * dlep_peer_neighbor_list_all + * + * SYNOPSIS + * #include "dlep_context_peer_management.h" + * void + * dlep_peer_neighbor_list_all(void) + * + * DESCRIPTION + * This function generates a list of all neighbors associated + * with each node + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_peer_neighbor_list_all (void) +{ + dlep_context_peer_t *p2ctx; + + p2ctx = p2peer_list; + while (p2ctx) { + dlep_peer_short_display(p2ctx); + + dlep_neighbor_list_all(p2ctx); + p2ctx = p2ctx->p2next_peer; + } + printf("\n"); + return; +} + + diff --git a/dlep_radio_ipv6/dlep_context_peer_management.h b/dlep_radio_ipv6/dlep_context_peer_management.h new file mode 100644 index 0000000..def1a93 --- /dev/null +++ b/dlep_radio_ipv6/dlep_context_peer_management.h @@ -0,0 +1,64 @@ +/*---------------------------------------------------------------------- + * dlep_context_peer_management.h + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_CONTEXT_PEER_MANAGEMENT_H__ +#define __DLEP_CONTEXT_PEER_MANAGEMENT_H__ + +#include "dlep_context_peer.h" + + +extern dlep_context_peer_t +*dlep_peer_allocate(ipv6_address_t *p2ipv6, ipv4_address_t *p2ipv4, uint16_t udp_port, uint16_t tcp_port); + +extern void +dlep_peer_remove(dlep_context_peer_t **p2peer); + +extern dlep_context_peer_t +*dlep_peer_get_by_ipv4(ipv4_address_t *p2ipv4, uint16_t udp_port, uint16_t tcp_port); + +extern dlep_context_peer_t +*dlep_peer_get_by_ipv6(ipv6_address_t *p2ipv6, uint16_t udp_port, uint16_t tcp_port); + +extern dlep_context_peer_t +*dlep_get_peer_by_peer_id(uint16_t peer_id); + +extern void +dlep_peer_short_list_all(void); + +extern void +dlep_peer_list_all(void); + +extern void +dlep_peer_neighbor_list_all(void); + + +#endif + diff --git a/dlep_radio_ipv6/dlep_debug.c b/dlep_radio_ipv6/dlep_debug.c new file mode 100644 index 0000000..44cf032 --- /dev/null +++ b/dlep_radio_ipv6/dlep_debug.c @@ -0,0 +1,255 @@ +/*------------------------------------------------------------------ + * dlep_debug.c -- debug flag support for DLEP + * + * August 2010, Bo Berry + * + * Copyright (c) 2008, 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *----------------------------------------------------------------- + */ + +#include "dlep_debug.h" + +/* + * debug flags + */ +uint32_t dlep_debug_flags = 0; + + +/** + * NAME + * dlep_debug_set_flag + * + * SYNOPSIS + * #include "dlep_debug.h" + * void + * dlep_debug_set_flag(uint32_t *p2debug_flags, uint32_t mask) + * + * DESCRIPTION + * Sets specific debug flags + * + * INPUT PARAMETERS + * p2debug_flags - Pointer to component debug flags. + * + * mask - bit mask indicating which flags to set. + * + * OUTPUT PARAMETERS + * p2debug_flags - Flags are updated + * + * RETURN VALUE + * none + * + * NOTES + * If p2debug_flags is null, no operation takes place. + * If mask is (-1), all flags will be set. + * If mask is 0, no operation takes place. + * + */ +void +dlep_debug_set_flag (uint32_t *p2debug_flags, uint32_t mask) +{ + if (p2debug_flags) { + if (mask) { + *p2debug_flags |= mask; + } + } + return; +} + + +/** + * NAME + * dlep_debug_clear_flag + * + * SYNOPSIS + * #include "dlep_debug.h" + * void + * dlep_debug_clear_flag(uint32_t *p2debug_flags, uint32_t mask) + * + * DESCRIPTION + * Clears specific debug flag(s) + * + * INPUT PARAMETERS + * p2debug_flags - Pointer to the component debug flags. + * + * mask - bit mask indicating which flags to clear. + * + * OUTPUT PARAMETERS + * p2debug_flags - Flags are updated + * + * RETURN VALUE + * none + * + * NOTES + * If p2debug_flags is null, no operation takes place. + * If mask is (-1), all flags will be cleared. + * If mask is 0, no operation takes place. + * + */ +void +dlep_debug_clear_flag (uint32_t *p2debug_flags, uint32_t mask) +{ + if (p2debug_flags) { + if (mask) { + *p2debug_flags &= ~mask; + } + } + return; +} + + +/** + * NAME + * dlep_debug_is_flag_set + * + * SYNOPSIS + * #include "dlep_debug.h" + * boolean_t + * dlep_debug_is_flag_set(uint32_t debug_flags, uint32_t mask) + * + * DESCRIPTION + * Returns the status of debug flag(s) + * + * INPUT PARAMETERS + * debug_flags - Component debugs. + * + * mask - debug flag(s). + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE flag(s) set + * FALSE flag(s) clear + * + * EXAMPLES + * dlep_debug_is_flag_set(&component_flags, SOME_DEBUG) + * + * dlep_debug_is_flag_set(&component_flags, (SOME_DEBUG | ANOTHER_DEBUG) ) + * + */ +boolean_t +dlep_debug_is_flag_set (uint32_t debug_flags, uint32_t flag) +{ + return ( ((debug_flags & flag) ? TRUE : FALSE) ); +} + + +/** + * NAME + * dlep_debug_set_all + * + * SYNOPSIS + * #include "dlep_debug.h" + * void + * dlep_debug_set_all(uint32_t *p2debug_flags) + * + * DESCRIPTION + * This function should be used to set all debugs. + * + * INPUT PARAMETERS + * p2debug_flags - Pointer to component debug flags. + * + * OUTPUT PARAMETERS + * p2debug_flags - Flags are updated + * + * RETURN VALUE + * none + * + */ +void +dlep_debug_set_all (uint32_t *p2debug_flags) +{ + if (p2debug_flags) { + *p2debug_flags = DLEP_DEBUG_ALL_FLAGS; + } + return; +} + +/** + * NAME + * dlep_debug_clear_all + * + * SYNOPSIS + * #include "dlep_debug.h" + * void + * dlep_debug_clear_all(uint32_t *p2debug_flags) + * + * DESCRIPTION + * This function should be used to clear all debugs. + * + * INPUT PARAMETERS + * p2debug_flags - Pointer to component debug flags. + * + * OUTPUT PARAMETERS + * p2debug_flags - Flags are updated + * + * RETURN VALUE + * none + * + */ +void +dlep_debug_clear_all (uint32_t *p2debug_flags) +{ + if (p2debug_flags) { + *p2debug_flags = 0; + } + return; +} + + +/** + * NAME + * dlep_debug_init + * + * SYNOPSIS + * #include "dlep_debug.h" + * void + * dlep_debug_int(uint32_t *p2debug_flags, uint32_t initial_mask) + * + * DESCRIPTION + * Init the debug flagss. + * + * INPUT PARAMETERS + * p2debug_flags - Pointer to component debug flags. + * + * initial_mask + * + * OUTPUT PARAMETERS + * p2debug_flags - Flags are updated + * + * RETURN VALUE + * none + * + */ +void +dlep_debug_init (uint32_t *p2debug_flags, uint32_t initial_mask) +{ + if (p2debug_flags) { + *p2debug_flags = initial_mask; + } + return; +} + + diff --git a/dlep_radio_ipv6/dlep_debug.h b/dlep_radio_ipv6/dlep_debug.h new file mode 100644 index 0000000..3262893 --- /dev/null +++ b/dlep_radio_ipv6/dlep_debug.h @@ -0,0 +1,103 @@ +/*---------------------------------------------------------------------- + * dlep_debug.h -- Debug flags and supporting macros + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_DEBUG_H__ +#define __DLEP_DEBUG_H__ + +#include "safe_types.h" + +extern uint32_t dlep_debug_flags; + + + +/* + * Use these macros to abstract the preprocessor + * so internal information is not displayed in + * debugs. + */ +#define ENABLE_FUNCTION_AND_LINE + +#ifdef ENABLE_FUNCTION_AND_LINE +#define DEBUG_FILE __FILE__ +#define DEBUG_FUNCTION __FUNCTION__ +#define DEBUG_LINE __LINE__ +#define DEBUG_DATE __DATE__ +#define DEBUG_TIME __TIME__ +#else +#define DEBUG_FILE " " +#define DEBUG_FUNCTION " " +#define DEBUG_LINE 0 +#define DEBUG_DATE " " +#define DEBUG_TIME " " +#endif + + +/* + * abstracted for porting + */ +#define DLEP_DEBUG printf + + +/* + * surgical debug flags for DLEP. + */ +#define DLEP_DEBUG_ALL_FLAGS ( -1 ) + +#define DLEP_ERROR_TRACE_FLAG ( 0x01 ) +#define DLEP_UDP_TRACE_FLAG ( 0x02 ) + +#define DLEP_INCOMING_TRACE_FLAG ( 0x04 ) +#define DLEP_OUTGOING_TRACE_FLAG ( 0x08 ) + +#define DLEP_PEER_TRACE_FLAG ( 0x10 ) +#define DLEP_NEIGHBOR_TRACE_FLAG ( 0x20 ) + +#define DLEP_METRICS_TRACE_FLAG ( 0x40 ) +#define DLEP_SCRATCH_TRACE_FLAG ( 0x80 ) +#define DLEP_DECODER_TRACE_FLAG ( 0x100 ) + + + +extern void dlep_debug_set_flag(uint32_t *p2debug_flags, uint32_t mask); + +extern void dlep_debug_clear_flag(uint32_t *p2debug_flags, uint32_t mask); + +extern boolean_t dlep_debug_is_flag_set(uint32_t debug_flags, uint32_t mask); + +extern void dlep_debug_set_all(uint32_t *p2debug_flags); + +extern void dlep_debug_clear_all(uint32_t *p2debug_flags); + +extern void dlep_debug_init(uint32_t *p2debug_flags, uint32_t mask); + + +#endif + diff --git a/dlep_radio_ipv6/dlep_debug_cli.c b/dlep_radio_ipv6/dlep_debug_cli.c new file mode 100644 index 0000000..402b9f2 --- /dev/null +++ b/dlep_radio_ipv6/dlep_debug_cli.c @@ -0,0 +1,334 @@ +/*------------------------------------------------------------------ + * dlep_debug_cli.c -- DLEP debug CLI support + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include + +#include "safe_types.h" +#include "cli.h" + +#include "rfc5444_types.h" + +#include "dlep_debug.h" +#include "dlep_debug_cli.h" + + +/* + * directory record + * + * static cli_record_t debug_dir; + */ + +/* + * allocate command records + */ +static cli_record_t debug_show_mask_cmd; +static cli_record_t debug_set_mask_cmd; +static cli_record_t debug_clear_mask_cmd; +static cli_record_t debug_enable_all_cmd; +static cli_record_t debug_disable_all_cmd; + + + + +/** + ** debug commands + **/ +static void +cli_debug_show_mask (uint32_t argc, char *argv[]) +{ + if (argv[1] && *argv[1] == '?') { + printf("peer_debug_show - displays enabled debugging levels \n"); + printf("\n"); + return; + } + + printf(" error - %s \n", + ((dlep_debug_flags&DLEP_ERROR_TRACE_FLAG)?"On":"Off")); + + printf(" udp - %s \n", + ((dlep_debug_flags&DLEP_UDP_TRACE_FLAG)?"On":"Off")); + + printf(" incoming - %s \n", + ((dlep_debug_flags&DLEP_INCOMING_TRACE_FLAG)?"On":"Off")); + + printf(" outgoing - %s \n", + ((dlep_debug_flags&DLEP_OUTGOING_TRACE_FLAG)?"On":"Off")); + + printf(" peer - %s \n", + ((dlep_debug_flags&DLEP_PEER_TRACE_FLAG)?"On":"Off")); + + printf(" neighbor - %s \n", + ((dlep_debug_flags&DLEP_NEIGHBOR_TRACE_FLAG)?"On":"Off")); + + printf(" metrics - %s \n", + ((dlep_debug_flags&DLEP_METRICS_TRACE_FLAG)?"On":"Off")); + + printf(" scratch - %s \n", + ((dlep_debug_flags&DLEP_SCRATCH_TRACE_FLAG)?"On":"Off")); + + printf(" decoder - %s \n", + ((dlep_debug_flags&DLEP_DECODER_TRACE_FLAG)?"On":"Off")); + + printf("\n"); + return; +} + + + +static void +cli_debug_set_mask (uint32_t argc, char *argv[]) +{ + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("debug_set [error|udp|incoming|outgoing|packet|peer|" + "neighbor|metrics|scratch|decoder] \n"); + printf("where \n"); + printf(" error - enables the error debug trace \n"); + printf(" udp - enables debug trace of the udp send-receive \n"); + + printf(" incoming - enables debug trace of incoming packets \n"); + printf(" outgoing - enables debug trace of outgoing packets \n"); + printf(" packet - enables both incoming and outgoing packet " + "trace \n"); + + printf(" peer - enables peer specific debug trace \n"); + printf(" neighbor - enables neighbor specific debug trace \n"); + + printf(" metrics - enables neighbor metrics trace \n"); + printf(" scratch - enables scratch pad trace \n"); + printf(" decoder - enables debug trace of TLV validation \n"); + + printf("\n"); + return; + } + + if (!strcmp(argv[1], "error")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_ERROR_TRACE_FLAG); + + } else if (!strcmp(argv[1], "udp")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_UDP_TRACE_FLAG); + + } else if (!strcmp(argv[1], "incoming")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_INCOMING_TRACE_FLAG); + + } else if (!strcmp(argv[1], "outgoing")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_OUTGOING_TRACE_FLAG); + + } else if (!strcmp(argv[1], "packet")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_INCOMING_TRACE_FLAG); + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_OUTGOING_TRACE_FLAG); + + } else if (!strcmp(argv[1], "peer")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_PEER_TRACE_FLAG); + + } else if (!strcmp(argv[1], "neighbor")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_NEIGHBOR_TRACE_FLAG); + + } else if (!strcmp(argv[1], "metrics")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_METRICS_TRACE_FLAG); + + } else if (!strcmp(argv[1], "scratch")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_SCRATCH_TRACE_FLAG); + + } else if (!strcmp(argv[1], "decoder")) { + dlep_debug_set_flag(&dlep_debug_flags, + DLEP_DECODER_TRACE_FLAG); + } else { + printf("Invalid debug flag, <%s> \n", argv[1]); + } + return; +} + + +static void +cli_debug_clear_mask (uint32_t argc, char *argv[]) +{ + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + + printf("debug_clear [error|udp|incoming|outgoing|packet|peer|neighbor|" + "metrics|scratch|decoder] \n"); + printf("where \n"); + printf(" error - disables the error debug trace \n"); + printf(" udp - disables debug trace for udp operations \n"); + + printf(" incoming - disables debug trace of incoming packets \n"); + printf(" outgoing - disables debug trace of outgoing packets \n"); + printf(" packet - enables both incoming and outgoing packet " + "trace \n"); + + printf(" peer - disables peer specific debug trace \n"); + printf(" neighbor - disables neighbor specific debug trace \n"); + + printf(" metrics - disables neighbor metrics trace \n"); + printf(" scratch - disables scratch pad trace \n"); + printf(" decoder - disables debug trace of TLV validation \n"); + + printf("\n"); + return; + } + + if (!strcmp(argv[1], "error")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_ERROR_TRACE_FLAG); + + } else if (!strcmp(argv[1], "udp")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_UDP_TRACE_FLAG); + + } else if (!strcmp(argv[1], "incoming")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_INCOMING_TRACE_FLAG); + + } else if (!strcmp(argv[1], "outgoing")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_OUTGOING_TRACE_FLAG); + + } else if (!strcmp(argv[1], "packet")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_INCOMING_TRACE_FLAG); + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_OUTGOING_TRACE_FLAG); + + } else if (!strcmp(argv[1], "peer")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_PEER_TRACE_FLAG); + + } else if (!strcmp(argv[1], "neighbor")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_NEIGHBOR_TRACE_FLAG); + + } else if (!strcmp(argv[1], "metrics")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_METRICS_TRACE_FLAG); + + } else if (!strcmp(argv[1], "scratch")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_SCRATCH_TRACE_FLAG); + + } else if (!strcmp(argv[1], "decoder")) { + dlep_debug_clear_flag(&dlep_debug_flags, + DLEP_DECODER_TRACE_FLAG); + } + return; +} + + +static void +cli_debug_enable_all (uint32_t argc, char *argv[]) +{ + if (argv[1] && *argv[1] == '?') { + printf("debug_enable - enables all debugs \n"); + printf("\n"); + return; + } + dlep_debug_flags = (-1); + printf(" all peer debugs enabled \n"); + return; +} + + +static void +cli_debug_disable_all (uint32_t argc, char *argv[]) +{ + if (argv[1] && *argv[1] == '?') { + printf("debug_disable - disables all debugs \n"); + printf("\n"); + return; + } + dlep_debug_flags = (0); + printf(" all peer debugs disabled \n"); + return; +} + + +/** + * NAME + * dlep_debug_cli_init + * + * SYNOPSIS + * void + * dlep_debug_cli_init() + * + * DESCRIPTION + * Registers the dlep debug commands with the cli + * facility. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_debug_cli_init (void) +{ + RC_CLI_t rc; + + /* + * Create directory and commands + **rc = cli_mkdir("peer", &cli_debug_dir, &debug_dir); + */ + + /* debug commands */ + rc = cli_mkcmd("debug_show", cli_debug_show_mask, + &cli_debug_dir, &debug_show_mask_cmd); + + rc = cli_mkcmd("debug_set", cli_debug_set_mask, + &cli_debug_dir, &debug_set_mask_cmd); + + rc = cli_mkcmd("debug_clear", cli_debug_clear_mask, + &cli_debug_dir, &debug_clear_mask_cmd); + + rc = cli_mkcmd("debug_enable", cli_debug_enable_all, + &cli_debug_dir, &debug_enable_all_cmd); + + rc = cli_mkcmd("debug_disable", cli_debug_disable_all, + &cli_debug_dir, &debug_disable_all_cmd); + + return; +} + + diff --git a/dlep_radio_ipv6/dlep_debug_cli.h b/dlep_radio_ipv6/dlep_debug_cli.h new file mode 100644 index 0000000..1245a9b --- /dev/null +++ b/dlep_radio_ipv6/dlep_debug_cli.h @@ -0,0 +1,40 @@ +/*---------------------------------------------------------------------- + * dlep_debug_cli.h -- debug cli prototypes for DLEP + * + * October 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_DEBUG_CLI_H__ +#define __DLEP_DEBUG_CLI_H__ + + +extern void +dlep_debug_cli_init(void); + +#endif + diff --git a/dlep_radio_ipv6/dlep_message_builder.c b/dlep_radio_ipv6/dlep_message_builder.c new file mode 100644 index 0000000..5345be3 --- /dev/null +++ b/dlep_radio_ipv6/dlep_message_builder.c @@ -0,0 +1,2419 @@ +/*---------------------------------------------------------------------- + * dlep_message_builder.c -- Routines to build the DLEP messages + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" +#include "packet_dump.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" +#include "rfc5444_encoder_tlv.h" +#include "rfc5444_encoder.h" + +#include "dlep_sim_options.h" +#include "dlep_debug.h" +#include "dlep_porter.h" +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" +#include "rfc5444_experimental_tlv.h" + +#include "dlep_message_builder.h" +#include "dlep_client_timer.h" + +extern int TCP_READY; +extern int init; + +/* + * Local API to increment a sequence number. Sequence numbers + * are simply request-response correlators. They are not + * checked for 'sequencing' or lost messages. The originator + * determines the sequence number so it can correlate the + * response. + */ +static uint16_t +dlep_get_next_sequence_number (uint16_t sequence_number) +{ +printf("dlep_get_next_sequence_number\n"); + sequence_number++; + if (!sequence_number) { + sequence_number++; + } + return (sequence_number); +} + + +/** + * NAME + * send_dlep_attached_peer_discovery + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_attached_peer_discovery( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a attached peer discovery message + * from the radio to the router to initiate the discovery process. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_attached_peer_discovery (dlep_context_peer_t *p2peer) +{ +printf("send_dlep_attached_peer_discovery\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + TCP_READY = 0; +// printf("\n INSIDE send_dlep_attached_peer_discovery "); + p2es = rfc5444_encoder_packet_start(); + + /* Adding message header */ + rfc5444_encoder_message_block_start(p2es, + RFC5444_SIG_ATT_PEER_DISCOVERY); + + packet_dump("OUTGOING-", + p2es->packet_ptr, + 1); + /* required */ + rfc5444_version_tlv(p2es, + RFC5444_DLEP_MAJOR_VERSION, + RFC5444_DLEP_MINOR_VERSION); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_detached_peer_discovery + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_detached_peer_discovery( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a detached peer discovery message + * from the radio to the router to initiate the discovery process. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_detached_peer_discovery (dlep_context_peer_t *p2peer) +{ +printf("send_dlep_detached_peer_discovery\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + /* + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); +*/ + +// added for D5 + +rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_DET_PEER_DISCOVERY); + +/* This function call to add message lenth */ + +#if 0 +rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_REQ); +#endif +#if 0 + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +/* + // added for testing, will remove it +// rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_DET_PEER_DISCOVERY); + */ + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2peer->sequence = + dlep_get_next_sequence_number(p2peer->sequence); + p2peer->expected_peer_offer_sequence = p2peer->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + +#endif + /* required */ + rfc5444_version_tlv(p2es, + RFC5444_DLEP_MAJOR_VERSION, + RFC5444_DLEP_MINOR_VERSION); + + /* optional */ + rfc5444_peer_tlv(p2es, p2config->local_type_description); +#if 0 + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); +#if 0 + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } +#endif + + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_peer_offer + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_offer(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer offer message + * from the router to the radio in response to the + * peer attached/detached discovery message. This + * confirms discovery. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_peer_offer (dlep_context_peer_t *p2peer) +{ +printf("send_dlep_peer_offer\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + p2es = rfc5444_encoder_packet_start(); + + /* Adding Message header */ + + rfc5444_encoder_signal_block_start(p2es, + RFC5444_SIG_PEER_OFFER, + DLEP_SIGNAL_FLAGS); + + rfc5444_peer_tlv(p2es, p2config->local_type_description); + + rfc5444_ipv4_connection_point_tlv(p2es, p2config->local_tcp_port, + &p2config->local_ipv4); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending peer offer : \n"); + printf(" signal code=%u RFC5444_SIG_PEER_OFFER \n", + RFC5444_SIG_PEER_OFFER); + } + + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + + /* Oppening TCP socket */ +// dlep_tcp_porter_open(p2config); + + rfc5444_encoder_free(p2es); + + return; +} + + + /** + * NAME + * send_dlep_peer_init + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_init( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer init message + * from the radio to the router to initiate the TCP synchronization process. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ + void + send_dlep_peer_init (dlep_context_peer_t *p2peer) + { +printf("send_dlep_peer_init\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_INIT_REQ); + + /* required */ + rfc5444_version_tlv(p2es, + RFC5444_DLEP_MAJOR_VERSION, + RFC5444_DLEP_MINOR_VERSION); + + rfc5444_heartbeat_interval_tlv(p2es, p2config->peer_heartbeat_interval); + + rfc5444_link_metric_mdr_rx_tlv(p2es, 100000000); + p2peer->mdr_rx=100000000; + + rfc5444_link_metric_mdr_tx_tlv(p2es, 100000000); + p2peer->mdr_tx=100000000; + + rfc5444_link_metric_cdr_rx_tlv(p2es, 100000000); + p2peer->cdr_rx=100000000; + rfc5444_link_metric_cdr_tx_tlv(p2es, 250); + p2peer->cdr_tx =250; + + rfc5444_link_metric_latency_tlv1(p2es, 250); + p2peer->latency = 250; + + rfc5444_link_metric_resources_tx_tlv(p2es, 100); + p2peer->resources_tx = 100; + rfc5444_link_metric_resources_rx_tlv(p2es, 100); + p2peer->resources_rx = 100; + + rfc5444_link_metric_rlq_rx_tlv(p2es, 100); + p2peer->rlq_rx = 100; + rfc5444_link_metric_rlq_tx_tlv(p2es, 100); + p2peer->rlq_tx = 100; + + + + /* optional */ + rfc5444_peer_tlv(p2es, p2config->local_type_description); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } +#if 0 + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + + + printf("\n CALLING dlep_tcp_connect"); +#endif + +#if 0 + dlep_tcp_connect(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); +#endif + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + /* Setting this flag inorder for dlep_tcp_receive to get called after tcp connect + * and first dlep_tcp_send is called inorder to avoid infinite call in loop. + */ + TCP_READY = 1; + + rfc5444_encoder_free(p2es); +// printf("\n PEER INIT REQUEST Sent"); + + return; +} + + /** + * NAME + * send_dlep_peer_init_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_init( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer init message response + * from the radio to the router. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ + void + send_dlep_peer_init_ack (dlep_context_peer_t *p2peer) + { +printf("send_dlep_peer_init_ack\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_INIT_RES); + if(init == 1) { + p2peer->status_code = RFC5444_REQUEST_DENIED; + } + rfc5444_status_tlv(p2es, p2peer->status_code); + + rfc5444_peer_tlv(p2es, p2config->local_type_description); + + rfc5444_heartbeat_interval_tlv(p2es, p2config->peer_heartbeat_interval); + + rfc5444_link_metric_mdr_rx_tlv(p2es, 100000000); + p2peer->mdr_rx=100000000; + + rfc5444_link_metric_mdr_tx_tlv(p2es, 100000000); + p2peer->mdr_tx=100000000; + + rfc5444_link_metric_cdr_rx_tlv(p2es, 100000000); + p2peer->cdr_rx=100000000; + + rfc5444_link_metric_cdr_tx_tlv(p2es, 100000000); + p2peer->cdr_tx = 100000000; + + rfc5444_link_metric_latency_tlv1(p2es, 250); + p2peer->latency = 250; + + /* rfc5444_link_metric_latency_tlv(p2es, 250); + p2peer->latency = 250; */ + + rfc5444_link_metric_rlq_rx_tlv(p2es, 100); + p2peer->rlq_rx = 100; + + rfc5444_link_metric_rlq_tx_tlv(p2es, 100); + p2peer->rlq_tx = 100; + + rfc5444_link_metric_resources_tlv(p2es, 100); + p2peer->resources = 100; + + rfc5444_mtu_tlv(p2es, 100); + p2peer->mtu = 100; + + + rfc5444_ipv6_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2config->local_ipv6); + ipv6_zero_address(&p2peer->ipv6_address); + + // rfc5444_ipv6_attached_subnet_tlv(p2es, RFC5444_EXISTING_ADD_ADDRESS); + rfc5444_ipv6_subnet_tlv (p2es, RFC5444_EXISTING_ADD_ADDRESS, 64, &p2config->local_ipv6); + rfc5444_encoder_message_block_end(p2es); + + + /* + rfc5444_ipv4_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2config->local_ipv4); + ipv4_zero_address(&p2peer->ipv4_address); + + rfc5444_ipv4_attached_subnet_tlv(p2es, RFC5444_EXISTING_ADD_ADDRESS); + rfc5444_encoder_message_block_end(p2es); +*/ + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } +#if 0 + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + + + printf("\n CALLING dlep_tcp_connect"); +#endif + +#if 0 + dlep_tcp_connect(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); +#endif + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Session initialization response : \n"); + printf(" Message code=%u RFC5444_MSG_PEER_INIT_RES\n",RFC5444_MSG_PEER_INIT_RES); + + } + + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + /* Setting this flag inorder for dlep_tcp_receive to get called after tcp connect + * and first dlep_tcp_send is called inorder to avoid infinite call in loop. + */ + TCP_READY = 1; + + rfc5444_encoder_free(p2es); + + return; +} + + +/** + * NAME + * send_dlep_peer_heartbeat + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_heartbeat( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer heartbeat to + * maintain a persistent presence with the peer. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_peer_heartbeat (dlep_context_peer_t *p2peer) +{ +printf("send_dlep_peer_heartbeat\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + +// printf("\n INSIDE send_dlep_peer_heartbeat"); + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_HEARTBEAT); + +#if 0 + /* + * Get a unique sequence number + */ + p2peer->sequence = + dlep_get_next_sequence_number(p2peer->sequence); + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_end(p2es); +#if 0 +#ifdef MULTIPLE_PEER_MESSAGES_PACKED + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_HEARTBEAT); + + /* + * Get a unique sequence number + * HB does not have an ACK, so the sequence number is not important. + */ + p2peer->sequence = + dlep_get_next_sequence_number(p2peer->sequence); + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); +#endif +#endif + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + /* if (TCP_READY ) { + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + } else { // Else send with UDP socket if heartbeat sent before TCP connection. + dlep_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + } */ + + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending heartbeat message : \n"); + printf(" Message code=%u RFC5444_MSG_PEER_HEARTBEAT\n", + RFC5444_MSG_PEER_HEARTBEAT); + } + + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_peer_update_request + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_update_request( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer update message + * from the router to the radio. It is used to indicate + * a new layer 3 address or the removal of a layer 3 + * address. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_peer_update_request (dlep_context_peer_t *p2peer) +{ +printf("send_dlep_peer_update_request\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_UPDATE_REQ); + +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2peer->sequence = dlep_get_next_sequence_number(p2peer->sequence); + p2peer->expected_peer_update_response_sequence = p2peer->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + if (p2peer->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2peer->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2peer->update_ipv4_operation, + &p2peer->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + else if (p2peer->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2peer->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2peer->update_ipv6_operation, + &p2peer->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } +#if 0 + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_link_metric_mdr_rx_tlv(p2es, p2peer->mdr_rx); + rfc5444_link_metric_mdr_tx_tlv(p2es, p2peer->mdr_tx); + rfc5444_link_metric_cdr_rx_tlv(p2es, p2peer->cdr_rx); + rfc5444_link_metric_cdr_tx_tlv(p2es, p2peer->cdr_tx); + rfc5444_link_metric_latency_tlv1(p2es, p2peer->latency); + rfc5444_link_metric_resources_tlv(p2es, p2peer->resources); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2peer->rlq_tx); + rfc5444_link_metric_rlq_rx_tlv(p2es, p2peer->rlq_rx); + rfc5444_mtu_tlv(p2es, p2peer->mtu); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session update request :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_UPDATE_REQ\n", + RFC5444_MSG_PEER_UPDATE_REQ); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + + return; +} + + +/** + * NAME + * send_dlep_peer_update_response + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_update_response( + * dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer update response message + * from the radio to the router. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_peer_update_response (dlep_context_peer_t *p2peer) +{ +printf("send_dlep_peer_update_response\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_UPDATE_RES); +#if 0 + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_status_tlv(p2es, p2peer->status_code); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_status_tlv(p2es, p2peer->status_code); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session update response :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_UPDATE_RES\n", + RFC5444_MSG_PEER_UPDATE_RES); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_peer_termination + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_termination(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer termination message + * from the router to the radio or from the radio to the + * router to termiante the association. As result all + * neighbor neighbors are also terminated. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_peer_termination (dlep_context_peer_t *p2peer) +{ +printf("send_dlep_peer_termination\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_REQ); + +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2peer->sequence = dlep_get_next_sequence_number( + p2peer->sequence); + p2peer->expected_peer_offer_sequence = p2peer->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +// printf("\n Adding Status TLV"); + rfc5444_status_tlv(p2es, p2peer->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + rfc5444_encoder_message_block_end(p2es); +#endif +#ifdef MULTIPLE_PEER_MESSAGES_PACKED + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_REQ); + + /* + * acks will not align with incremented sequence + * + * p2peer->sequence = dlep_get_next_sequence_number( + * p2peer->sequence); + * p2peer->expected_peer_offer_sequence = p2peer->sequence; + */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2peer->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_status_tlv(p2es, p2peer->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session termination :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_TERM_REQ\n", + RFC5444_MSG_PEER_TERM_REQ); + + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_peer_termination_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_peer_termination_ack(dlep_context_peer_t *p2peer) + * + * DESCRIPTION + * This function is used to send a peer termination ACK + * message from the router to the radio or from the radio + * to the router in response to the peer terminate request. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_peer_termination_ack (dlep_context_peer_t *p2peer) +{ +printf("send_dlep_peer_termination_ack\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + + if (!p2peer) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_PEER_TERM_RES); +#if 0 + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + +// rfc5444_status_tlv(p2es, p2peer->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending session termination message :\n"); + printf(" Message code=%u RFC5444_MSG_PEER_TERM_RES\n", + RFC5444_MSG_PEER_TERM_REQ); + } + + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_up + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_up(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor up message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_up (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_dlep_neighbor_up\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + printf("sending nei up\n"); + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_UP_REQ); + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + /* add the IPv4 address if there is one to add */ + if (p2neighbor->ipv4_address.v4_addr.v4_addr32) { + rfc5444_ipv4_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv4_address); + ipv4_zero_address(&p2neighbor->ipv4_address); + } + + /* add the IPv6 address if there is one to add */ + else if(p2neighbor->ipv6_address.v6_addr.v6_addr16[0] || + p2neighbor->ipv6_address.v6_addr.v6_addr16[1] || + p2neighbor->ipv6_address.v6_addr.v6_addr16[2] || + p2neighbor->ipv6_address.v6_addr.v6_addr16[3] || + p2neighbor->ipv6_address.v6_addr.v6_addr16[4] || + p2neighbor->ipv6_address.v6_addr.v6_addr16[5] || + p2neighbor->ipv6_address.v6_addr.v6_addr16[6] || + p2neighbor->ipv6_address.v6_addr.v6_addr16[7]) + { + + printf("sending ipv6 address\n"); + + rfc5444_ipv6_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv6_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_rx); + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_rx); + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv1(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_mtu_tlv(p2es, p2neighbor->mtu); + + //rfc5444_ipv4_attached_subnet_tlv(p2es, RFC5444_EXISTING_ADD_ADDRESS); + + + rfc5444_encoder_message_block_end(p2es); +#if 0 +//ifdef MULTIPLE_NEIGHBOR_MESSAGES_PACKED + /**** neighbor down ****/ + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_DOWN_REQ); + + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + p2neighbor->expected_neighbor_term_ack_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + /**** neighbor up ****/ + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_UP_REQ); + + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + p2neighbor->expected_neighbor_init_ack_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + /* add the IPv4 address if there is one to add */ + if (p2neighbor->ipv4_address.v4_addr.v4_addr32) { + rfc5444_ipv4_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv4_address); + ipv4_zero_address(&p2neighbor->ipv4_address); + } + + /* add the IPv6 address if there is one to add */ + if (p2neighbor->ipv6_address.v6_addr.v6_addr16[0] || + p2neighbor->ipv6_address.v6_addr.v6_addr16[1] || + p2neighbor->ipv6_address.v6_addr.v6_addr16[2] || + p2neighbor->ipv6_address.v6_addr.v6_addr16[3] || + p2neighbor->ipv6_address.v6_addr.v6_addr16[4] || + p2neighbor->ipv6_address.v6_addr.v6_addr16[5] || + p2neighbor->ipv6_address.v6_addr.v6_addr16[6] || + p2neighbor->ipv6_address.v6_addr.v6_addr16[7]) + { + rfc5444_ipv6_address_tlv(p2es, + RFC5444_EXISTING_ADD_ADDRESS, + &p2neighbor->ipv6_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + } + + rfc5444_link_metric_mdr_tlv(p2es, p2neighbor->mdr); + + rfc5444_link_metric_cdr_tlv(p2es, p2neighbor->cdr); + + rfc5444_link_metric_latency_tlv1(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); +#endif + + rfc5444_encoder_packet_end(p2es); + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination up:\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_UP_REQ\n", + RFC5444_MSG_NEIGHBOR_UP_REQ); + + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_up_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_up_ack(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor up ack message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_up_ack (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_dlep_neighbor_up_ack\n"); + rfc5444_encoder_state_t *p2es; + + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_UP_RES); +#if 0 + /* echo the sequence number */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); +#if 0 + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_metrics + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_metrics(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor metrics message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context with the + * metrics data set + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_metrics (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_dlep_neighbor_metrics\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_METRICS); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); +#if 0 + if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + } +#endif + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + rfc5444_ipv6_subnet_tlv(p2es, + p2neighbor->update_ipv6_operation, p2neighbor->ipv6_subnet_prefix,&p2neighbor->update_ipv6_subnet_address); + p2neighbor->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_rx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_rx); + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv1(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + rfc5444_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + + rfc5444_mtu_tlv(p2es, p2neighbor->mtu); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination update to metrics:\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_METRICS\n", + RFC5444_MSG_NEIGHBOR_METRICS); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + +void +send_dlep_neighbor_credit_grant_req (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_dlep_neighbor_credit_grant_req\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + + p2es = rfc5444_encoder_packet_start(); + +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_METRICS); + +#if 0 + /* + * Get a unique sequence number */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv1(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_credit_grand_request_tlv(p2es, p2neighbor->cgr); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + + /* + * start the ack timer. Using same neighbor_up_ack_tmo Neighbor Up Time. + */ + (void)stw_system_timer_start(&p2neighbor->neighbor_update_ack_tmr, + p2peer->neighbor_up_ack_tmo, + p2peer->neighbor_up_ack_tmo, + &dlep_neighbor_update_ack_tmr, + (void *)p2neighbor); + + return; +} + + +void +send_dlep_neighbor_credit_reject (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_dlep_neighbor_credit_reject\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + + p2es = rfc5444_encoder_packet_start(); + + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_METRICS); + + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv1(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_rx_tlv(p2es, p2neighbor->resources_tx); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_address_request + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_address_request(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a peer heartbeat. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_address_request (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_dlep_neighbor_address_request\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_ADDRESS_REQ); + + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = + dlep_get_next_sequence_number(p2neighbor->sequence); + p2neighbor->expected_neighbor_address_response_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (p2neighbor->update_ipv4_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv4_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv4_address_tlv(p2es, + p2neighbor->update_ipv4_operation, + &p2neighbor->update_ipv4_address); + p2peer->update_ipv4_operation = RFC5444_NO_ADDRESS; + } + + if (p2neighbor->update_ipv6_operation == RFC5444_EXISTING_ADD_ADDRESS || + p2neighbor->update_ipv6_operation == RFC5444_DROP_ADDRESS) { + rfc5444_ipv6_address_tlv(p2es, + p2neighbor->update_ipv6_operation, + &p2neighbor->update_ipv6_address); + p2peer->update_ipv6_operation = RFC5444_NO_ADDRESS; + } + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_rx); + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_rx); + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv1(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_mtu_tlv(p2es, p2neighbor->mtu); + + rfc5444_ipv4_attached_subnet_tlv(p2es, RFC5444_EXISTING_ADD_ADDRESS); + + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_address_response + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_address_response(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor address response. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_address_response (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_dlep_neighbor_address_response\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_ADDRESS_RES); + + /* + * echo the neighbor sequence number + */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + + rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_down + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_down(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor down message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_down (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_dlep_neighbor_down\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_DOWN_REQ); +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = dlep_get_next_sequence_number( + p2neighbor->sequence); + p2neighbor->expected_neighbor_term_ack_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + +// rfc5444_status_tlv(p2es, p2neighbor->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination down :\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_DOWN_REQ\n", + RFC5444_MSG_NEIGHBOR_DOWN_REQ); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_down_ack + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_down_ack(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a neighbor down ack message. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_down_ack (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_dlep_neighbor_down_ack \n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_NEIGHBOR_DOWN_RES); +#if 0 + /* echo the sequence number */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_status_tlv(p2es, p2neighbor->status_code); + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination down response :\n"); + printf(" Message code=%u RFC5444_MSG_NEIGHBOR_DOWN_RES\n", + RFC5444_MSG_NEIGHBOR_DOWN_RES); + + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_link_char_request + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_link_char_request(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor, + * uint64_t cdr, + * uint16_t latency) + * + * DESCRIPTION + * This function is used to send a link characteristic message from + * the server to the client. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * cdr - requested data rate + * + * latency - maximum latency requested + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_link_char_request (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor, + uint64_t cdr, + uint64_t latency) +{ +printf("send_dlep_neighbor_link_char_request\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_LINK_CHAR_REQ); + +#if 0 + /* + * Get a unique sequence number and save a copy for the + * acknowledgement + */ + p2neighbor->sequence = + dlep_get_next_sequence_number(p2neighbor->sequence); + p2neighbor->expected_neighbor_link_char_response_sequence = + p2neighbor->sequence; + + rfc5444_encoder_message_block_add_sequence_number(p2es, + p2neighbor->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + if (cdr) { + rfc5444_link_metric_cdr_tx_tlv(p2es, cdr); + rfc5444_link_metric_cdr_rx_tlv(p2es, cdr); + } + + + if (latency) { + rfc5444_link_metric_latency_tlv1(p2es, latency); + } + +// rfc5444_encoder_tlv_block_end(p2es); + + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + +/** + * NAME + * send_dlep_neighbor_link_char_response + * + * SYNOPSIS + * #include "dlep_message_builder.h" + * void + * send_dlep_neighbor_link_char_response(dlep_context_peer_t *p2peer, + * dlep_context_neighbor_t *p2neighbor) + * + * DESCRIPTION + * This function is used to send a link characteristic response from + * the client to the server. + * + * INPUT PARAMETERS + * p2peer - The pointer to the peer context data + * + * p2neighbor - pointer to the neighbor context + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +send_dlep_neighbor_link_char_response (dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor) +{ +printf("send_dlep_neighbor_link_char_response\n"); + rfc5444_encoder_state_t *p2es; + dlep_config_t *p2config; + rfc5444_message_scratch_pad_t *scratch_pad; + + if (!p2peer) { + return; + } + + if (!p2neighbor) { + return; + } + + p2config = p2peer->p2config; + scratch_pad = &p2peer->message_scratch_pad; + + p2es = rfc5444_encoder_packet_start(); +#if 0 + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_PACKET); + + rfc5444_identification_tlv(p2es, + p2peer->router_id, + p2peer->client_id, + p2config->peer_heartbeat_interval); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_start(p2es, + RFC5444_MSG_LINK_CHAR_RES); +#if 0 + /* echo the sequence number */ + rfc5444_encoder_message_block_add_sequence_number(p2es, + scratch_pad->sequence); + + rfc5444_encoder_tlv_block_start(p2es, + RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); +#endif + rfc5444_mac_address_tlv(p2es, p2neighbor->mac_address); + + rfc5444_link_metric_mdr_rx_tlv(p2es, p2neighbor->mdr_tx); + rfc5444_link_metric_mdr_tx_tlv(p2es, p2neighbor->mdr_tx); + + rfc5444_link_metric_cdr_rx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_cdr_tx_tlv(p2es, p2neighbor->cdr_tx); + + rfc5444_link_metric_latency_tlv1(p2es, p2neighbor->latency); + + rfc5444_link_metric_resources_tlv(p2es, p2neighbor->resources); + + rfc5444_link_metric_rlq_rx_tlv(p2es, p2neighbor->rlq_rx); + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_mtu_tlv(p2es, p2neighbor->mtu); + +#if 0 + rfc5444_link_metric_resources_rx_tlv(p2es, p2neighbor->resources_tx); + + rfc5444_link_metric_rlq_tx_tlv(p2es, p2neighbor->rlq_tx); + + rfc5444_encoder_tlv_block_end(p2es); +#endif + rfc5444_encoder_message_block_end(p2es); + + rfc5444_encoder_packet_end(p2es); + + if (dlep_debug_flags & DLEP_OUTGOING_TRACE_FLAG) { + packet_dump("OUTGOING-", + p2es->packet_ptr, + p2es->packet_length); + } + + if (dlep_debug_flags & DLEP_SCRATCH_TRACE_FLAG) { + printf("Sending Destination link char response :\n"); + printf(" Message code=%u FC5444_MSG_LINK_CHAR_RES\n", + RFC5444_MSG_LINK_CHAR_RES); + } + + dlep_tcp_send(p2config, p2peer, + p2es->packet_ptr, p2es->packet_length); + + rfc5444_encoder_free(p2es); + return; +} + + diff --git a/dlep_radio_ipv6/dlep_message_builder.h b/dlep_radio_ipv6/dlep_message_builder.h new file mode 100644 index 0000000..faa037b --- /dev/null +++ b/dlep_radio_ipv6/dlep_message_builder.h @@ -0,0 +1,133 @@ +/*---------------------------------------------------------------------- + * dlep_message_builder.h -- Routines to build the DLEP messages + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_MESSAGE_BUILDER_H__ +#define __DLEP_MESSAGE_BUILDER_H__ + +#include "dlep_context_peer.h" +#include "dlep_context_neighbor.h" + + + +/* + * Router-Radio Level Mesages + */ + +extern void +send_dlep_attached_peer_discovery(dlep_context_peer_t *p2peer); + +extern void +send_dlep_detached_peer_discovery(dlep_context_peer_t *p2peer); + +extern void +send_dlep_peer_offer(dlep_context_peer_t *p2peer); + +extern void +send_dlep_peer_init(dlep_context_peer_t *p2peer); + +extern void +send_dlep_peer_init_ack(dlep_context_peer_t *p2peer); + +extern void +send_dlep_peer_heartbeat(dlep_context_peer_t *p2peer); + + +extern void +send_dlep_peer_update_request(dlep_context_peer_t *p2peer); + +extern void +send_dlep_peer_update_response(dlep_context_peer_t *p2peer); + + +extern void +send_dlep_peer_termination(dlep_context_peer_t *p2peer); + +extern void +send_dlep_peer_termination_ack(dlep_context_peer_t *p2peer); + + +/* + * Neighbor Level Mesages + */ + +extern void +send_dlep_neighbor_up(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_up_ack(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_metrics(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_credit_grant_req(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_credit_reject(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_address_request(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_address_response(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + + +extern void +send_dlep_neighbor_down(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_down_ack(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_dlep_neighbor_link_char_request(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor, + uint64_t cdr, + uint64_t latency); + + +extern void +send_dlep_neighbor_link_char_response(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + + + + +#endif + diff --git a/dlep_radio_ipv6/dlep_porter.c b/dlep_radio_ipv6/dlep_porter.c new file mode 100644 index 0000000..da2c4bb --- /dev/null +++ b/dlep_radio_ipv6/dlep_porter.c @@ -0,0 +1,1149 @@ +/*---------------------------------------------------------------------- + * dlep_porter.c -- APIs for UDP socket use + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + + +#include "safe_types.h" +#include "dlep_debug.h" +#include "dlep_config.h" +#include "dlep_context_peer.h" +#include "dlep_porter.h" + + + +// ADDED FOR DEBUG +// #include + +#define MSG_MIN_LEN ( 4 ) +#define MSG_MAX_LEN ( 1400 ) + +extern int TCP_READY; + +extern int TCP_CLIENT_READY; +extern int errno; + +/** + * NAME + * dlep_porter_init + * + * SYNOPSIS + * void + * dlep_porter_init(dlep_config_t *p2config) + * + * DESCRIPTION + * This function is used to initialize the transport data prior + * to allocating resources. + * + * INPUT PARAMETERS + * p2config - pointer to the config data + * + * OUTPUT PARAMETERS + * None. + * + * RETURN VALUE + * None. + * + */ +void +dlep_porter_init (dlep_config_t *p2config) +{ + if (!p2config) { + return; + } + + return; +} + + +void +dlep_tcp_porter_open(dlep_config_t *p2config) + +{ + int status; + int status_6; + + if (!p2config) { + return; + } + + /* At this stage open tcp socket alone in order to use in + * select system call later. */ + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Opening the tcp socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + + // p2config->dlep_tcp_sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); + + p2config->dlep_tcp_sockfd = socket(AF_INET6, SOCK_STREAM, 0); + +// added for debug +// fcntl(p2config->dlep_tcp_sockfd, F_SETFL, O_NONBLOCK); + if (p2config->dlep_tcp_sockfd < 0) { + DLEP_DEBUG("%s-%u Error: not able to open TCP socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + exit (0); + } + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Binding the tcp socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } +/* + memset(&p2config->dlep_addr, 0, sizeof(struct sockaddr_in)); + p2config->dlep_addr.sin_family = AF_INET; + p2config->dlep_addr.sin_port = htons(p2config->local_tcp_port); + p2config->dlep_addr.sin_addr.s_addr = INADDR_ANY; +*/ + memset(&p2config->dlep_addr6, 0, sizeof(struct sockaddr_in6)); + p2config->dlep_addr6.sin6_family = AF_INET6; + p2config->dlep_addr6.sin6_port = htons(p2config->local_tcp_port); + p2config->dlep_addr6.sin6_addr = in6addr_any ; + + status = bind(p2config->dlep_tcp_sockfd, + (struct sockaddr *)&p2config->dlep_addr6, + sizeof(struct sockaddr_in6)); +/* + status_6 = bind(p2config->dlep_tcp_sockfd, + (struct sockaddr *)&p2config->dlep_addr6, + sizeof(struct sockaddr_in6)); +*/ + if (status < 0) { + + printf("\n not able to bind"); + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: not able to bind TCP " + "socket to port %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2config->local_tcp_port); + } + exit (0); + } + printf("\n waiting connect from router\n"); + status = listen(p2config->dlep_tcp_sockfd,5); + + if (status) { + perror("ERROR on listen"); + exit(2); + } +/* + p2config->client_lenght = sizeof(p2config->client); + p2config->dlep_tcp_client_sockfd = accept(p2config->dlep_tcp_sockfd, + (struct sockaddr *)&p2config->client, &p2config->client_lenght); + + if (p2config->dlep_tcp_client_sockfd < 0) { + perror("ERROR on accept"); + exit(1); + } + + + printf(" dlep_tcp_sockfd after accept =%d",p2config->dlep_tcp_client_sockfd); + + TCP_READY = 1; +*/ + +#if 0 + int sockfd, newsockfd, portno, clilen; + char buffer[256]; + struct sockaddr_in serv_addr, cli_addr; + int n; + + /* First call to socket() function */ + sockfd = socket(AF_INET, SOCK_STREAM, 0); + + if (sockfd < 0) + { + perror("ERROR opening socket"); + exit(1); + } + + /* Initialize socket structure */ + bzero((char *) &serv_addr, sizeof(serv_addr)); + portno = 5001; + + serv_addr.sin_family = AF_INET; + serv_addr.sin_addr.s_addr = INADDR_ANY; + serv_addr.sin_port = htons(portno); + + /* Now bind the host address using bind() call.*/ + if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) + { + perror("ERROR on binding"); + exit(1); + } + + /* Now start listening for the clients, here process will + * go in sleep mode and will wait for the incoming connection + */ + + listen(sockfd,5); + clilen = sizeof(cli_addr); + + /* Accept actual connection from the client */ + newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen); + if (newsockfd < 0) + { + perror("ERROR on accept"); + exit(1); + } + + /* If connection is established then start communicating */ + bzero(buffer,256); + // n = read( newsockfd,buffer,255 ); + + if (n < 0) + { + perror("ERROR reading from socket"); + exit(1); + } + + printf("Here is the message: %s\n",buffer); + + /* Write a response to the client */ +// n = write(newsockfd,"I got your message",18); + + if (n < 0) + { + perror("ERROR writing to socket"); + exit(1); + } + + return 0; +#endif + return; + +} + + +/** + * NAME + * dlep_porter_open + * + * SYNOPSIS + * void + * dlep_porter_open(dlep_config_t *p2config) + * + * DESCRIPTION + * This function is used to open and bind to a local + * socket fd. + * + * INPUT PARAMETERS + * p2config - pointer to the config data + * + * OUTPUT PARAMETERS + * None. + * + * RETURN VALUE + * None. + * + */ +void +dlep_porter_open (dlep_config_t *p2config) +{ + int status; + struct addrinfo *resmulti; + + p2config->reuse = 1; + + if (!p2config) { + return; + } + +// if (p2config->start_on_discovery) { + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Opening the UDP socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + + // p2config->dlep_udp_sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); + + p2config->dlep_udp_sockfd = socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP); + + if (p2config->dlep_udp_sockfd < 0) { + DLEP_DEBUG("%s-%u Error: not able to open UDP socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + exit (0); + } + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Binding the UDP socket \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + + if(setsockopt(p2config->dlep_udp_sockfd, SOL_SOCKET, SO_REUSEADDR, + (char *)&p2config->reuse, sizeof(p2config->reuse)) < 0) + { + perror("Setting SO_REUSEADDR error"); + close(p2config->dlep_udp_sockfd); + exit(1); + } +/* + memset(&p2config->dlep_addr, 0, sizeof(struct sockaddr_in)); + p2config->dlep_addr.sin_family = AF_INET; + p2config->dlep_addr.sin_port = htons(p2config->local_udp_port); + p2config->dlep_addr.sin_addr.s_addr = htonl(INADDR_ANY); +*/ + memset(&p2config->dlep_addr6, 0, sizeof(struct sockaddr_in6)); + p2config->dlep_addr6.sin6_family = AF_INET6; + p2config->dlep_addr6.sin6_port = htons(p2config->local_udp_port); + p2config->dlep_addr6.sin6_addr = in6addr_any; + +/* + status = bind(p2config->dlep_udp_sockfd, + (struct sockaddr *)&p2config->dlep_addr, + sizeof(struct sockaddr_in)); +*/ + status = bind(p2config->dlep_udp_sockfd, + (struct sockaddr *)&p2config->dlep_addr6, + sizeof(struct sockaddr_in6)); + + if (status < 0) { + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: not able to bind UDP " + "socket to port %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2config->local_udp_port); + } + exit (0); + } + + //p2config->group.imr_multiaddr.s_addr = inet_addr("224.1.0.31"); +// p2config->group.imr_interface.s_addr = INADDR_ANY; +// p2config->group.imr_interface.s_addr = inet_addr("20.1.1.4"); + // p2config->group.imr_interface.s_addr = inet_addr(p2config->local_ipv4_dot); +/* + if(setsockopt(p2config->dlep_udp_sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, + (char *)&p2config->group, sizeof(p2config->group)) < 0) + { + perror("Adding multicast group error"); + close(p2config->dlep_udp_sockfd); + exit(1); + } else { + printf("Adding multicast group...OK.\n"); + } +*/ + // p2config->group6.ipv6mr_multiaddr = inet_pton("FF02:0:0:0:0:0:0:7"); +/* memcpy(&p2config->group6.ipv6mr_multiaddr,&(((struct sockaddr_in6 *)addr)->sin6_addr), + sizeof(struct in6_addr));*/ + // getaddrinfo("ff02::7", NULL, NULL, &resmulti); + // memset(&p2config->group6,0,sizeof(p2config->group6)); + // memcpy(&p2config->group6.ipv6mr_multiaddr,&(((struct sockaddr_in6 *))->sin6_addr), + // sizeof(struct p2config->group6.ipv6mr_multiaddr)); + //p2config->group6.ipv6mr_multiaddr = + //p2config->group6.ipv6mr_multiaddr = ((sockaddr_in6*)resmulti->ai_addr)->sin6_addr; + //inet_pton(AF_INET6, resmulti, p2config->group6.ipv6mr_multiaddr); + // p2config->group6.ipv6mr_interface = in6addr_any; + + inet_pton(AF_INET6, "FF02:0:0:0:0:0:1:7", &p2config->group6); + + if(setsockopt(p2config->dlep_udp_sockfd, IPPROTO_IPV6, IPV6_JOIN_GROUP, + (char *)&p2config->group6, sizeof(p2config->group6)) < 0) + { + perror("Adding multicast group error"); + close(p2config->dlep_udp_sockfd); + exit(1); + } else { + printf("Adding multicast group...OK.\n"); + } + + return; +} + + + + +// dlep_tcp_connect // +void +dlep_tcp_connect (dlep_config_t *p2config, + dlep_context_peer_t *p2peer, + void *msg, + uint32_t length) +{ + int status; + // int status_6; + if (!p2config) { + return; + } + + + // memset(&p2peer->msg_addr, 0, sizeof(struct sockaddr_in)); + memset(&p2peer->msg6_addr, 0, sizeof(struct sockaddr_in6)); + + // p2peer->msg_addr.sin_family = AF_INET; + p2peer->msg6_addr.sin6_family = AF_INET6; + + // p2peer->msg_addr.sin_port = htons(p2peer->peer_tcp_port); + p2peer->msg6_addr.sin6_port = htonl(p2peer->peer_tcp_port); + //p2peer->msg_addr.sin_addr.s_addr = htonl(p2peer->peer_ipv4.v4_addr.v4_addr32); + // p2peer->msg_addr.sin_addr.s_addr = p2peer->peer_ipv4.v4_addr.v4_addr32; + // p2peer->msg_addr6.sin6_addr.s6_addr32 = htonl(p2peer->peer_ipv6.v6_addr.v6_addr32); + +#if 0 + p2peer->msg6_addr.sin6_addr.s6_addr32[0] = p2peer->peer_ipv6.v6_addr.v6_addr32[0]; + p2peer->msg6_addr.sin6_addr.s6_addr32[1] = p2peer->peer_ipv6.v6_addr.v6_addr32[1]; + p2peer->msg6_addr.sin6_addr.s6_addr32[2] = p2peer->peer_ipv6.v6_addr.v6_addr32[2]; + p2peer->msg6_addr.sin6_addr.s6_addr32[3] = p2peer->peer_ipv6.v6_addr.v6_addr32[3]; +#endif + +//vinod + p2peer->msg6_addr.sin6_addr.s6_addr16[0] = p2peer->peer_ipv6.v6_addr.v6_addr16[0]; + p2peer->msg6_addr.sin6_addr.s6_addr16[1] = p2peer->peer_ipv6.v6_addr.v6_addr16[1]; + p2peer->msg6_addr.sin6_addr.s6_addr16[2] = p2peer->peer_ipv6.v6_addr.v6_addr16[2]; + p2peer->msg6_addr.sin6_addr.s6_addr16[3] = p2peer->peer_ipv6.v6_addr.v6_addr16[3]; + p2peer->msg6_addr.sin6_addr.s6_addr16[4] = p2peer->peer_ipv6.v6_addr.v6_addr16[4]; + p2peer->msg6_addr.sin6_addr.s6_addr16[5] = p2peer->peer_ipv6.v6_addr.v6_addr16[5]; + p2peer->msg6_addr.sin6_addr.s6_addr16[6] = p2peer->peer_ipv6.v6_addr.v6_addr16[6]; + p2peer->msg6_addr.sin6_addr.s6_addr16[7] = p2peer->peer_ipv6.v6_addr.v6_addr16[7]; + + +printf("Connecting the TCP socket \n"); +/* + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Connecting the TCP socket \n", + DEBUG_FUlNCTION, + DEBUG_LINE); + } +*/ + + status = connect(p2config->dlep_tcp_sockfd, + (struct sockaddr *)&p2peer->msg6_addr, + sizeof(struct sockaddr_in6)); +/* + status_6 = connect(p2config->dlep_tcp_sockfd, + (struct sockaddr *)&p2peer->msg6_addr, + sizeof(struct sockaddr_in6)); +*/ + if (status < 0) { + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: not able to connect to TCP " + "socket to port %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_tcp_port); + } +// exit (0); + printf("\n Do Manual start once server ready "); + } + + + +// listen(32, p2config->dlep_sockfd); + return; +} + + +/** + * NAME + * dlep_udp_receive + * + * SYNOPSIS + * int + * dlep_udp_receive(dlep_config_t *p2config, + * struct sockaddr_in *rcvd_msg_addr, + * socklen_t *rcvd_msg_socket_length, + * void *msg, + * uint32_t length) + * + * DESCRIPTION + * This function is used to receive a UDP message. + * This is a blocking call. + * + * INPUT PARAMETERS + * p2config - pointer to the config data + * + * rcvd_msg_addr - pointer to the receive socket data + * + * rcvd_socket_length - pointer to the receive socket length + * + * msg - pointer to the message buffer to receive the data + * + * length - Maximum number of bytes to receive, that + * the buffer can hold. + * + * OUTPUT PARAMETERS + * None. + * + * RETURN VALUE + * number of bytes read + * <= 0 error condition + * + */ +int +dlep_udp_receive (dlep_config_t *p2config, + struct sockaddr_in6 *rcvd_msg_addr, + socklen_t *rcvd_socket_length, + void *msg, + uint32_t length) +{ + int num_bytes; + + if (!p2config) { + return (0); + } + + if (!msg) { + return (0); + } + + if (length < MSG_MIN_LEN || length > MSG_MAX_LEN) { + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: msg length invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + return (0); + } + + /* + * Since we use the sig_alarm, we must handle + * interrupting the recv_from. + */ + *rcvd_socket_length = sizeof(struct sockaddr); + num_bytes = -1; + while (num_bytes < 0) { + num_bytes = recvfrom(p2config->dlep_udp_sockfd, + msg, + length, + MSG_WAITALL, + (struct sockaddr *)rcvd_msg_addr, + rcvd_socket_length); + + if (num_bytes < 0) { + if (errno == EINTR) { + continue; + } + + perror("recvfrom: udp failed "); + memset(msg, 0 , 128); + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: recv_from error = %d \n", + DEBUG_FUNCTION, + DEBUG_LINE, + num_bytes); + } + + } else { + rcvd_msg_addr->sin6_port = htons(rcvd_msg_addr->sin6_port); + + p2config->client_udp_6.sin6_port = htons(rcvd_msg_addr->sin6_port); + p2config->client_udp_6.sin6_addr = rcvd_msg_addr->sin6_addr; + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Received from !!!!!!%s at port %u %u bytes \n", + DEBUG_FUNCTION, + DEBUG_LINE, + // inet_ntoa( rcvd_msg_addr->sin6_addr), + // inet_ntoa( p2config->client_udp.sin_addr), + rcvd_msg_addr->sin6_port, + htons(p2config->client_udp_6.sin6_port), + num_bytes); + } + break; + } + } + + + return (num_bytes); +} + + +// dlep_udp_receive_6 // + +int +dlep_udp_receive_6 (dlep_config_t *p2config, + struct sockaddr_in6 *rcvd_msg_addr, + socklen_t *rcvd_socket_length, + void *msg, + uint32_t length) +{ + int num_bytes; + + if (!p2config) { + return (0); + } + + if (!msg) { + return (0); + } + + if (length < MSG_MIN_LEN || length > MSG_MAX_LEN) { + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: msg length invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + return (0); + } + + /* + * Since we use the sig_alarm, we must handle + * interrupting the recv_from. + */ + *rcvd_socket_length = sizeof(struct sockaddr); + num_bytes = -1; + while (num_bytes < 0) { + num_bytes = recvfrom(p2config->dlep_udp_sockfd, + msg, + length, + MSG_WAITALL, + (struct sockaddr *)rcvd_msg_addr, + rcvd_socket_length); + + if (num_bytes < 0) { + if (errno == EINTR) { + continue; + } + + perror("recvfrom: udp failed "); + memset(msg, 0 , 128); + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: recv_from error = %d \n", + DEBUG_FUNCTION, + DEBUG_LINE, + num_bytes); + } + + } else { + rcvd_msg_addr->sin6_port = htons(rcvd_msg_addr->sin6_port); + + p2config->client_udp_6.sin6_port = htons(rcvd_msg_addr->sin6_port); + p2config->client_udp_6.sin6_addr = rcvd_msg_addr->sin6_addr; + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Received from !!!!!!%s at port %u %u bytes \n", + DEBUG_FUNCTION, + DEBUG_LINE, + //inet_ntoa(rcvd_msg_addr->sin_addr), + // inet_ntoa(p2config->client_udp_6.sin6_addr), + //rcvd_msg_addr->sin_port, + htons(p2config->client_udp_6.sin6_port), + num_bytes); + } + break; + } + } + + return (num_bytes); +} + + + + +/** + * NAME + * dlep_tcp_receive + * + * SYNOPSIS + * int + * dlep_tcp_receive(dlep_config_t *p2config, + * struct sockaddr_in *rcvd_msg_addr, + * socklen_t *rcvd_msg_socket_length, + * void *msg, + * uint32_t length) + * + * DESCRIPTION + * This function is used to receive a TCP message. + * This is a blocking call. + * + * INPUT PARAMETERS + * p2config - pointer to the config data + * + * rcvd_msg_addr - pointer to the receive socket data + * + * rcvd_socket_length - pointer to the receive socket length + * + * msg - pointer to the message buffer to receive the data + * + * length - Maximum number of bytes to receive, that + * the buffer can hold. + * + * OUTPUT PARAMETERS + * None. + * + * RETURN VALUE + * number of bytes read + * <= 0 error condition + * + */ +int +dlep_tcp_receive (dlep_config_t *p2config, + struct sockaddr_in6 *rcvd_msg_addr, + socklen_t *rcvd_socket_length, + void *msg, + uint32_t length) +{ + int num_bytes; + //static int count; + int bytes_read ,bytes_left, fd; + unsigned short msg_len = 0; + char msg_hdr[4]; + char *buf_ptr; + + bytes_read = bytes_left = 0; + buf_ptr = msg_hdr; + + if (!p2config) { + + printf("\n INNN config"); + return (0); + } + fd = p2config->dlep_tcp_client_sockfd; + + + if (!msg) { + return (0); + } + + if (length < MSG_MIN_LEN || length > MSG_MAX_LEN) { + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: msg length invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + return (0); + } + + /* + * Since we use the sig_alarm, we must handle + * interrupting the recv_from. + */ + //*rcvd_socket_length = sizeof(struct sockaddr); + //num_bytes = -1; +#if 0 + while (num_bytes < 0) { + num_bytes = recvfrom(p2config->dlep_tcp_client_sockfd, + msg, + length, + MSG_WAITALL, + (struct sockaddr *)rcvd_msg_addr, + rcvd_socket_length); + + if (num_bytes < 0) { + if (errno == EINTR) { + continue; + } + count++; + if (count < 6) + perror("recvfrom: tcp failed "); + memset(msg, 0 , 128); + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: recv_from error = %d \n", + DEBUG_FUNCTION, + DEBUG_LINE, + num_bytes); + } + + } else { + // rcvd_msg_addr->sin_port = htons(rcvd_msg_addr->sin_port); + + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Received from %s at port %u %u bytes \n", + DEBUG_FUNCTION, + DEBUG_LINE, + inet_ntoa(rcvd_msg_addr->sin6_addr), + rcvd_msg_addr->sin6_port, + num_bytes); + } + break; + } + } +#endif +#define MSG_HDR_SIZE 4 + bytes_read = recv(fd, msg_hdr, MSG_HDR_SIZE, MSG_PEEK); + /* fall through case where bytes_read == MSG_HDR_SIZE */ + buf_ptr++; + buf_ptr++; + +#define GETSHORT(ptr) ((unsigned char *)ptr)[0] << 8 | ((unsigned char *)ptr)[1] +// #define GETSHORT(ptr) (*((unsigned short *) (ptr))) + msg_len = GETSHORT(buf_ptr); + + /* Read the full message */ + msg_len += MSG_HDR_SIZE; + bytes_left = msg_len; + + + while (bytes_left > 0) { + bytes_read = recv(fd, msg, bytes_left, 0); + if (bytes_read == 0) { + close(p2config->dlep_tcp_client_sockfd); + TCP_CLIENT_READY = 0; + } +/* + uint8_t *ptr = msg; + int len = bytes_read; + for(;len!=0; --len) { + printf("%x",*ptr); + } +*/ + if(bytes_read < 0) { + return (-1); + } + + //*length += bytes_read; + msg += bytes_read; + bytes_left -= bytes_read; + } + num_bytes = msg_len - bytes_left; + +// return (MANET_INFRA_SUCCESS); + return (num_bytes); +} + + +// dlep_tcp_receive_6 // +int +dlep_tcp_receive_6 (dlep_config_t *p2config, + struct sockaddr_in6 *rcvd_msg_addr, + socklen_t *rcvd_socket_length, + void *msg, + uint32_t length) +{ + int num_bytes; + //static int count; + int bytes_read ,bytes_left, fd; + unsigned short msg_len = 0; + char msg_hdr[4]; + char *buf_ptr; + + bytes_read = bytes_left = 0; + buf_ptr = msg_hdr; + + if (!p2config) { + + printf("\n INNN config"); + return (0); + } + fd = p2config->dlep_tcp_client_sockfd; + + + if (!msg) { + return (0); + } + + if (length < MSG_MIN_LEN || length > MSG_MAX_LEN) { + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: msg length invalid \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + return (0); + } + +#define MSG_HDR_SIZE 4 + bytes_read = recv(fd, msg_hdr, MSG_HDR_SIZE, MSG_PEEK); + /* fall through case where bytes_read == MSG_HDR_SIZE */ + buf_ptr++; + buf_ptr++; + +#define GETSHORT(ptr) ((unsigned char *)ptr)[0] << 8 | ((unsigned char *)ptr)[1] +// #define GETSHORT(ptr) (*((unsigned short *) (ptr))) + msg_len = GETSHORT(buf_ptr); + + /* Read the full message */ + msg_len += MSG_HDR_SIZE; + bytes_left = msg_len; + + + while (bytes_left > 0) { + bytes_read = recv(fd, msg, bytes_left, 0); + if (bytes_read == 0) { + close(p2config->dlep_tcp_client_sockfd); + TCP_CLIENT_READY = 0; + } + + if(bytes_read < 0) { + return (-1); + } + + //*length += bytes_read; + msg += bytes_read; + bytes_left -= bytes_read; + } + num_bytes = msg_len - bytes_left; + +// return (MANET_INFRA_SUCCESS); + return (num_bytes); +} + + + +/** + * NAME + * dlep_udp_send + * + * SYNOPSIS + * void + * dlep_send(dlep_config_t *p2config, + * dlep_context_peer_t *p2peer, + * void *msg, + * uint32_t length) + * + * DESCRIPTION + * This function is used to send a UDP mesage. + * + * INPUT PARAMETERS + * p2config - pointer to the config data + * + * p2peer - pointer to the peer context + * + * msg - Pointer to the message to be sent + * + * length - Number of bytes in mesage to send + * + * OUTPUT PARAMETERS + * None. + * + * RETURN VALUE + * None. + * + */ +void +dlep_send (dlep_config_t *p2config, + dlep_context_peer_t *p2peer, + void *msg, + uint32_t length) +{ + int send_bytes; + int send_bytes_6; + + if (!p2peer) { + return; + } + + if (!msg) { + return; + } + +// perror("send: udp "); + + // memset(&p2peer->msg_addr, 0, sizeof(struct sockaddr_in)); + memset(&p2peer->msg6_addr, 0, sizeof(struct sockaddr_in6)); + // p2peer->msg_addr.sin_family = AF_INET; +// Debug + p2peer->msg6_addr.sin6_family = AF_INET6; + + // p2peer->msg_addr.sin_port = htons(p2peer->peer_udp_port); + p2peer->msg6_addr.sin6_port = htons(p2peer->peer_udp_port); + //p2peer->msg_addr.sin_addr.s_addr = htonl(p2peer->peer_ipv4.v4_addr.v4_addr32); + // p2peer->msg_addr.sin_addr.s_addr = p2peer->peer_ipv4.v4_addr.v4_addr32; + +#if 0 + p2peer->msg6_addr.sin6_addr.s6_addr32[0] = p2peer->peer_ipv6.v6_addr.v6_addr32[0]; + p2peer->msg6_addr.sin6_addr.s6_addr32[1] = p2peer->peer_ipv6.v6_addr.v6_addr32[1]; + p2peer->msg6_addr.sin6_addr.s6_addr32[2] = p2peer->peer_ipv6.v6_addr.v6_addr32[2]; + p2peer->msg6_addr.sin6_addr.s6_addr32[3] = p2peer->peer_ipv6.v6_addr.v6_addr32[3]; +#endif +//vinod + p2peer->msg6_addr.sin6_addr.s6_addr16[0] = p2peer->peer_ipv6.v6_addr.v6_addr16[0]; + p2peer->msg6_addr.sin6_addr.s6_addr16[1] = p2peer->peer_ipv6.v6_addr.v6_addr16[1]; + p2peer->msg6_addr.sin6_addr.s6_addr16[2] = p2peer->peer_ipv6.v6_addr.v6_addr16[2]; + p2peer->msg6_addr.sin6_addr.s6_addr16[3] = p2peer->peer_ipv6.v6_addr.v6_addr16[3]; + p2peer->msg6_addr.sin6_addr.s6_addr16[4] = p2peer->peer_ipv6.v6_addr.v6_addr16[4]; + p2peer->msg6_addr.sin6_addr.s6_addr16[5] = p2peer->peer_ipv6.v6_addr.v6_addr16[5]; + p2peer->msg6_addr.sin6_addr.s6_addr16[6] = p2peer->peer_ipv6.v6_addr.v6_addr16[6]; + p2peer->msg6_addr.sin6_addr.s6_addr16[7] = p2peer->peer_ipv6.v6_addr.v6_addr16[7]; + + + send_bytes = sendto(p2config->dlep_udp_sockfd, + msg, + length, + 0, + //(struct sockaddr *)&p2peer->msg_addr, + (struct sockaddr *)&p2config->client_udp, + sizeof(struct sockaddr_in6)); + +/* send_bytes_6 = sendto(p2config->dlep_udp_sockfd, + msg, + length, + 0, + //(struct sockaddr *)&p2peer->msg_addr, + (struct sockaddr *)&p2config->client_udp_6, + sizeof(struct sockaddr_in6)); +*/ + if (send_bytes < 0) { + perror("sendto: udp failed "); + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u send to %s at " + "port %d bytes=%d \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + // inet_ntoa(p2peer->msg6_addr.sin6_addr), + p2peer->peer_udp_port, + send_bytes); + } + } else { + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u sent iiiii to %s at " + "port %d bytes=%d \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + //inet_ntoa(p2peer->msg_addr.sin_addr), + // inet_ntoa(p2config->client_udp_6.sin6_addr), + //p2peer->peer_udp_port, + htons(p2config->client_udp_6.sin6_port), + send_bytes); + } + } + + return; +} + + + + +void +dlep_tcp_send (dlep_config_t *p2config, + dlep_context_peer_t *p2peer, + void *msg, + uint32_t length) +{ + int send_bytes; + int send_bytes_6; + uint32_t ttl = 255; + + if (!p2peer) { + return; + } + + if (!msg) { + return; + } + + perror("send: tcp "); + + + memset(&p2peer->msg6_addr, 0, sizeof(struct sockaddr_in6)); + + p2peer->msg6_addr.sin6_family = AF_INET6; + + p2peer->msg6_addr.sin6_port = htons(p2peer->peer_tcp_port); + +#if 0 + p2peer->msg6_addr.sin6_addr.s6_addr32[0] = p2peer->peer_ipv6.v6_addr.v6_addr32[0]; + p2peer->msg6_addr.sin6_addr.s6_addr32[1] = p2peer->peer_ipv6.v6_addr.v6_addr32[1]; + p2peer->msg6_addr.sin6_addr.s6_addr32[2] = p2peer->peer_ipv6.v6_addr.v6_addr32[2]; + p2peer->msg6_addr.sin6_addr.s6_addr32[3] = p2peer->peer_ipv6.v6_addr.v6_addr32[3]; +#endif +//vinod + p2peer->msg6_addr.sin6_addr.s6_addr16[0] = p2peer->peer_ipv6.v6_addr.v6_addr16[0]; + p2peer->msg6_addr.sin6_addr.s6_addr16[1] = p2peer->peer_ipv6.v6_addr.v6_addr16[1]; + p2peer->msg6_addr.sin6_addr.s6_addr16[2] = p2peer->peer_ipv6.v6_addr.v6_addr16[2]; + p2peer->msg6_addr.sin6_addr.s6_addr16[3] = p2peer->peer_ipv6.v6_addr.v6_addr16[3]; + p2peer->msg6_addr.sin6_addr.s6_addr16[4] = p2peer->peer_ipv6.v6_addr.v6_addr16[4]; + p2peer->msg6_addr.sin6_addr.s6_addr16[5] = p2peer->peer_ipv6.v6_addr.v6_addr16[5]; + p2peer->msg6_addr.sin6_addr.s6_addr16[6] = p2peer->peer_ipv6.v6_addr.v6_addr16[6]; + p2peer->msg6_addr.sin6_addr.s6_addr16[7] = p2peer->peer_ipv6.v6_addr.v6_addr16[7]; + + + + if (p2peer->ttl) { + if(setsockopt(p2config->dlep_tcp_client_sockfd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, + (char *)&p2peer->ttl, sizeof(p2peer->ttl)) < 0) + { + perror("Setting IPV6_UNICAST_HOPS error TTL"); + close(p2config->dlep_tcp_client_sockfd); + exit(1); + } + } + + send_bytes = sendto(p2config->dlep_tcp_client_sockfd, + msg, + length, + 0, + (struct sockaddr *)&p2config->client_6, + sizeof(struct sockaddr_in6)); + /* send_bytes_6 = sendto(p2config->dlep_tcp_client_sockfd, + msg, + length, + 0, + (struct sockaddr *)&p2config->client, + sizeof(struct sockaddr_in6)); +*/ + if (send_bytes < 0) { + perror("sendto: tcp failed "); + if (dlep_debug_flags & DLEP_ERROR_TRACE_FLAG) { + DLEP_DEBUG("%s-%u Error: peer_id=%u send to %s at " + "port %d bytes=%d \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + p2peer->peer_tcp_port, + send_bytes); + } + } else { + if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { + DLEP_DEBUG("%s-%u peer_id=%u sent to %s at " + "port %d bytes=%d \n", + DEBUG_FUNCTION, + DEBUG_LINE, + p2peer->peer_id, + htons(p2config->client_6.sin6_port), + send_bytes); + } + } + if (p2peer->ttl) { + p2peer->ttl = 0; + if(setsockopt(p2config->dlep_tcp_client_sockfd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, + (char *)&ttl, sizeof(ttl)) < 0) + { + perror("Setting IPV6_UNICAST_HOPS error"); + close(p2config->dlep_tcp_client_sockfd); + exit(1); + } + } + + return; +} diff --git a/dlep_radio_ipv6/dlep_porter.h b/dlep_radio_ipv6/dlep_porter.h new file mode 100644 index 0000000..d285e2a --- /dev/null +++ b/dlep_radio_ipv6/dlep_porter.h @@ -0,0 +1,117 @@ +/*---------------------------------------------------------------------- + * dlep_porter.h -- APIs for UDP socket use + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_PORTER_H__ +#define __DLEP_PORTER_H__ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "safe_types.h" +#include "dlep_config.h" + +#include "dlep_context_peer.h" + + +extern void +dlep_porter_init(dlep_config_t *p2config); + + +extern void +dlep_porter_open(dlep_config_t *p2config); + +extern void +dlep_tcp_porter_open(dlep_config_t *p2config); + + +extern void +dlep_tcp_open(dlep_config_t *p2config); + + +extern void +dlep_tcp_connect(dlep_config_t *p2config, + dlep_context_peer_t *p2ctx, + void *msg, + uint32_t length); + + +extern int +dlep_udp_receive(dlep_config_t *p2config, + struct sockaddr_in6 *rcvd_msg_addr, + socklen_t *rcvd_msg_socket_length, + void *msg, + uint32_t length); + +extern int +dlep_udp_receive_6(dlep_config_t *p2config, + struct sockaddr_in6 *rcvd_msg_addr, + socklen_t *rcvd_msg_socket_length, + void *msg, + uint32_t length); + +extern int +dlep_tcp_receive(dlep_config_t *p2config, + struct sockaddr_in6 *rcvd_msg_addr, + socklen_t *rcvd_msg_socket_length, + void *msg, + uint32_t length); + +extern int +dlep_tcp_receive_6(dlep_config_t *p2config, + struct sockaddr_in6 *rcvd_msg_addr, + socklen_t *rcvd_msg_socket_length, + void *msg, + uint32_t length); + + +extern void +dlep_send(dlep_config_t *p2config, + dlep_context_peer_t *p2ctx, + void *msg, + uint32_t length); + +extern void +dlep_tcp_send(dlep_config_t *p2config, + dlep_context_peer_t *p2ctx, + void *msg, + uint32_t length); + + +#endif + diff --git a/dlep_radio_ipv6/dlep_server_neighbor_fsm.h b/dlep_radio_ipv6/dlep_server_neighbor_fsm.h new file mode 100644 index 0000000..a0faed7 --- /dev/null +++ b/dlep_radio_ipv6/dlep_server_neighbor_fsm.h @@ -0,0 +1,102 @@ +/*---------------------------------------------------------------------- + * dlep_server_neighbor_fsm.h -- server neighbor state machine + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_SERVER_SESSION_FSM_H__ +#define __DLEP_SERVER_SESSION_FSM_H__ + +#include "safe_types.h" +#include "dlep_context_peer.h" +#include "dlep_context_neighbor.h" + + +/* + * normalized server events for neighbors + */ +typedef enum { + neighbor_init_e = 0, + neighbor_update_metrics_e, + neighbor_update_addr_req_e, + neighbor_term_user_req_e, + neighbor_term_e, + neighbor_term_ack_e, + neighbor_down_ack_tmo_e, + neighbor_link_char_res_e, +} dlep_server_neighbor_events_e; + + +/* + * normalized server states + */ +typedef enum { + neighbor_initializing_s = 0, + neighbor_update_s, + neighbor_terminating_s, +} dlep_server_neighbor_states_e; + + + + +extern uint32_t +dlep_server_neighbor_fsm_get_state( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_server_neighbor_fsm_show_counter( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_server_neighbor_fsm_show_state_table( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_server_neighbor_fsm_show_history( + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_server_neighbor_fsm_engine(uint32_t normalized_event, + dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_neighbor_fsm_destroy(dlep_context_neighbor_t *p2neighbor); + + +extern void +dlep_neighbor_fsm_create(dlep_context_neighbor_t *p2neighbor); + + +#endif + diff --git a/dlep_radio_ipv6/dlep_sim_options.h b/dlep_radio_ipv6/dlep_sim_options.h new file mode 100644 index 0000000..4d6cf73 --- /dev/null +++ b/dlep_radio_ipv6/dlep_sim_options.h @@ -0,0 +1,79 @@ +/*---------------------------------------------------------------------- + * dlep_sim_options.h -- Sim build options + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_SIM_OPTIONS_H__ +#define __DLEP_SIM_OPTIONS_H__ + +/* + * This file defines several build #defines that can be used to + * change the behavior of the simulator code for testing, etc. + */ + + +/** + ** Enable the definition of this macro to pack multiple + ** peer messages in a packet. + ** + ** #define MULTIPLE_PEER_MESSAGES_PACKED ( 1 ) + **/ +// #define MULTIPLE_PEER_MESSAGES_PACKED ( 1 ) + + +/** + ** Enable the definition of this macro to pack multiple + ** neighbor messages in a packet. + ** + ** #define MULTIPLE_NEIGHBOR_MESSAGES_PACKED ( 1 ) + **/ +//#define MULTIPLE_NEIGHBOR_MESSAGES_PACKED ( 1 ) + + +/** + ** Enable the insertion of the experimental TLVs for testing + ** + ** #define EXPERIMENTAL_TLVS ( 1 ) + **/ +// #define EXPERIMENTAL_TLVS ( 1 ) + + +/* + * defintion of this macro will enable dynamic + * metrics during periodic updates for testing. + * + * #define DYNAMIC_METRICS_ENABLED + */ +//#define DYNAMIC_METRICS_ENABLED + + + + +#endif + diff --git a/dlep_radio_ipv6/dlep_source_cli.c b/dlep_radio_ipv6/dlep_source_cli.c new file mode 100644 index 0000000..fb745a1 --- /dev/null +++ b/dlep_radio_ipv6/dlep_source_cli.c @@ -0,0 +1,143 @@ +/*------------------------------------------------------------------ + * dlep_source_cli.c -- source CLI commands + * + * October 2011, Bo Berry + * + * Copyright (c) 2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include +#include + +#include "cli.h" + +#include "dlep_source_cli.h" +//SENDIL +#include "sim_dlep_radio_cli.h" + + + +/* + * directory record + */ +cli_record_t cli_source_dir; + + +/* + * allocate command records + */ +static cli_record_t source_command_cmd; + + + +/** + ** source commands + **/ + +static void +source_commands (uint32_t argc, char *argv[]) +{ + FILE *fp; + +#define MAX_INPUT_LENGTH ( 512 ) + char input_string[MAX_INPUT_LENGTH]; + + + if (argv[1] && *argv[1] == '?') { + printf("source_commands - source commands from the file\n"); + printf("\n"); + printf(" - the file that contains commands being sourced \n"); + printf("\n"); + return; + } + + printf("sourcing file %s \n", argv[1]); + + fp = fopen(argv[1], "r"); + if (!fp) { + printf("Error: problem opening source file: %s\n", + argv[1]); + return; + } + + while (fgets(input_string, MAX_INPUT_LENGTH, fp)) { + if (input_string[0] == '\0') { + continue; + } else if (input_string[0] == '#') { + continue; + } + + dlep_cli_engine(input_string); + } + + return; +} + + + +/** + * NAME + * dlep_source_cli_init + * + * SYNOPSIS + * void + * dlep_source_cli_init() + * + * DESCRIPTION + * Registers the dlep source command with the cli + * facility. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_source_cli_init (void) +{ + RC_CLI_t rc; + + /* + * Create directory and commands + */ + rc = cli_mkdir("source", NULL, &cli_source_dir); + + + rc = cli_mkcmd("source_commands", + source_commands, + &cli_source_dir, + &source_command_cmd); + + return; +} + diff --git a/dlep_radio_ipv6/dlep_source_cli.h b/dlep_radio_ipv6/dlep_source_cli.h new file mode 100644 index 0000000..99bf642 --- /dev/null +++ b/dlep_radio_ipv6/dlep_source_cli.h @@ -0,0 +1,40 @@ +/*---------------------------------------------------------------------- + * dlep_source_cli.h -- source cli commands + * + * August 2011, Bo Berry + * + * Copyright (c) 2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __DLEP_SOURCE_CLI_H__ +#define __DLEP_SOURCE_CLI_H__ + + +extern void +dlep_source_cli_init(void); + +#endif + diff --git a/dlep_radio_ipv6/fsm.c b/dlep_radio_ipv6/fsm.c new file mode 100644 index 0000000..7330838 --- /dev/null +++ b/dlep_radio_ipv6/fsm.c @@ -0,0 +1,790 @@ +/*------------------------------------------------------------------ + * fsm.c -- Finite State Machine + * + * February 2005, Bo Berry + * + * Copyright (c) 2005-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include + +#include "fsm.h" + + +/* + * These are the maximum states and events that fsm uses + * for sizing during create. + */ +#define FSM_MAX_STATES ( 64 ) +#define FSM_MAX_EVENTS ( 64 ) + + + +/** + * NAME + * fsm_display_table + * + * SYNOPSIS + * #include "fsm.h" + * void + * fsm_display_table(fsm_t *fsm) + * + * DESCRIPTION + * Displays the designated state machine table to console. + * + * INPUT PARAMETERS + * fsm - handle to fsm + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +fsm_display_table (fsm_t *fsm) +{ +printf("fsm_display_table\n"); + uint32_t i; + uint32_t j; + state_tuple_t *state_ptr; + event_tuple_t *event_ptr; + + state_description_t *p2state_description; + event_description_t *p2event_description; + + if (fsm == NULL) { + return; + } + + if (fsm->tag != FSM_TAG) { + return; + } + + p2state_description = fsm->state_description_table; + p2event_description = fsm->event_description_table; + + printf("\nFSM: %s \n", fsm->fsm_name); + printf(" number_states = %d\n", fsm->number_states); + printf(" number_events = %d\n", fsm->number_events); + printf(" curr_state = %s\n", + p2state_description[fsm->curr_state].description ); + printf("\n"); + + /* + * For the normalized state table, list the normalized + * events and state transitions. + */ + for (i=0; inumber_states; i++) { + + state_ptr = &fsm->state_table[i]; + + printf(" State: %s \n", + p2state_description[state_ptr->state_id].description); + printf(" Event / Next State \n"); + printf("----------------------------\n"); + + for (j=0; jnumber_events; j++) { + + event_ptr = &state_ptr->p2event_tuple[j]; + + /* + * Display the name of the state associated with the next state. + */ + printf(" %u-%s / %s \n", + j, + p2event_description[j].description, + p2state_description[event_ptr->next_state].description); + } + printf("\n"); + } + printf("\n"); + return; +} + + +/** + * NAME + * fsm_show_history + * + * SYNOPSIS + * #include "fsm.h' + * void + * fsm_show_history(fsm_t *fsm) + * + * DESCRIPTION + * Displays history of the state transitions. + * + * INPUT PARAMETERS + * *fsm - handle of the state machine + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +fsm_show_history (fsm_t *fsm) +{ + uint32_t i, j; + fsm_history_t *history_ptr; + + state_description_t *p2state_description; + event_description_t *p2event_description; + + if (fsm == NULL) { + return; + } + + if (fsm->tag != FSM_TAG) { + return; + } + + p2state_description = fsm->state_description_table; + p2event_description = fsm->event_description_table; + + printf("\nFSM: %s History \n", fsm->fsm_name); + printf("Current State / Event / New State / rc \n"); + printf("------------------------------------------------\n"); + + j = fsm->history_index; + for (i=0; ihistory[i]; + + if (history_ptr->stateID == FSM_NULL_STATE_ID) { + continue; + } + + printf(" %u-%s / %u-%s / %u-%s / %u\n", + history_ptr->prevStateID, + p2state_description[history_ptr->prevStateID].description, + history_ptr->eventID, + p2event_description[history_ptr->eventID].description, + history_ptr->stateID, + p2state_description[history_ptr->stateID].description, + history_ptr->handler_rc); + + if (j==0) { + j=FSM_HISTORY; + } + j--; + } + + printf("\n"); + return; +} + + +/** + * NAME + * fsm_get_state + * + * SYNOPSIS + * #include "fsm.h" + * RC_FSM_t + * fsm_get_state(fsm_t *fsm, uint32_t*p2state) + * + * DESCRIPTION + * Function to return the current state. + * + * INPUT PARAMETERS + * *fsm - state machine handle + * + * p2state - Pointer to a state variable to be updated. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * error otherwise + * + */ +RC_FSM_t +fsm_get_state (fsm_t *fsm, uint32_t *p2state) +{ + if (fsm == NULL) { + return (RC_FSM_NULL); + } + + if (fsm->tag != FSM_TAG) { + return (RC_FSM_INVALID_HANDLE); + } + + *p2state = fsm->curr_state; + return (RC_FSM_OK); +} + + +/** + * NAME + * fsm_set_exception_state + * + * SYNOPSIS + * #include "fsm.h" + * RC_FSM_t + * fsm_set_exception_state(fsm_t *fsm, + * uint32_t exception_state) + * + * DESCRIPTION + * To be called from an event handler to alter + * the next state from the event table when an + * exception has been detected + * + * INPUT PARAMETERS + * *fsm - state machine handle + * + * exception_state - New state to be transitioned + * when the event handler returns. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * error otherwise + * + */ +RC_FSM_t +fsm_set_exception_state (fsm_t *fsm, uint32_t exception_state) +{ + if (fsm == NULL) { + return (RC_FSM_NULL); + } + + if (fsm->tag != FSM_TAG) { + return (RC_FSM_INVALID_HANDLE); + } + + /* + * Change the state of this FSM to the requested state. + */ + if (exception_state > fsm->number_states-1) { + return (RC_FSM_INVALID_STATE); + } + + fsm->exception_state = exception_state; + fsm->exception_state_indicator = TRUE; + return (RC_FSM_OK); +} + + +/** + * NAME + * fsm_destroy + * + * SYNOPSIS + * #include "fsm.h" + * RC_FSM_t + * fsm_destroy(fsm_t **fsm) + * + * DESCRIPTION + * Destroys the specified state machine. + * + * INPUT PARAMETERS + * fsm - pointer to fsm handle + * + * OUTPUT PARAMETERS + * fsm - is nulled + * + * RETURN VALUE + * RC_FSM_OK + * error otherwise + * + */ +RC_FSM_t +fsm_destroy (fsm_t **fsm) +{ + fsm_t *p2fsm; + + if (fsm == NULL) { + return (RC_FSM_NULL); + } + + p2fsm = *fsm; + if (p2fsm->tag != FSM_TAG) { + return (RC_FSM_INVALID_HANDLE); + } + + free(p2fsm->history); + *fsm = NULL; + free(p2fsm); + return (RC_FSM_OK); +} + + +/** + * NAME + * fsm_create + * + * SYNOPSIS + * #include "fsm.h" + * RC_FSM_t + * fsm_create(fsm_t **fsm, + * char *name, + * uint32_t initial_state, + * state_description_t *state_description_table, + * event_description_t *event_description_table, + * state_tuple_t *state_table) + * + * DESCRIPTION + * Creates and initializes a state machine. The + * initial state is specified by the user. + * + * INPUT PARAMETERS + * fsm pointer to fsm handle to be returned + * once created + * + * name pointer to fsm name + * + * initial_state Initial start state + * + * state_description_table + * Pointer to the user table which + * provides a description of each state. + * The table is used when displaying + * state info to the console. + * + * event_description_table + * Pointer to the user table which + * provides a description of each event. + * The table is used when displaying + * state info to the console. + * + * state_table Pointer to user defined state + * table. The state table is indexed + * by the normalized state ID, 0, 1, ... + * Each state table tuple must reference + * an event table. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * error otherwise + * + */ +RC_FSM_t +fsm_create (fsm_t **fsm, + char *name, + uint32_t initial_state, + state_description_t *state_description_table, + event_description_t *event_description_table, + state_tuple_t *state_table) +{ + fsm_t *temp_fsm; + uint32_t i; + uint32_t j; + state_tuple_t *state_ptr; + event_tuple_t *event_ptr; + + if (fsm == NULL) { + return (RC_FSM_NULL); + } + + if (state_description_table == NULL) { + printf("\n Description table == NULL"); + return (RC_FSM_INVALID_STATE_TABLE); + } + + if (event_description_table == NULL) { + + printf("\n event table == NULL"); + return (RC_FSM_INVALID_EVENT_TABLE); + } + + if (state_table == NULL) { + + printf("\n state_table == NULL"); + return (RC_FSM_INVALID_STATE_TABLE); + } + + + /* + * allocate memory to manage state machine + */ + temp_fsm = (fsm_t *)malloc( sizeof(fsm_t) ); + if (temp_fsm == NULL) { + printf("ME1\n"); + return (RC_FSM_NO_RESOURCES); + } + + /* + * default a name if needed + */ + if (name) { + strncpy(temp_fsm->fsm_name, name, FSM_NAME_LEN); + } else { + strncpy(temp_fsm->fsm_name, "State Machine", FSM_NAME_LEN); + } + + /* + * initialize fsm config parms + */ + temp_fsm->tag = FSM_TAG; /* for sanity cchecks */ + + temp_fsm->curr_state = initial_state; + temp_fsm->next_state = initial_state; + temp_fsm->exception_state_indicator = FALSE; + + /* save the event description table */ + temp_fsm->state_description_table = state_description_table; + temp_fsm->event_description_table = event_description_table; + + /* save the pointer to the state table */ + temp_fsm->state_table = state_table; + + /* + * Find the size of the state table + */ + temp_fsm->number_states = 0; + for (i=0; inumber_states++; + } else { + free(temp_fsm); + + printf("\n IN FSM invalied state tABLE"); + return (RC_FSM_INVALID_STATE_TABLE); + } + } else { + break; + } + } + if (temp_fsm->number_states < 1 || + temp_fsm->number_states > FSM_MAX_STATES-1) { + free(temp_fsm); + printf("ME2\n"); + return (RC_FSM_INVALID_STATE_TABLE); + } +#if 0 + printf("number states=%u \n", temp_fsm->number_states); +#endif + + /* + * check zero based range for state + */ + if (initial_state > temp_fsm->number_states-1) { + free(temp_fsm); + printf("ME3\n"); + return (RC_FSM_INVALID_STATE); + } + + + /* + * Find the size of the event table + */ + temp_fsm->number_events = 0; + for (i=0; inumber_events++; + } + if (temp_fsm->number_events < 1 || + temp_fsm->number_events > FSM_MAX_EVENTS-1) { + free(temp_fsm); + printf("ME5\n"); + return (RC_FSM_INVALID_EVENT_TABLE); + } +#if 0 + printf("number events=%u \n", temp_fsm->number_events); +#endif + + /* + * Now verify the state table - event table relationships and + * that the IDs are normalized. + */ + for (i=0; inumber_states; i++) { + state_ptr = &temp_fsm->state_table[i]; + + event_ptr = state_ptr->p2event_tuple; + + for (j=0; jnumber_events; j++) { +#if 0 + printf(" %u eventID=%u \n", + j, + event_ptr[j].eventID); +#endif + if (j != event_ptr[j].eventID) { + free(temp_fsm); + printf("ME6\n"); + return (RC_FSM_INVALID_EVENT_TABLE); + } + } + } + + /* + * allocate memory for history + */ + temp_fsm->history = malloc(FSM_HISTORY * sizeof(fsm_history_t)); + if (temp_fsm->history == NULL) { + free(temp_fsm); + printf("ME7\n"); + return (RC_FSM_NO_RESOURCES); + } + + /* + * initialize history buffer + */ + temp_fsm->history_index = 0; + for (i=0; ihistory[i].prevStateID = FSM_NULL_STATE_ID; + temp_fsm->history[i].stateID = FSM_NULL_STATE_ID; + temp_fsm->history[i].eventID = FSM_NULL_EVENT_ID; + temp_fsm->history[i].handler_rc = RC_FSM_NULL; + } + + /* return handle to the user */ + *fsm = temp_fsm; + return (RC_FSM_OK); +} + + +/* + * internal routine to record a state transition history + */ +static void +fsm_record_history (fsm_t *fsm, + uint32_t normalized_event, + uint32_t nextState, + RC_FSM_t handler_rc) +{ + fsm_history_t *history_ptr; + + /* + * get next index to record a little history + */ + fsm->history_index = (fsm->history_index+1)%FSM_HISTORY; + + /* + * Get a local pointer to the history buffer to populate + */ + history_ptr = &fsm->history[fsm->history_index]; + + history_ptr->prevStateID = fsm->curr_state; + history_ptr->stateID = nextState; + history_ptr->eventID = normalized_event; + history_ptr->handler_rc = handler_rc; + return; +} + + +/** + * NAME + * fsm_engine + * + * SYNOPSIS + * #include "fsm.h" + * RC_FSM_t + * fsm_engine(fsm_t *fsm, + * uint32_t normalized_event, + * void *p2event_buffer, + * void *p2parm) + * + * DESCRIPTION + * Drives a state machine defined by normalized event + * and a states. + * + * INPUT PARAMETERS + * *fsm state machine handle + * + * normalized_event the event id to process + * + * *p2event pointer to the raw event which + * is driving the event. This is + * passed through to the handler. + * + * *p2parm pointer parameter that is simply + * passed through to each event + * handler. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_FSM_OK + * error otherwise + * + */ +RC_FSM_t +fsm_engine (fsm_t *fsm, + uint32_t normalized_event, + void *p2event_buffer, + void *p2parm) +{ +printf("fsm_engine\n"); + event_tuple_t *event_ptr; + event_cb_t event_handler; + RC_FSM_t rc; + + /* + * verify pointers & handles are valid + */ + + if (fsm == NULL) { + + printf("\n RETURN 2 DEBUG "); + return (RC_FSM_NULL); + } + + if (fsm->tag != FSM_TAG) { + + printf("\n RETURN 3 DEBUG "); + return (RC_FSM_INVALID_HANDLE); + } + + /* + * verify that "event id" is valid: [0-(number_events-1)] + */ + if (normalized_event > fsm->number_events-1) { + fsm_record_history(fsm, normalized_event, + fsm->curr_state, RC_FSM_INVALID_EVENT); + printf("\n RETURN 4 DEBUG "); + return (RC_FSM_INVALID_EVENT); + } + + /* + * Index into the state table to get to the event table + * so we can get the next state and the event handler. + */ + event_ptr = + &fsm->state_table[fsm->curr_state].p2event_tuple[normalized_event]; + + /* + * If the handler was NULL then we have a quiet event , + * no processing possible. + */ + event_handler = event_ptr->event_handler; + if (event_handler == NULL) { + fsm_record_history(fsm, + normalized_event, + event_ptr->next_state, + RC_FSM_INVALID_EVENT_HANDLER); + printf("\n RETURN 5 DEBUG "); + return (RC_FSM_OK); + } + + printf(" "); + rc = (*event_handler)(p2event_buffer, p2parm); + + /* + * Event handler wants to stop processing events. There is no access + * to the fsm data structure in case the state machine has ended. + */ + if (rc == RC_FSM_STOP_PROCESSING) { + printf("\n RETURN 6 DEBUG "); + return (rc); + } + + /* + * If the return code is not OK, simply record the + * result without a state change. + */ + if (rc != RC_FSM_OK) { + fsm_record_history(fsm, normalized_event, + event_ptr->next_state, rc); + return (rc); + } + + /* + * If the exception state indicator is set, use the exception + * state provided by the event handler. This is an unexpected + * state transition. Else use the event table next state. + */ + if (fsm->exception_state_indicator) { + /* + * event handler detected an exception to the state transition + */ + fsm->exception_state_indicator = FALSE; + fsm->next_state = fsm->exception_state; + + } else { + /* + * we have a valid event table transition + */ + fsm->next_state = event_ptr->next_state; + } + + /* + * Validate the next state from the event table + * knowing that the event id is 0,1,2,... + * Then use the event id to directly index into the state + * table to set the next state. + */ + if (fsm->next_state > (fsm->number_states-1)) { + fsm_record_history(fsm, + normalized_event, + fsm->next_state, + RC_FSM_INVALID_STATE); + rc = RC_FSM_INVALID_STATE; + + } else { + + /* record a bit of history. */ + fsm_record_history(fsm, + normalized_event, + fsm->next_state, + rc); + + /* + * and update the current state completing the transition + */ + fsm->curr_state = fsm->next_state; + } + return (rc); +} + diff --git a/dlep_radio_ipv6/fsm.h b/dlep_radio_ipv6/fsm.h new file mode 100644 index 0000000..59f2c9a --- /dev/null +++ b/dlep_radio_ipv6/fsm.h @@ -0,0 +1,340 @@ +/*------------------------------------------------------------------ + * fsm.h - Finite State Machine definitions + * + * February 2005, Bo Berry + * + * Copyright (c) 2005-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __FSM_H__ +#define __FSM_H__ + +#include "safe_types.h" + + +/* + * return codes utilized by the fsm APIs and + * user event handlers + */ +typedef enum { + /* indicates success - state change */ + RC_FSM_OK = 0, + + /* indicates that the fsm handle was NULL */ + RC_FSM_NULL, + + /* indicates that the fsm handle pointed to somethinf else! */ + RC_FSM_INVALID_HANDLE, + + RC_FSM_INVALID_EVENT_HANDLER, + + /* indicates that an error was found in the state table */ + RC_FSM_INVALID_STATE_TABLE, + + /* indicates that the next state was out of bounds */ + RC_FSM_INVALID_STATE, + + /* indicates that an error was found in the event table */ + RC_FSM_INVALID_EVENT_TABLE, + + /* indicates that the next event was out of bounds */ + RC_FSM_INVALID_EVENT, + + /* indicates that there was no memory available */ + RC_FSM_NO_RESOURCES, + + /* event handler indicating that the event can be + * ignored, no transition + */ + RC_FSM_IGNORE_EVENT, + + /* event handler indicating that the state machine is + * being deallocated and no further access to the fsm + * strucutre should be made - history + */ + RC_FSM_STOP_PROCESSING, +} RC_FSM_t; + + + +#define FSM_NULL_STATE_ID ( -1 ) +#define FSM_NULL_EVENT_ID ( -1 ) + + +/* + * typedef RC_FSM_t (*event_cb_t)(void *p2event, void *p2parm) + * + * DESCRIPTION + * Provides typedef for the event handler functions. + * + * Once the state's normalized event ID and index has been + * determined, the associated event call-back is invoked + * to effect the state processing and transition. + * + * INPUT PARAMETERS + * p2event pointer to the raw event to be processed + * by the event handler. + * + * p2parm pointer parameter that is simply + * passed through from fsm_engine to each + * event handler. + * + * RETURN VALUE + * RC_FSM_OK + * error otherwise + */ +typedef RC_FSM_t (*event_cb_t)(void *p2event, void *p2parm); + + +/* + * User provided Normalized Event Description Table. + * + * An Example + * typedef enum { + * start_init_e = 0, + * init_rcvd_e, + * init_tmo_e, + * init_ack_e, + * start_term_e, + * term_rcvd_e, + * term_ack_e, + * } session_events_e; + * + * static event_description_t normalized_event_table[] = + * {{start_init_e, "Start Session Init"}, + * {init_rcvd_e, "Session Init"}, + * {init_tmo_e, "Session Init ACK TMO"}, + * {init_ack_e, "Session Init ACK"}, + * {start_term_e, "Start Session Termination"}, + * {term_rcvd_e, "Session Terminate"}, + * {term_ack_e, "Session Terminate ACK"}, + * {FSM_NULL_EVENT_ID, NULL}}; / required to end table / + * + */ +typedef struct { + uint32_t event_id; + char *description; +} event_description_t; + + +/* + * User provided Normalized State DESCRIPTION Table. + * + * An example + * typedef enum { + * idle_s = 0, + * wait_for_init_ack_s, + * established_s, + * wait_for_term_ack_s, + * } demo_states_e; + * + * static state_description_t normalized_state_table[] = + * {{start_init_e, "Start Session Init"}, + * {idle_s, Idle State"}, + * {wait_for_init_ack_s, "Wait for Init Ack State"}, + * {established_s, "Established State"}, + * {wait_for_term_ack_s, "Wait for Terminate Ack State"}, + * {FSM_NULL_STATE_ID, NULL}}; / required to end table / + * + */ +typedef struct { + uint32_t state_id; + char *description; +} state_description_t; + + + +/* + * User provided Event Table - one table per state is + * required. The table must have an entry for each + * normalized event, ordered from 0 - n. + * + * event_id is the normalized value. + * + * event_handler is the user provided call-back function that is + * invoked to handle the event and effect the state transition. + * If the event_handler is NULL, no processing is + * associated with the event - no state transition. + * + * next_state is the next state as result of the event. It is + * possible that a state transition associated with an event + * remain in the current state. + * + * An example: + * static event_tuple_t state_wait_for_init_ack_events[] = + * {{start_init_e, event_ignore, wait_for_init_ack_s}, + * {init_rcvd_e, event_ignore, wait_for_init_ack_s}, + * {init_tmo_e, event_init_ack_tmo, wait_for_init_ack_s}, + * {init_ack_e, event_init_ack_rcvd, established_s}, + * {start_term_e, event_term_rcvd, wait_for_term_ack_s}, + * {term_rcvd_e, event_term_rcvd, idle_s}, + * {term_ack_e, event_ignore, wait_for_term_ack_s}}; + */ +typedef struct { + uint32_t eventID; /* normalized event id */ + event_cb_t event_handler; /* if NULL==no transaction processing */ + uint32_t next_state; /* normalized next state - can be + * the same state */ +} event_tuple_t; + + +/* + * User provided Normalized State Table. This table represents all + * the states and the event table associated with each state. + * + * An example: + * static state_tuple_t demo_state_table[] = + * {{idle_s, state_idle_events}, + * {wait_for_init_ack_s, state_wait_for_init_ack_events}, + * {established_s, state_established_events}, + * {wait_for_term_ack_s, state_wait_for_term_ack_events}, + * {FSM_NULL_STATE_ID, NULL}}; / requied to end table / + */ +typedef struct { + uint32_t state_id; + event_tuple_t *p2event_tuple; +} state_tuple_t; + + +/* + * Historical record of state changes + */ +typedef struct { + uint32_t number; + uint32_t prevStateID; + uint32_t stateID; + uint32_t eventID; + RC_FSM_t handler_rc; +} fsm_history_t; + + +#define FSM_HISTORY ( 64 ) + +/* + * Finite State Machine structure + * + */ +#define FSM_TAG ( 0xba5eba11 ) +#define FSM_NAME_LEN ( 32 ) + +typedef struct { + /* for fsm validation */ + uint32_t tag; + + uint32_t curr_state; + uint32_t next_state; + + /* + * This is set by an event handle to cover an excpetion + * state transition that is different from the event + * table next state transition. + */ + uint32_t exception_state; + boolean_t exception_state_indicator; + + char fsm_name[FSM_NAME_LEN]; + + /* number states in table */ + uint32_t number_states; + + /* number events in each state-event table */ + uint32_t number_events; + + /* debug and trace flags*/ + uint32_t flags; + + /* pointer to the state table */ + state_tuple_t *state_table; + + /* description of normalized states and events */ + state_description_t *state_description_table; + event_description_t *event_description_table; + + /* starts at 0 and wraps */ + uint32_t history_index; + /* memory is malloc'ed to record history */ + fsm_history_t *history; +} fsm_t; + + +/* + * show state machine table + */ +extern void +fsm_display_table(fsm_t *fsm); + + +/* + * shows state machine history + */ +extern void +fsm_show_history(fsm_t *fsm); + + +/* get state */ +extern RC_FSM_t +fsm_get_state(fsm_t *fsm, uint32_t *p2state); + + +/* + * allows event handler to update the next state based upon + * an unexpected condition when processing the event. + */ +extern RC_FSM_t +fsm_set_exception_state(fsm_t *fsm, uint32_t exception_state); + + +/* + * destroy a state machine + */ +extern RC_FSM_t +fsm_destroy(fsm_t **fsm); + + +/* + * create and config a state machine + */ +extern RC_FSM_t +fsm_create(fsm_t **fsm, + char *fsm_name, + uint32_t initial_state, + state_description_t *state_description_table, + event_description_t *event_description_table, + state_tuple_t *state_table); + + +/* + * API to drive a state machine + */ +extern RC_FSM_t +fsm_engine(fsm_t *fsm, + uint32_t normalized_event, + void *p2event_bufer, + void *p2parm); + + +#endif /* __FSM_H__ */ + diff --git a/dlep_radio_ipv6/fuzz_dlep_cli.h b/dlep_radio_ipv6/fuzz_dlep_cli.h new file mode 100644 index 0000000..1da0faf --- /dev/null +++ b/dlep_radio_ipv6/fuzz_dlep_cli.h @@ -0,0 +1,40 @@ +/*------------------------------------------------------------------ + * fuzz_dlep_cli.h -- fuzz CLI support + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __FUZZ_DLEP_CLI_H__ +#define __FUZZ_DLEP_CLI_H__ + + +extern +void fuzz_dlep_cli_init(void); + +#endif + diff --git a/dlep_radio_ipv6/fuzz_encoder_tlv.h b/dlep_radio_ipv6/fuzz_encoder_tlv.h new file mode 100644 index 0000000..d5d462b --- /dev/null +++ b/dlep_radio_ipv6/fuzz_encoder_tlv.h @@ -0,0 +1,114 @@ +/*---------------------------------------------------------------------- + * fuzz_encoder_tlv.h -- routine prototypes to encode TLVs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __FUZZ_ENCODER_TLV_H__ +#define __FUZZ_ENCODER_TLV_H__ + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_encoder.h" + + + +extern uint8_t +*fuzz_identification_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t router_id, + uint32_t client_id, + uint8_t heartbeat_interval); + +extern uint8_t +*fuzz_version_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint16_t version_major, + uint16_t version_minor); + + +extern uint8_t +*fuzz_peer_tlv(rfc5444_encoder_state_t *p2encoder_state, + char *peer_type_string); + + +extern uint8_t +*fuzz_mac_address_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t mac_address[]); + + +extern uint8_t +*fuzz_ipv4_address_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv4_address_t *ipv4); + +extern uint8_t +*fuzz_ipv6_address_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv6_address_t *ipv6_dest_addr); + + +extern uint8_t +*fuzz_link_metric_mdr_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t mdr); + +extern uint8_t +*fuzz_link_metric_cdr_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t cdr); + +extern uint8_t +*fuzz_link_metric_latency_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint16_t latency); + +extern uint8_t +*fuzz_link_metric_resources_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources); + +extern uint8_t +*fuzz_link_metric_rlq_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t rlq); + +extern uint8_t +*fuzz_status_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t termination_code); + + +extern uint8_t +*fuzz_datarate_request_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t requested_cdr); + + +extern uint8_t +*fuzz_datarate_request_ack_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t requested_cdr, + uint32_t granted_cdr); + +#endif + + diff --git a/dlep_radio_ipv6/fuzz_message_builder.h b/dlep_radio_ipv6/fuzz_message_builder.h new file mode 100644 index 0000000..db76512 --- /dev/null +++ b/dlep_radio_ipv6/fuzz_message_builder.h @@ -0,0 +1,119 @@ +/*---------------------------------------------------------------------- + * fuzz_message_builder.h -- Routines to build fuzzed DLEP messages + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __FUZZ_MESSAGE_BUILDER_H__ +#define __FUZZ_MESSAGE_BUILDER_H__ + +#include "dlep_context_peer.h" +#include "dlep_context_neighbor.h" + + + +/* + * Router-Radio Level Mesages + */ + +extern void +send_fuzz_attached_peer_discovery(dlep_context_peer_t *p2peer); + +extern void +send_fuzz_detached_peer_discovery(dlep_context_peer_t *p2peer); + +extern void +send_fuzz_peer_offer(dlep_context_peer_t *p2peer); + + +extern void +send_fuzz_peer_heartbeat(dlep_context_peer_t *p2peer); + + +extern void +send_fuzz_peer_update_request(dlep_context_peer_t *p2peer); + +extern void +send_fuzz_peer_update_response(dlep_context_peer_t *p2peer); + + +extern void +send_fuzz_peer_terminate(dlep_context_peer_t *p2peer); + +extern void +send_fuzz_peer_terminate_ack(dlep_context_peer_t *p2peer); + + +/* + * Neighbor Level Mesages + */ + +extern void +send_fuzz_neighbor_up(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_fuzz_neighbor_up_ack(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_fuzz_neighbor_metrics(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_fuzz_neighbor_address_request(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_fuzz_neighbor_address_response(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + + +extern void +send_fuzz_neighbor_down(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_fuzz_neighbor_down_ack(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + +extern void +send_fuzz_neighbor_link_char_request(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor, + uint64_t cdr, + uint64_t latency); + + +extern void +send_fuzz_neighbor_link_char_response(dlep_context_peer_t *p2peer, + dlep_context_neighbor_t *p2neighbor); + + + +#endif + diff --git a/dlep_radio_ipv6/fuzz_packet.c b/dlep_radio_ipv6/fuzz_packet.c new file mode 100644 index 0000000..352b899 --- /dev/null +++ b/dlep_radio_ipv6/fuzz_packet.c @@ -0,0 +1,131 @@ +/*---------------------------------------------------------------------- + * fuzz_packet.c -- Routines to read a fuzzed packet file + * + * October 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "safe_types.h" +#include "fuzz_packet.h" + + +#define FUZZ_PACKET_LENGTH ( 2048 ) + + +/** + * NAME + * fuzz_packet_load + * + * DESCRIPTION + * This function reads the designated file that contains + * a fuzzed DLEP packet. The fuzzed packet is used for testing. + * + * INPUT PARAMETERS + * + * OUTPUT PARAMETERS + * + * RETURN VALUE + * length - number of bytes in packet + * + */ +uint32_t +fuzz_packet_load (char *fuzzy_filename, uint8_t *p2packet) +{ + uint32_t i; + uint32_t key_index; + uint32_t line_count; + + FILE *fp; + + +#define MAX_INPUT_LENGTH ( 512 ) + char directed_filename[MAX_INPUT_LENGTH]; + char input_string[MAX_INPUT_LENGTH]; + +#define ARGC_MAX ( 8 ) + uint32_t argc; + char *argv[ARGC_MAX]; + + + if (!fuzzy_filename || !p2packet) { + return (0); + } + + strcpy(directed_filename, "fuzzy_dir/"); + strcat(directed_filename, fuzzy_filename); + + fp = fopen(directed_filename, "r"); + if (!fp) { + printf("Error: problem opening fuzzed file: %s\n", + directed_filename); + return (0); + } + + key_index = 0; + line_count = 0; + while (fgets(input_string, MAX_INPUT_LENGTH, fp)) { + line_count++; + + if (input_string[0] == '\0') { + continue; + } else if (input_string[0] == '#') { + continue; + } + + argv[0] = strtok(input_string, " ,\t\n"); + /* empty line */ + if (argv[0] == NULL) { + continue; + } + p2packet[key_index] = strtoul(argv[0], NULL, 16); + key_index++; + + argc = 1; + for (i=1; i +#include + +#include "ipv4_address.h" + + +/** + * NAME + * ipv4_print_address + * + * SYNOPSIS + * #include "man_ipv4_address.h" + * void + * ipv4_print_address(char *p2label, + * ipv4_address_t *ipv4_src_addr) + * + * DESCRIPTION + * Use this function to printf an IPv4 address in dot-decimal + * notation. + * + * INPUT PARAMETERS + * p2label - label to be printed + * ipv4_src_addr - pointer to the IPv4 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +ipv4_print_address (char *p2label, ipv4_address_t *ipv4_src_addr) +{ + if (!ipv4_src_addr) { + return; + } + + if (p2label) { + printf("%s %d.%d.%d.%d \n", + p2label, + ipv4_src_addr->v4_addr.v4_addr8[3], + ipv4_src_addr->v4_addr.v4_addr8[2], + ipv4_src_addr->v4_addr.v4_addr8[1], + ipv4_src_addr->v4_addr.v4_addr8[0]); + + } else { + printf("IPv4: %d.%d.%d.%d \n", + ipv4_src_addr->v4_addr.v4_addr8[3], + ipv4_src_addr->v4_addr.v4_addr8[2], + ipv4_src_addr->v4_addr.v4_addr8[1], + ipv4_src_addr->v4_addr.v4_addr8[0]); + } + + return; +} + + +/** + * NAME + * ipv4_dot_decimal2digits + * + * SYNOPSIS + * #include "man_ipv4_address.h" + * void + * ipv4_dot_decimal2digits(ipv4_address_t *ipv4_dest_addr, + * char *input) + * + * DESCRIPTION + * This function converts an IPv4 dot-decimal notation, + * such as 192.168.1.1, into binary. + * + * INPUT PARAMETERS + * ipv4_dest_addr - pointer to the IPv4 address + * + * input - pointer to the Ascii IPv4 string + * + * OUTPUT PARAMETERS + * ipv4_dest_addr - updated with the IPv4 address + * + * RETURN VALUE + * None + * + * EXAMPLES + * ipv4_dest_addr->v4_addr.v4_addr8[3] = 192; + * ipv4_dest_addr->v4_addr.v4_addr8[2] = 168; + * ipv4_dest_addr->v4_addr.v4_addr8[1] = 1; + * ipv4_dest_addr->v4_addr.v4_addr8[0] = 1; + * + * If there is an error, the remaining ipv4[i] are 0. + * + */ +void +ipv4_dot_decimal2digits (ipv4_address_t *ipv4_dest_addr, char *input) +{ + char *ptr; + + if (!ipv4_dest_addr) { + return; + } + + ipv4_zero_address(ipv4_dest_addr); + + if (!input) { + return; + } + + /* most significant */ + ipv4_dest_addr->v4_addr.v4_addr8[3] = strtoul(input, &ptr, 10); + if (*ptr != '.') { + return; + } + ptr++; + ipv4_dest_addr->v4_addr.v4_addr8[2] = strtoul(ptr, &ptr, 10); + if (*ptr != '.') { + return; + } + ptr++; + ipv4_dest_addr->v4_addr.v4_addr8[1] = strtoul(ptr, &ptr, 10); + if (*ptr != '.') { + return; + } + ptr++; + ipv4_dest_addr->v4_addr.v4_addr8[0] = strtoul(ptr, NULL, 10); + + return; +} + + diff --git a/dlep_radio_ipv6/ipv4_address.h b/dlep_radio_ipv6/ipv4_address.h new file mode 100644 index 0000000..2532b42 --- /dev/null +++ b/dlep_radio_ipv6/ipv4_address.h @@ -0,0 +1,398 @@ +/*------------------------------------------------------------------ + * ipv4_address.h -- Miscellaneous IPv4 Address Support Routines + * + * July 2008, Bo Berry + * + * Copyright (c) 2009-2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __IPV4_ADDRESS_H__ +#define __IPV4_ADDRESS_H__ + +#include "safe_types.h" +#include "network_order.h" + + + +/* + * IPv4 Address Notations + * + * Dot Decimal: 192.0.2.235 + * + * Hexidecimal: 0xC00002EB + * + * + * Classless Inter-Domain Routing (CIDR) + * + * CIDR ranges for private networks: + * + * Number of Classful Largest + * NAME Address range addresses DESCRIPTION CIDR block + *--------------------------------------------------------------------- + * 24-bit 10.0.0.0 – + * 10.255.255.255 16,777,216 Single Class A 10.0.0.0/8 + * 20-bit 172.16.0.0 – + * 172.31.255.255 1,048,576 16 contiguous Class + * B blocks 172.16.0.0/12 + * 16-bit 192.168.0.0 – + * 192.168.255.255 65,536 Contiguous range of + * 256 class C blocks 192.168.0.0/16 + * + * Link-local addressing + * Address block edfined in RFC3330 for the special use in + * link-local addressing. These addresses are only valid on the link, + * such as a local network segment or point-to-point connection, that + * a host is connected to. + * Range: 169.254.0.0/16 + * + * Local-host (local loopback) + * Addresses within this range are internal to the lost and should + * never appear outside the host computer. Packets sent to this + * address are returned as incoming packets on the same virtual + * network device. + * Range: 127.0.0.0 – 127.255.255.255 (127.0.0.0/8 in CIDR notation) + * + */ + + + +/* + * IPv4 Multicast Addresses: 224.0.0.0 thru 239.255.255.255 + * The multicast addresses from 224.0.0.0 to 224.0.0.255 are reserved for + * multicast routing information. Application programs should use multicast + * addresses outside this range. + */ +#define IPV4_MULTICAST_LOW ( 0xE0000000 ) +#define IPV4_MULTICAST_HIGH ( 0xEF000000 ) + + + +/* + * IPv4 length values + */ +#define IPV4_ADDR_STRING_LEN ( 16 ) +#define IPV4_ADDR_LEN_IN_BITS ( 32 ) +#define IPV4_ADDR_LEN_IN_BYTES ( 4 ) +#define IPV4_ADDR_LEN_IN_LONGS ( 1 ) + + +/* + * IPv4 Address Type (32 bits) + */ +typedef struct ipv4_address_ { + union { + uint8_t v4_addr8[IPV4_ADDR_LEN_IN_BYTES]; + uint32_t v4_addr32; + } v4_addr; +} ipv4_address_t; + + + + +/** + * NAME + * ipv4_put_address + * + * SYNOPSIS + * static inline uint8_t + * *ipv4_put_address(uint8_t *mp, ipv4_address_t *ipv4_src_addr) + * + * DESCRIPTION + * Use this function to copy the source IPv4 address to the + * destination pointer mp. + * + * INPUT PARAMETERS + * mp - destination buffer pointer + * + * ipv4_src_addr - pointer to the source address + * + * OUTPUT PARAMETERS + * mp - updated + * + * RETURN VALUE + * Pointer to the next byte in the destination space, mp + * + */ +static inline uint8_t +*ipv4_put_address (uint8_t *mp, ipv4_address_t *ipv4_src_addr) +{ + if (!ipv4_src_addr || !mp) { + return (mp); + } + + NETWORK_ORDER_PUTLONG(mp, ipv4_src_addr->v4_addr.v4_addr32); + mp = mp + sizeof(ipv4_address_t); + + return (mp); +} + + +/** + * NAME + * ipv4_get_address + * + * SYNOPSIS + * static inline uint8_t + * *ipv4_get_address(ipv4_address_t *ipv4_dest_addr, uint8_t *mp) + * + * DESCRIPTION + * Use this function to copy an IPv4 address from the buffer + * pointer mp to the destination ipv4_dest_addr. + * + * INPUT PARAMETERS + * ipv4_dest_addr - destination pointer to receive the IPv4 address + * + * mp - source pointer to copy from + * + * OUTPUT PARAMETERS + * ipv4_dest_addr - updated + * + * RETURN VALUE + * Pointer to the next byte in the source space, mp + * + */ +static inline uint8_t +*ipv4_get_address (ipv4_address_t *ipv4_dest_addr, uint8_t *mp) +{ + if (!ipv4_dest_addr || !mp) { + return (mp); + } + + NETWORK_ORDER_GETLONG(mp, ipv4_dest_addr->v4_addr.v4_addr32); + mp = mp + sizeof(ipv4_address_t); + + return (mp); +} + + +/** + * NAME + * ipv4_address_is_multicast + * + * SYNOPSIS + * static inline boolean_t + * ipv4_address_is_multicast(ipv4_address_t *ipv4_addr) + * + * DESCRIPTION + * Use this function determine if the IPv4 address is multicast. + * + * INPUT PARAMETERS + * ipv4_addr pointer to the IPv4 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE - yes, it is a multicast address + * FALSE - nope! + * + */ +static inline boolean_t +ipv4_address_is_multicast (ipv4_address_t *ipv4_addr) +{ + ipv4_address_t ipv4_multicast; + + if (!ipv4_addr) { + return (FALSE); + } + + ipv4_multicast.v4_addr.v4_addr32 = + ipv4_addr->v4_addr.v4_addr32 & 0xFF000000; + + if (ipv4_multicast.v4_addr.v4_addr32 >= IPV4_MULTICAST_LOW && + ipv4_multicast.v4_addr.v4_addr32 <= IPV4_MULTICAST_HIGH) { + return (TRUE); + } else { + return (FALSE); + } +} + + +/** + * NAME + * ipv4_address_to_broadcast + * + * SYNOPSIS + * static inline ipv4_address_t + * ipv4_address_to_broadcast(ipv4_address_t *ipv4_addr) + * ipv4_address_t *ipv4_subnet, + * ipv4_address_t *ipv4_broadcast) + * + * DESCRIPTION + * This function returns a broadcast address given an + * IPv4 address and its subnet. + * + * INPUT PARAMETERS + * ipv4_addr - pointer to the IPv4 address + * + * ipv4_subnet - pointer to the IPv4 subnet mask + * + * ipv4_broadcast - pointer to the IPv4 subnet mask + * + * OUTPUT PARAMETERS + * ipv4_broadcast - updated + * + * RETURN VALUE + * IPv4 broadcast address + * + */ +static inline boolean_t +ipv4_address_to_broadcast (ipv4_address_t *ipv4_addr, + ipv4_address_t *ipv4_subnet, + ipv4_address_t *ipv4_broadcast) +{ + if (!ipv4_addr || !ipv4_subnet || ipv4_broadcast) { + return (FALSE); + } + + ipv4_broadcast->v4_addr.v4_addr32 = + (ipv4_addr->v4_addr.v4_addr32 | + (~ipv4_subnet->v4_addr.v4_addr32)); + return (TRUE); +} + + +/** + * NAME + * ipv4_zero_address + * + * SYNOPSIS + * static inline void + * ipv4_zero_address(ipv4_address_t *ipv4_addr) + * + * DESCRIPTION + * This function can be used to zero an IPv4 address. + * + * INPUT PARAMETERS + * ipv4_addr - pointer to the IPV4 address + * + * OUTPUT PARAMETERS + * ipv4_addr - zeroed + * + * RETURN VALUE + * none + * + */ +static inline void +ipv4_zero_address (ipv4_address_t *ipv4_addr) +{ + if (!ipv4_addr) { + return; + } + + ipv4_addr->v4_addr.v4_addr32 = 0; + return; +} + + +/** + * NAME + * ipv4_compare_address + * + * SYNOPSIS + * static inline boolean_t + * ipv4_compare_address(ipv4_address_t ipv4_dest_addr, + * ipv4_address_t ipv4_src_addr) + * + * DESCRIPTION + * This function can be used to compare two IPv4 addresses. + * + * INPUT PARAMETERS + * ipv4_dest_addr - pointer to the destination IPV4 address + * + * ipv4_src_addr - pointer to the source IPV4 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE == equal + * FALSE == not equal + * + */ +static inline boolean_t +ipv4_compare_address (ipv4_address_t *ipv4_dest_addr, + ipv4_address_t *ipv4_src_addr) +{ + if (ipv4_dest_addr->v4_addr.v4_addr32 == + ipv4_src_addr->v4_addr.v4_addr32) { + return (TRUE); + } else { + return (FALSE); + } +} + + + +/** + * NAME + * ipv4_copy_address + * + * SYNOPSIS + * static inline void + * ipv4_copy_address(ipv4_address_t *ipv4_dest_addr, + * ipv4_address_t *ipv4_src_addr) + * + * DESCRIPTION + * Use this function to compare two IPv4 addresses + * + * INPUT PARAMETERS + * ipv4_dest_addr - pointer to the destination IPv4 address + * + * ipv4_src_addr - pointer to the src IPv4 address + * + * OUTPUT PARAMETERS + * ipv4_dest_addr - updated + * + * RETURN VALUE + * none + * + */ +static inline void +ipv4_copy_address (ipv4_address_t *ipv4_dest_addr, + ipv4_address_t *ipv4_src_addr) +{ + if (!ipv4_dest_addr || !ipv4_src_addr) { + return; + } + + ipv4_dest_addr->v4_addr.v4_addr32 = ipv4_src_addr->v4_addr.v4_addr32; + return; +} + + + +extern void +ipv4_print_address(char *p2label, ipv4_address_t *ipv4_src_addr); + +extern void +ipv4_dot_decimal2digits(ipv4_address_t *ipv4_dest_addr, char *input); + +extern void +ipv4_dot_hex2digits(ipv4_address_t *ipv4_dest_addr, char *input); + +#endif + diff --git a/dlep_radio_ipv6/ipv6_address.c b/dlep_radio_ipv6/ipv6_address.c new file mode 100644 index 0000000..14c4dd0 --- /dev/null +++ b/dlep_radio_ipv6/ipv6_address.c @@ -0,0 +1,211 @@ +/*---------------------------------------------------------------------- + * ipv6_address.c -- Miscellaneous IPv6 Address Support Routines + * + * June 2009, Bo Berry + * + * Copyright (c) 2009-2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include + +#include "ipv6_address.h" + + +/** + * NAME + * ipv6_print_address + * + * SYNOPSIS + * #include "man_ipv6_address.h" + * void + * ipv6_print_address(char *p2label, + * ipv6_address_t *ipv6_src_addr) + * + * DESCRIPTION + * Use this function to print an IPv6 address + * + * INPUT PARAMETERS + * p2label - label to be printed + * + * ipv6_src_addr - pointer to the IPv6 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +ipv6_print_address (char *p2label, ipv6_address_t *ipv6_src_addr) +{ + if (!ipv6_src_addr) { + return; + } + char str[130]; + if (p2label) { + printf("%s %04x:%04x:%04x:%04x%04x:%04x:%04x:%04x \n", + p2label, + ipv6_src_addr->v6_addr.v6_addr16[0], + ipv6_src_addr->v6_addr.v6_addr16[1], + ipv6_src_addr->v6_addr.v6_addr16[2], + ipv6_src_addr->v6_addr.v6_addr16[3], + ipv6_src_addr->v6_addr.v6_addr16[4], + ipv6_src_addr->v6_addr.v6_addr16[5], + ipv6_src_addr->v6_addr.v6_addr16[6], + ipv6_src_addr->v6_addr.v6_addr16[7]); + + + } else { + sprintf(str,"IPv6: %02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x\n", + ipv6_src_addr->v6_addr.v6_addr8[0], + ipv6_src_addr->v6_addr.v6_addr8[1], + ipv6_src_addr->v6_addr.v6_addr8[2], + ipv6_src_addr->v6_addr.v6_addr8[3], + ipv6_src_addr->v6_addr.v6_addr8[4], + ipv6_src_addr->v6_addr.v6_addr8[5], + ipv6_src_addr->v6_addr.v6_addr8[6], + ipv6_src_addr->v6_addr.v6_addr8[7], + ipv6_src_addr->v6_addr.v6_addr8[8], + ipv6_src_addr->v6_addr.v6_addr8[9], + ipv6_src_addr->v6_addr.v6_addr8[10], + ipv6_src_addr->v6_addr.v6_addr8[11], + ipv6_src_addr->v6_addr.v6_addr8[12], + ipv6_src_addr->v6_addr.v6_addr8[13], + ipv6_src_addr->v6_addr.v6_addr8[14], + ipv6_src_addr->v6_addr.v6_addr8[15]); + } +#if 0 + printf("ipv6_print_address expanded v6 is %s\n",str); +#endif + + return; +} + +void expand_ipv6_addr(char ipv6_addr[],ipv6_address_t *ipv6_src_addr) +{ + + sprintf(ipv6_addr,"%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", + ipv6_src_addr->v6_addr.v6_addr8[0], + ipv6_src_addr->v6_addr.v6_addr8[1], + ipv6_src_addr->v6_addr.v6_addr8[2], + ipv6_src_addr->v6_addr.v6_addr8[3], + ipv6_src_addr->v6_addr.v6_addr8[4], + ipv6_src_addr->v6_addr.v6_addr8[5], + ipv6_src_addr->v6_addr.v6_addr8[6], + ipv6_src_addr->v6_addr.v6_addr8[7], + ipv6_src_addr->v6_addr.v6_addr8[8], + ipv6_src_addr->v6_addr.v6_addr8[9], + ipv6_src_addr->v6_addr.v6_addr8[10], + ipv6_src_addr->v6_addr.v6_addr8[11], + ipv6_src_addr->v6_addr.v6_addr8[12], + ipv6_src_addr->v6_addr.v6_addr8[13], + ipv6_src_addr->v6_addr.v6_addr8[14], + ipv6_src_addr->v6_addr.v6_addr8[15]); + + printf("expanded v6 is %s\n",ipv6_addr); + +} + + + + + +/** + * NAME + * ipv6_ascii2digits + * + * SYNOPSIS + * #include "man_ipv6_address.h" + * void + * ipv6_ascii2digits(ipv6_address_t *ipv6_dest_addr, + * char *input) + * + * DESCRIPTION + * This function converts an ascii notation, + * 11111111:22222222:33333333:44444444 + * IPv6 address into binary. + * + * INPUT PARAMETERS + * ipv6_dest_addr - pointer to the IPv6 address + * + * input - pointer to the string + * + * OUTPUT PARAMETERS + * ipv6_dest_addr - updated + * + * RETURN VALUE + * none + * + * EXAMPLES + * ipv6_dest_addr->v6_addr.v6_addr32[0] = 11111111; + * ipv6_dest_addr->v6_addr.v6_addr32[1] = 22222222; + * ipv6_dest_addr->v6_addr.v6_addr32[2] = 33333333; + * ipv6_dest_addr->v6_addr.v6_addr32[3] = 44444444; + * + * If there is an error, the remaining ipv6[i] are 0. + * + */ +void +ipv6_ascii2digits (ipv6_address_t *ipv6_dest_addr, char *input) +{ + uint32_t i; + char *ptr; + +#if 0 + printf("input v6 for ipv6_ascii2digits %s\n",input); +#endif + + if (!ipv6_dest_addr) { + return; + } + + /* zero the users ipv6 */ + ipv6_zero_address(ipv6_dest_addr); + + if (!input) { + return; + } + + ipv6_dest_addr->v6_addr.v6_addr16[0] = strtoul(input, &ptr, 16); + if (*ptr != ':') { + return; + } + ptr++; + + for (i=1; i<7; i++) { + ipv6_dest_addr->v6_addr.v6_addr16[i] = strtoul(ptr, &ptr, 16); + if (*ptr != ':') { + return; + } + ptr++; + } + ipv6_dest_addr->v6_addr.v6_addr16[7] = strtoul(ptr, NULL, 16); + + return; +} + diff --git a/dlep_radio_ipv6/ipv6_address.h b/dlep_radio_ipv6/ipv6_address.h new file mode 100644 index 0000000..92fdaf6 --- /dev/null +++ b/dlep_radio_ipv6/ipv6_address.h @@ -0,0 +1,478 @@ +/*------------------------------------------------------------------ + * ipv6_address.h -- Miscellaneous IPv6 Address Support Routines + * + * July 2008, Bo Berry + * + * Copyright (c) 2009-2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __IPV6_ADDRESS_H__ +#define __IPV6_ADDRESS_H__ + +#include "safe_types.h" +#include "network_order.h" + + +/* + * (few) IPv6 Address Definition + * + * 2001:0db8:3c4d:0015:0000:0000:abcd:ef12 + * ______________|____|___________________ + * global prefix subnet Interface ID + * + * IPv6 Address Ranges + * IPv6 Prefix Allocation + * -------------------------------------- + * 0000::/8 Reserved by IETF + * 2000::/3 Global Unicast + * FC00::/7 Unique Local Unicast + * FE80::/10 Link Local Unicast + * FF00::/8 Multicast + */ + + +/* defined for 32-bit overlay */ +#define IPV6_GLOBAL_PREFIX ( 0x20000000 ) /* 2000::/3 */ +#define IPV6_MULTICAST_PREFIX ( 0xFF000000 ) /* ff00::/8 */ +#define IPV6_UNIQUE_LOCAL_PREFIX ( 0xFC000000 ) /* fc00::/7 */ +#define IPV6_LINK_LOCAL_PREFIX ( 0xFE800000 ) /* fe80::/1 */ +#define IPV6_LINK_LOCAL_LOOPBACK_SUFFIX ( 0x0001 ) /* ::1/128 */ + + +/* + * IPv6 length values and prefixes + * + * http://www.iana.org/assignments/ipv6-multicast-addresses/ + * http://en.wikipedia.org/wiki/IPv6 + */ +#define IPV6_ADDR_STRING_LEN ( 42 ) +#define IPV6_ADDR_LEN_IN_BITS ( 128 ) +#define IPV6_ADDR_LEN_IN_BYTES ( 16 ) +#define IPV6_ADDR_LEN_IN_SHORTS ( 8 ) +#define IPV6_ADDR_LEN_IN_LONGS ( 4 ) + + + +/* + * IPv6 Address Type (128 bits) + */ +typedef struct ipv6_address_ { + union { + uint8_t v6_addr8[IPV6_ADDR_LEN_IN_BYTES]; + uint16_t v6_addr16[IPV6_ADDR_LEN_IN_SHORTS]; + uint32_t v6_addr32[IPV6_ADDR_LEN_IN_LONGS]; + } v6_addr; +} ipv6_address_t; + + + +/** + * NAME + * ipv6_put_address + * + * SYNOPSIS + * static inline uint8_t + * *ipv6_put_address(uint8_t *mp, ipv6_address_t *ipv6_src_addr) + * + * DESCRIPTION + * Use this function to copy the source IPv6 address to the + * destination pointer mp. + * + * INPUT PARAMETERS + * mp - destination buffer pointer + * + * ipv6_src_addr - ponter to the source IPv6 address + * + * OUTPUT PARAMETERS + * mp - updated + * + * RETURN VALUE + * Pointer to the next byte in the destination space, mp + * + */ +//vinod + +static inline uint8_t +*ipv6_put_address (uint8_t *mp, ipv6_address_t *ipv6_src_addr) +{ + if (!ipv6_src_addr || !mp) { + return (mp); + } + + NETWORK_ORDER_PUTSHORT(mp, ipv6_src_addr->v6_addr.v6_addr16[0]); + mp = mp + sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(mp, ipv6_src_addr->v6_addr.v6_addr16[1]); + mp = mp + sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(mp, ipv6_src_addr->v6_addr.v6_addr16[2]); + mp = mp + sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(mp, ipv6_src_addr->v6_addr.v6_addr16[3]); + mp = mp + sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(mp, ipv6_src_addr->v6_addr.v6_addr16[4]); + mp = mp + sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(mp, ipv6_src_addr->v6_addr.v6_addr16[5]); + mp = mp + sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(mp, ipv6_src_addr->v6_addr.v6_addr16[6]); + mp = mp + sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(mp, ipv6_src_addr->v6_addr.v6_addr16[7]); + mp = mp + sizeof(uint16_t); + + return (mp); +} + + +/** + * NAME + * ipv6_get_address + * + * SYNOPSIS + * static inline uint8_t + * *ipv6_get_address(ipv6_address_t *ipv6_dest_addr, uint8_t *mp) + * + * DESCRIPTION + * Use this function to copy an IPv6 address from the buffer + * pointer mp to the destination ipv6_dest_addr. + * + * INPUT PARAMETERS + * ipv6_dest_addr - destination pointer to receive the IPv6 address + * + * mp - source pointer to copy from + * + * OUTPUT PARAMETERS + * ipv6_dest_addr - updated + * + * RETURN VALUE + * Pointer to the next byte in the source space, mp + * + */ +static inline uint8_t +*ipv6_get_address (ipv6_address_t *ipv6_dest_addr, uint8_t *mp) +{ + if (!ipv6_dest_addr || !mp) { + return (mp); + } + + NETWORK_ORDER_GETLONG(mp, ipv6_dest_addr->v6_addr.v6_addr16[0]); + mp = mp + sizeof(uint16_t); + + NETWORK_ORDER_GETLONG(mp, ipv6_dest_addr->v6_addr.v6_addr16[1]); + mp = mp + sizeof(uint16_t); + + NETWORK_ORDER_GETLONG(mp, ipv6_dest_addr->v6_addr.v6_addr16[2]); + mp = mp + sizeof(uint16_t); + + NETWORK_ORDER_GETLONG(mp, ipv6_dest_addr->v6_addr.v6_addr16[3]); + mp = mp + sizeof(uint16_t); + + NETWORK_ORDER_GETLONG(mp, ipv6_dest_addr->v6_addr.v6_addr16[4]); + mp = mp + sizeof(uint16_t); + + NETWORK_ORDER_GETLONG(mp, ipv6_dest_addr->v6_addr.v6_addr16[5]); + mp = mp + sizeof(uint16_t); + + NETWORK_ORDER_GETLONG(mp, ipv6_dest_addr->v6_addr.v6_addr16[6]); + mp = mp + sizeof(uint16_t); + + NETWORK_ORDER_GETLONG(mp, ipv6_dest_addr->v6_addr.v6_addr16[7]); + mp = mp + sizeof(uint16_t); + + return (mp); +} + +/** + * NAME + * ipv6_zero_address + * + * SYNOPSIS + * static inline void + * ipv6_zero_address(ipv6_address_t *ipv6_dest_addr) + * + * DESCRIPTION + * Use this function to zero an IPv6 address + * A zero address is reserved by the IETF. + * + * INPUT PARAMETERS + * ipv6_dest_addr - pointer to the IPv6 address + * + * OUTPUT PARAMETERS + * ipv6_dest_addr - zeroed + * + * RETURN VALUE + * none + * + */ +static inline void +ipv6_zero_address (ipv6_address_t *ipv6_dest_addr) +{ + if (!ipv6_dest_addr) { + return; + } + + ipv6_dest_addr->v6_addr.v6_addr32[0] = 0; + ipv6_dest_addr->v6_addr.v6_addr32[1] = 0; + ipv6_dest_addr->v6_addr.v6_addr32[2] = 0; + ipv6_dest_addr->v6_addr.v6_addr32[3] = 0; + return; +} + + +/** + * NAME + * ipv6_address_is_global + * + * SYNOPSIS + * static inline boolean_t + * ipv6_address_is_global(ipv6_address_t *ipv6_src_addr) + * + * DESCRIPTION + * Use this function to determine if the IPv6 address is global. + * 2000::/3 Global Unicast + * + * INPUT PARAMETERS + * ipv6_src_addr - pointer to the IPv6 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE - yes + * FALSE - nope! + * + */ +static inline boolean_t +ipv6_address_is_global (ipv6_address_t *ipv6_src_addr) +{ + + if (IPV6_GLOBAL_PREFIX == + (ipv6_src_addr->v6_addr.v6_addr32[0] & IPV6_GLOBAL_PREFIX)) { + return (TRUE); + } else { + return (FALSE); + } +} + + +/** + * NAME + * ipv6_address_is_multicast + * + * SYNOPSIS + * static inline boolean_t + * ipv6_address_is_multicast(ipv6_address_t *ipv6_src_addr) + * + * DESCRIPTION + * Use this function to determine if the IPv6 address is multicast. + * FF00::/8 Multicast + * + * INPUT PARAMETERS + * ipv6_src_addr - pointer to the IPv6 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE - yes + * FALSE - nope! + * + */ +static inline boolean_t +ipv6_address_is_multicast (ipv6_address_t *ipv6_src_addr) +{ + + if (IPV6_MULTICAST_PREFIX == + (ipv6_src_addr->v6_addr.v6_addr16[0] & IPV6_MULTICAST_PREFIX)) { + return (TRUE); + } else { + return (FALSE); + } +} + + +/** + * NAME + * ipv6_address_is_linklocal + * + * SYNOPSIS + * static inline boolean_t + * ipv6_address_is_linklocal(ipv6_address_t *ipv6_src_addr) + * + * DESCRIPTION + * Use this function to determine if the IPv6 address is link local. + * FE80::/10 Link Local Unicast + * + * INPUT PARAMETERS + * ipv6_src_addr - pointer to the IPv6 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE - yes + * FALSE - nope! + * + */ +static inline boolean_t +ipv6_address_is_linklocal (ipv6_address_t *ipv6_src_addr) +{ + if (IPV6_LINK_LOCAL_PREFIX == + (ipv6_src_addr->v6_addr.v6_addr16[0] & IPV6_LINK_LOCAL_PREFIX)) { + return (TRUE); + } else { + return (FALSE); + } +} + + +/** + * NAME + * static inline boolean_t + * ipv6_compare_address(ipv6_address_t *ipv6_dest_addr, + * ipv6_address_t *ipv6_src_addr) + * + * DESCRIPTION + * Use this function to compare two IPv6 addresses + * + * INPUT PARAMETERS + * ipv6_dest_addr - pointer to the destination IPv6 address + * + * ipv6_src_addr - pointer to the src IPv6 address + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE - addresses equal + * FALSE - not equal + * + */ +static inline boolean_t +ipv6_compare_address (ipv6_address_t *ipv6_dest_addr, + ipv6_address_t *ipv6_src_addr) +{ + if (!ipv6_dest_addr || !ipv6_src_addr) { + return (FALSE); + } + + if (ipv6_dest_addr->v6_addr.v6_addr16[0] == + ipv6_src_addr->v6_addr.v6_addr16[0] && + ipv6_dest_addr->v6_addr.v6_addr16[1] == + ipv6_src_addr->v6_addr.v6_addr16[1] && + ipv6_dest_addr->v6_addr.v6_addr16[2] == + ipv6_src_addr->v6_addr.v6_addr16[2] && + ipv6_dest_addr->v6_addr.v6_addr16[3] == + ipv6_src_addr->v6_addr.v6_addr16[3] && + ipv6_dest_addr->v6_addr.v6_addr16[4] == + ipv6_src_addr->v6_addr.v6_addr16[4] && + ipv6_dest_addr->v6_addr.v6_addr16[5] == + ipv6_src_addr->v6_addr.v6_addr16[5] && + ipv6_dest_addr->v6_addr.v6_addr16[6] == + ipv6_src_addr->v6_addr.v6_addr16[6] && + ipv6_dest_addr->v6_addr.v6_addr16[7] == + ipv6_src_addr->v6_addr.v6_addr16[7]) { + + return (TRUE); + } else { + return (FALSE); + } +} + + +/** + * NAME + * ipv6_copy_address + * + * SYNOPSIS + * static inline void + * ipv6_copy_address(ipv6_address_t *ipv6_dest_addr, + * ipv6_address_t *ipv6_src_addr) + * + * DESCRIPTION + * Use this function to compare two IPv6 addresses + * + * INPUT PARAMETERS + * ipv6_dest_addr - pointer to the destination IPv6 address + * + * ipv6_src_addr - pointer to the src IPv6 address + * + * OUTPUT PARAMETERS + * ipv6_dest_addr - updated + * + * RETURN VALUE + * none + * + */ +static inline void +ipv6_copy_address (ipv6_address_t *ipv6_dest_addr, + ipv6_address_t *ipv6_src_addr) +{ + if (!ipv6_dest_addr || !ipv6_src_addr) { + return; + } + + /* Due to byter ordering issue ,I have added v6 addr in following way */ + + int i; + ipv6_dest_addr->v6_addr.v6_addr16[0] = + ipv6_src_addr->v6_addr.v6_addr16[0]; + ipv6_dest_addr->v6_addr.v6_addr16[1] = + ipv6_src_addr->v6_addr.v6_addr16[1]; + ipv6_dest_addr->v6_addr.v6_addr16[2] = + ipv6_src_addr->v6_addr.v6_addr16[2]; + ipv6_dest_addr->v6_addr.v6_addr16[3] = + ipv6_src_addr->v6_addr.v6_addr16[3]; + ipv6_dest_addr->v6_addr.v6_addr16[4] = + ipv6_src_addr->v6_addr.v6_addr16[4]; + ipv6_dest_addr->v6_addr.v6_addr16[5] = + ipv6_src_addr->v6_addr.v6_addr16[5]; + ipv6_dest_addr->v6_addr.v6_addr16[6] = + ipv6_src_addr->v6_addr.v6_addr16[6]; + ipv6_dest_addr->v6_addr.v6_addr16[7] = + ipv6_src_addr->v6_addr.v6_addr16[7]; +#if 0 + for(i = 0; i<=7 ; i++) + printf("ipv6_copied_address is %x\n",ipv6_src_addr->v6_addr.v6_addr16[i]); +#endif + + + return; +} + + + +extern void +ipv6_print_address(char *p2label, ipv6_address_t *ipv6_src_addr); + +extern void +ipv6_ascii2digits(ipv6_address_t *ipv6_dest_addr, char *input); + +#endif + diff --git a/dlep_radio_ipv6/mac_address.c b/dlep_radio_ipv6/mac_address.c new file mode 100644 index 0000000..f6fab64 --- /dev/null +++ b/dlep_radio_ipv6/mac_address.c @@ -0,0 +1,169 @@ +/*---------------------------------------------------------------------- + * mac_address.c -- MAC Address Support Routines + * + * January 2009, Bo Berry + * + * Copyright (c) 2009-2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#include +#include + +#include "mac_address.h" + + +/** + * NAME + * mac_print_address + * + * SYNOPSIS + * #include "man_mac_address.h" + * void + * mac_print_address (char *p2label, uint8_t mac[]) + * + * DESCRIPTION + * This function can be used to print the MAC address. If + * the p2label is non-NULL, the label prefixes the MAC. + * + * INPUT PARAMETERS + * p2label - Pointer to the label + * + * mac - Pointer to the mac address array + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +mac_print_address (char *p2label, uint8_t mac[]) +{ + if (p2label) { + printf("%s %02x:%02x:%02x:%02x:%02x:%02x \n", + p2label, + mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + + } else { + printf("MAC Address: %02x:%02x:%02x:%02x:%02x:%02x \n", + mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + } + return; +} + + +/** + * NAME + * mac_ascii2digits + * + * SYNOPSIS + * #include "man_mac_address.h" + * void + * mac_ascii2digits(uint8_t mac_dest_addr[], char *input) + * + * DESCRIPTION + * This function converts an ascii notation, 12:34:56:78:90:ab + * MAC address into an array. + * + * INPUT PARAMETERS + * mac_dest_addr - Pointer to the mac address array + * + * input - pointer the string + * + * OUTPUT PARAMETERS + * mac_dest_addr - updated + * + * RETURN VALUE + * none + * + * EXAMPLES + * mac_dest_addr[0] = 12; + * mac_dest_addr[1] = 34; + * mac_dest_addr[2] = 56; + * mac_dest_addr[3] = 78; + * mac_dest_addr[4] = 90; + * mac_dest_addr[5] = ab; + * + * If there is an error, the remaining mac[i] are 0. + * + */ +void +mac_ascii2digits (uint8_t mac_dest_addr[], char *input) +{ + uint32_t i; + uint8_t digit; + uint32_t maci; + + if (!mac_dest_addr) { + return; + } + + /* zero the users mac array */ + for (i=0; i= '0' && input[i] <='9') { + digit = (input[i] - '0') * (16); + } else if (input[i] >= 'a' && input[i] <='f') { + digit = (input[i] - 'a' + 10) * (16); + } else if (input[i] >= 'A' && input[i] <='F') { + digit = (input[i] - 'A' + 10) * (16); + } else { + return; + } + + i++; + if (input[i] >= '0' && input[i] <='9') { + digit += (input[i] - '0'); + } else if (input[i] >= 'a' && input[i] <='f') { + digit += (input[i] - 'a' + 10); + } else if (input[i] >= 'A' && input[i] <='F') { + digit += (input[i] - 'A' + 10); + } else { + return; + } + + mac_dest_addr[maci] = digit; + + i++; + if (input[i] != ':') { + return; + } + + maci++; + } + + return; +} + diff --git a/dlep_radio_ipv6/mac_address.h b/dlep_radio_ipv6/mac_address.h new file mode 100644 index 0000000..92e2f38 --- /dev/null +++ b/dlep_radio_ipv6/mac_address.h @@ -0,0 +1,361 @@ +/*---------------------------------------------------------------------- + * mac_address.h + * + * January 2009, Bo Berry + * + * Copyright (c) 2009-2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __MAC_ADDRESS_H__ +#define __MAC_ADDRESS_H__ + +#include "safe_types.h" +#include "network_order.h" + + +/* + * MAC in string Dot Notation: 11:22:33:44:55:66 + */ +#define MAC_DOT_LEN_IN_BYTES ( 18 ) + +/* + * MAC in byte array[] + */ +#define MAC_ADDR_LEN_IN_BYTES ( 6 ) + + + +/** + * NAME + * mac_put_address + * + * SYNOPSIS + * static inline uint8_t + * *mac_put_address(uint8_t *mp, uint8_t *mac_src_addr) + * + * DESCRIPTION + * Use this function to copy the source MAC address to + * the destination pointer mp, in network order. + * + * INPUT PARAMETERS + * mp - destination buffer pointer + * + * mac_src_addr - pointer to the source mac address, 6-bytes + * + * OUTNPUT PARAMETERS + * mp - updated + * + * RETURN VALUE + * Pointer to the next byte in the destination space, mp + * + */ +static inline uint8_t +*mac_put_address (uint8_t *mp, uint8_t *mac_src_addr) +{ + if (!mac_src_addr || !mp) { + return (mp); + } + + NETWORK_ORDER_PUTBYTE(mp, mac_src_addr[0]); + mp++; + NETWORK_ORDER_PUTBYTE(mp, mac_src_addr[1]); + mp++; + NETWORK_ORDER_PUTBYTE(mp, mac_src_addr[2]); + mp++; + NETWORK_ORDER_PUTBYTE(mp, mac_src_addr[3]); + mp++; + NETWORK_ORDER_PUTBYTE(mp, mac_src_addr[4]); + mp++; + NETWORK_ORDER_PUTBYTE(mp, mac_src_addr[5]); + mp++; + + return (mp); +} + + +/** + * NAME + * mac_get_address + * + * SYNOPSIS + * static inline uint8_t + * *mac_get_address(uint8_t *mac_dest_addr, uint8_t *mp) + * + * DESCRIPTION + * Use this function to copy a network ordered MAC address from + * the pointer mp to the destination array mac_dest_addr[]. + * + * INPUT PARAMETERS + * mac_dest_addr - pointer to the destination mac address, 6-bytes + * + * mp - source pointer to copy from + * + * OUTPUT PARAMETERS + * mac_dest_addr - updated + * + * RETURN VALUE + * Pointer to the next byte in the source space, mp + * + */ +static inline uint8_t +*mac_get_address (uint8_t *mac_dest_addr, uint8_t *mp) +{ + if (!mac_dest_addr || !mp) { + return (mp); + } + + NETWORK_ORDER_GETBYTE(mp, mac_dest_addr[0]); + mp++; + NETWORK_ORDER_GETBYTE(mp, mac_dest_addr[1]); + mp++; + NETWORK_ORDER_GETBYTE(mp, mac_dest_addr[2]); + mp++; + NETWORK_ORDER_GETBYTE(mp, mac_dest_addr[3]); + mp++; + NETWORK_ORDER_GETBYTE(mp, mac_dest_addr[4]); + mp++; + NETWORK_ORDER_GETBYTE(mp, mac_dest_addr[5]); + mp++; + + return (mp); +} + + +/** + * NAME + * mac_zero_address + * + * SYNOPSIS + * static inline void + * mac_zero_address(uint8_t *mac_src_addr) + * + * DESCRIPTION + * Use this function to zero a MAC address. + * + * INPUT PARAMETERS + * mac_src_addr - pointer to the source mac address, 6-bytes + * + * OUTPUT PARAMETERS + * mac_src_addr - updated + * + * RETURN VALUE + * None + * + */ +static inline void +mac_zero_address (uint8_t *mac_src_addr) +{ + if (!mac_src_addr) { + return; + } + + mac_src_addr[0] = 0; + mac_src_addr[1] = 0; + mac_src_addr[2] = 0; + mac_src_addr[3] = 0; + mac_src_addr[4] = 0; + mac_src_addr[5] = 0; + return; +} + + +/** + * NAME + * mac_set_to_broadcast + * + * SYNOPSIS + * static inline void + * mac_set_to_broadcast(uint8_t *mac_src_addr) + * + * DESCRIPTION + * Use this function to set the MAC address to the broadcast address. + * + * INPUT PARAMETERS + * mac_src_addr - pointer to the source mac address, 6-bytes + * + * OUTPUT PARAMETERS + * mac_src_addr - updated + * + * RETURN VALUE + * None + * + */ +static inline void +mac_set_to_broadcast (uint8_t *mac_src_addr) +{ + if (!mac_src_addr) { + return; + } + + mac_src_addr[0] = 0xFF; + mac_src_addr[1] = 0xFF; + mac_src_addr[2] = 0xFF; + mac_src_addr[3] = 0xFF; + mac_src_addr[4] = 0xFF; + mac_src_addr[5] = 0xFF; + return; +} + + +/** + * NAME + * mac_is_broadcast + * + * SYNOPSIS + * static inline boolean_t + * mac_is_broadcast(uint8_t *mac_src_addr) + * + * DESCRIPTION + * Use this function to determine if this is a broadcast MAC address + * + * INPUT PARAMETERS + * mac_src_addr - pointer to the source mac address, 6-bytes + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE - yes + * FALSE - no + * + */ +static inline boolean_t +mac_is_broadcast (uint8_t *mac_src_addr) +{ + if (!mac_src_addr) { + return (FALSE); + } + + if (mac_src_addr[0] == 0xFF && + mac_src_addr[1] == 0xFF && + mac_src_addr[2] == 0xFF && + mac_src_addr[3] == 0xFF && + mac_src_addr[4] == 0xFF && + mac_src_addr[5] == 0xFF) { + return (TRUE); + } else { + return (FALSE); + } +} + + +/** + * NAME + * mac_compare_address + * + * SYNOPSIS + * static inline boolean_t + * mac_compare_address(uint8_t *mac_dest_addr, + * uint8_t *mac_src_addr) + * + * DESCRIPTION + * Use this function to compare two MAC addresses + * + * INPUT PARAMETERS + * mac_src_addr - pointer to the source mac address, 6-bytes + * + * mac_dest_addr - pointer to the destination mac address, 6-bytes + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE - addresses equal + * FALSE - not equal + * + */ +static inline boolean_t +mac_compare_address (uint8_t *mac_dest_addr, + uint8_t *mac_src_addr) +{ + if (!mac_dest_addr || !mac_src_addr) { + return (FALSE); + } + + if (mac_dest_addr[0] == mac_src_addr[0] && + mac_dest_addr[1] == mac_src_addr[1] && + mac_dest_addr[2] == mac_src_addr[2] && + mac_dest_addr[3] == mac_src_addr[3] && + mac_dest_addr[4] == mac_src_addr[4] && + mac_dest_addr[5] == mac_src_addr[5]) { + return (TRUE); + } else { + return (FALSE); + } +} + + +/** + * NAME + * mac_copy_address + * + * SYNOPSIS + * static inline void + * mac_copy_address(uint8_t *mac_dest_addr, + * uint8_t *mac_src_addr) + * + * DESCRIPTION + * Use this function to copy a MAC address + * + * INPUT PARAMETERS + * mac_dest_addr - pointer to the destination mac address, 6-bytes + * + * mac_src_addr - pointer to the source mac address, 6-bytes + * + * OUTPUT PARAMETERS + * mac_dest_addr - updated + * + * RETURN VALUE + * none + * + */ +static inline void +mac_copy_address (uint8_t *mac_dest_addr, + uint8_t *mac_src_addr) +{ + if (!mac_dest_addr || !mac_src_addr) { + return; + } + + mac_dest_addr[0] = mac_src_addr[0]; + mac_dest_addr[1] = mac_src_addr[1]; + mac_dest_addr[2] = mac_src_addr[2]; + mac_dest_addr[3] = mac_src_addr[3]; + mac_dest_addr[4] = mac_src_addr[4]; + mac_dest_addr[5] = mac_src_addr[5]; + return; +} + + + +extern void +mac_print_address(char *p2label, uint8_t mac[]); + +extern void +mac_ascii2digits(uint8_t mac_dest_addr[], char *input); + +#endif + diff --git a/dlep_radio_ipv6/network_order.h b/dlep_radio_ipv6/network_order.h new file mode 100644 index 0000000..4506afa --- /dev/null +++ b/dlep_radio_ipv6/network_order.h @@ -0,0 +1,235 @@ +/*---------------------------------------------------------------------- + * network_order.h -- macros to deal with byte order + * + * January 2009, Bo Berry + * + * Copyright (c) 2009-2011 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __NETWORK_ORDER_H__ +#define __NETWORK_ORDER_H__ + +#include + + +/* + * Network Order is the transmission of the most significant byte first, + * or big-endian. + * http://en.wikipedia.org/wiki/Endianness + * + * Little-Endian architectures, the low-order byte of a word is stored + * in the lowest address in memory. + * + * Big-Endian architectures, the high-order byte of a word is stored + * in the lowest address in memory. + * + * Porting, it may be necessary to modify these functions based upon your + * platform. + * + * 16-bits + * LSB ----------------> MSB Big Endian + * | Byte1 | Byte0 | + * MSB <---------------- LSB Little Endian + * + * 32-bits + * LSB --------------------------------> MSB Big Endian + * | Byte3 | Byte2 | Byte1 | Byte0 | + * MSB <-------------------------------- LSB Little Endian + * + */ + +/* + * Define the macro for processor order to network order + * + * PowerPC, 680x0 + * #define __BIG_ENDIAN__ + * #define __BIG_ENDIAN_TO_FROM_NETWORK__ + * + * x86, x64 + * Note: MAC gcc defines the __LITTLE_ENDIAN__ macro + * #define __LITTLE_ENDIAN__ + * #define __LITTLE_ENDIAN_TO_FROM_NETWORK__ + */ + +#define __LITTLE_ENDIAN_TO_FROM_NETWORK__ + + +/* 8-bit moves */ +#undef NETWORK_ORDER_GETCHAR +#define NETWORK_ORDER_GETCHAR(ptr, value) { \ + (value) = *((char *)ptr); \ +} + +#undef NETWORK_ORDER_PUTCHAR +#define NETWORK_ORDER_PUTCHAR(ptr, value) { \ + *((char *)ptr) = (char)(value); \ +} + + +/* unsigned 8-bit moves */ +#undef NETWORK_ORDER_GETBYTE +#define NETWORK_ORDER_GETBYTE(ptr, value) { \ + (value) = *((uint8_t *)ptr); \ +} + +#undef NETWORK_ORDER_PUTBYTE +#define NETWORK_ORDER_PUTBYTE(ptr, value) { \ + *((uint8_t *)ptr) = (uint8_t)(value); \ +} + + +#if defined __LITTLE_ENDIAN_TO_FROM_NETWORK__ + +/* 16-bit moves */ +#undef NETWORK_ORDER_GETSHORT +#define NETWORK_ORDER_GETSHORT(ptr, value) { \ + (value) = *((uint8_t *)ptr + 0); \ + (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 1); \ +} + + +#undef NETWORK_ORDER_PUTSHORT +#define NETWORK_ORDER_PUTSHORT(ptr, value) { \ + *((uint8_t *)ptr + 0) = (uint8_t)((value) >> 8); \ + *((uint8_t *)ptr + 1) = (uint8_t)(value); \ +} + + +/* 32-bit moves */ +#undef NETWORK_ORDER_GETLONG +#define NETWORK_ORDER_GETLONG(ptr, value) { \ + (value) = *((uint8_t *)ptr + 0); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 1); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 2); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 3); \ +} + +#undef NETWORK_ORDER_PUTLONG +#define NETWORK_ORDER_PUTLONG(ptr, value) { \ + *((uint8_t *)ptr + 0) = (uint8_t) ((value) >> 24); \ + *((uint8_t *)ptr + 1) = (uint8_t) ((value) >> 16); \ + *((uint8_t *)ptr + 2) = (uint8_t) ((value) >> 8); \ + *((uint8_t *)ptr + 3) = (uint8_t) (value); \ +} + + + +/* 64-bit moves */ +#undef NETWORK_ORDER_GETLLONG +#define NETWORK_ORDER_GETLLONG(ptr, value) { \ + (value) = *((uint8_t *)ptr + 0); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 1); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 2); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 3); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 4); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 5); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 6); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 7); \ +} + +#undef NETWORK_ORDER_PUTLLONG +#define NETWORK_ORDER_PUTLLONG(ptr, value) { \ + *((uint8_t *)ptr + 0) = (uint8_t) ((value) >> 56); \ + *((uint8_t *)ptr + 1) = (uint8_t) ((value) >> 48); \ + *((uint8_t *)ptr + 2) = (uint8_t) ((value) >> 40); \ + *((uint8_t *)ptr + 3) = (uint8_t) ((value) >> 32); \ + *((uint8_t *)ptr + 4) = (uint8_t) ((value) >> 24); \ + *((uint8_t *)ptr + 5) = (uint8_t) ((value) >> 16); \ + *((uint8_t *)ptr + 6) = (uint8_t) ((value) >> 8); \ + *((uint8_t *)ptr + 7) = (uint8_t) (value); \ +} + + +#elif defined __BIG_ENDIAN_TO_FROM_NETWORK__ + +/* 16-bit moves */ +#undef NETWORK_ORDER_GETSHORT +#define NETWORK_ORDER_GETSHORT(ptr, value) { \ + (value) = *((uint8_t *)ptr + 1); \ + (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 0); \ +} + + +#undef NETWORK_ORDER_PUTSHORT +#define NETWORK_ORDER_PUTSHORT(ptr, value) { \ + *((uint8_t *)ptr + 1) = (uint8_t)((value) >> 8); \ + *((uint8_t *)ptr + 0) = (uint8_t)(value); \ +} + + +/* 32-bit moves */ +#undef NETWORK_ORDER_GETLONG +#define NETWORK_ORDER_GETLONG(ptr, value) { \ + (value) = *((uint8_t *)ptr + 3); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 2); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 1); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 0); \ +} + +#undef NETWORK_ORDER_PUTLONG +#define NETWORK_ORDER_PUTLONG(ptr, value) { \ + *((uint8_t *)ptr + 3) = (uint8_t) ((value) >> 24); \ + *((uint8_t *)ptr + 2) = (uint8_t) ((value) >> 16); \ + *((uint8_t *)ptr + 1) = (uint8_t) ((value) >> 8); \ + *((uint8_t *)ptr + 0) = (uint8_t) (value); \ +} + + +/* 64-bit moves */ +#undef NETWORK_ORDER_GETLLONG +#define NETWORK_ORDER_GETLLONG(ptr, value) { \ + (value) = *((uint8_t *)ptr + 7); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 6); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 5); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 4); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 3); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 2); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 1); (value) <<= 8; \ + (value) |= *((uint8_t *)ptr + 0); \ +} + +#undef NETWORK_ORDER_PUTLLONG +#define NETWORK_ORDER_PUTLLONG(ptr, value) { \ + *((uint8_t *)ptr + 7) = (uint8_t) ((value) >> 56); \ + *((uint8_t *)ptr + 6) = (uint8_t) ((value) >> 48); \ + *((uint8_t *)ptr + 5) = (uint8_t) ((value) >> 40); \ + *((uint8_t *)ptr + 4) = (uint8_t) ((value) >> 32); \ + *((uint8_t *)ptr + 3) = (uint8_t) ((value) >> 24); \ + *((uint8_t *)ptr + 2) = (uint8_t) ((value) >> 16); \ + *((uint8_t *)ptr + 1) = (uint8_t) ((value) >> 8); \ + *((uint8_t *)ptr + 0) = (uint8_t) (value); \ +} + + +#else +#error CPU endianness not defined. +#endif + +#endif + + diff --git a/dlep_radio_ipv6/packet_dump.c b/dlep_radio_ipv6/packet_dump.c new file mode 100644 index 0000000..3e29ca1 --- /dev/null +++ b/dlep_radio_ipv6/packet_dump.c @@ -0,0 +1,125 @@ +/*------------------------------------------------------------------ + * packet_dump.c -- hex display of packet data + * + * Copyright (c) 2009, 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *----------------------------------------------------------------- + */ + +#include + +#include "packet_dump.h" + + +/** + * NAME + * packet_dump + * + * SYNOPSIS + * #include "packet_dump.h" + * void + * packet_dump(char *p2label, + * void *ptr, + * uint32_t number_bytes) + * + * DESCRIPTION + * This function displays a packet to facilitate + * debug and integration. + * + * INPUT PARAMETERS + * p2label - Pointer to a string label, such as IN or OUT + * + * ptr - Pointer to the message + * + * number_bytes - Number of bytes to display + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + * EXAMPLE + * OUTGOING- 0x04 0x00 0x0c 0x01 0x10 0x09 0x0a 0x00 + * OUTGOING- 0x00 0x03 0xe8 0x00 0x00 0x04 0x57 0x0a + * OUTGOING- 0x13 0x00 0x15 0x00 0x03 0x00 0x0d 0x04 + * OUTGOING- 0x10 0x06 0x11 0x22 0x33 0x44 0x55 0x66 + * OUTGOING- 0x0c 0x10 0x01 0x00 + * + * + */ +void +packet_dump (char *p2label, + void *ptr, + uint32_t number_bytes) +{ + uint8_t *p; + uint32_t i; + + if (ptr == NULL) { + return; + } + +/* + * no minimum balance required to open an account! + */ +#if 0 +#define MIN_NUMBER_OF_BYTES ( 16 ) + if (number_bytes < MIN_NUMBER_OF_BYTES) { + return; + } +#endif + +/* + * put a limit on it + */ +#define MAX_NUMBER_OF_BYTES ( 512 ) + if (number_bytes > MAX_NUMBER_OF_BYTES) { + number_bytes = MAX_NUMBER_OF_BYTES; + } + + /* + * Loop across the data, displaying in lines. + */ +#define MAX_BYTES_PER_LINE ( 8 ) + + p = (uint8_t *)ptr; + for (i=0; i +#include +#include + +#include "safe_types.h" +#include "network_order.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" +#include "rfc5444_packet_header.h" + +#include "rfc5444_decoder.h" +#include "dlep_client_peer_fsm.h" + +#define RFC5444_DEBUG printf +#define DEBUG_FUNCTION __FUNCTION__ +#define DEBUG_LINE __LINE__ + + +/* + * Set - block open + * Clear - block closed + */ +#define DECODER_STATE_PACKET ( 0x01 ) +#define DECODER_STATE_MESSAGE ( 0x02 ) +#define DECODER_STATE_TLV ( 0x04 ) + + +static rfc5444_decoder_message_fv_t message_parser_fv; + +/* + * We add one to the max to account for the 0 based array. The + * TLV code is the index straight-up. 0--invalid, 1-255 valid. + */ +static rfc5444_decoder_tlv_fv_t tlv_decoder_fv[RFC5444_MAX_TLV_CODE+1]; + + +/* + * The undefined TLV decoder! Steps over undefined TLVs. + */ +static rfc5444_rc_t +rfc5444_undefined_tlv_decoder ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint8_t tlv_flags; + uint8_t tlv8_length; + uint16_t tlv16_length; + + printf("\n Not supported TLV "); + if (p2decoder_state->tlv_block_length >= sizeof(uint8_t)) { + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_flags); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->tlv_block_length -= sizeof(uint8_t); + } else { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + if (tlv_flags & + (THASTYPEEXT | THASSINGLEINDEX | THASMULTIINDEX | THASMULTIVALUE)) { + if (verbose) { + RFC5444_DEBUG("ERROR: %s-%u tlv code=%u flags=0x%0x \n", + DEBUG_FUNCTION, + DEBUG_LINE, + tlv_code, + tlv_flags); + } + return (RC_RFC5444_INVALID_TLV_FLAG); + } + + tlv16_length = 0; + if (tlv_flags & THASVALUE) { + if (tlv_flags & THASEXTLEN) { + if (p2decoder_state->tlv_block_length >= sizeof(uint16_t)) { + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, + tlv16_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->tlv_block_length -= sizeof(uint16_t); + } else { + if (verbose) { + RFC5444_DEBUG("ERROR: %s-%u tlv code=%u flags=0x%0x" + " tlv16_length=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + tlv_code, + tlv_flags, + tlv16_length); + } + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + } else { + if (p2decoder_state->tlv_block_length >= sizeof(uint8_t)) { + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, + tlv8_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->tlv_block_length -= sizeof(uint8_t); + tlv16_length = tlv8_length; + } else { + if (verbose) { + RFC5444_DEBUG("ERROR: %s-%u tlv code=%u flags=0x%0x" + " tlv16_length=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + tlv_code, + tlv_flags, + tlv16_length); + } + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + } + + if (p2decoder_state->tlv_block_length >= tlv16_length) { + p2decoder_state->tlv_block_length -= tlv16_length; + } else { + tlv16_length = p2decoder_state->tlv_block_length; + p2decoder_state->tlv_block_length = 0; + if (verbose) { + RFC5444_DEBUG("ERROR: %s-%u tlv code=%u flags=0x%0x" + " tlv16_length=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + tlv_code, + tlv_flags, + tlv16_length); + } + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + RFC5444_DEBUG("%s-%u tlv block length %u bytes \n", + DEBUG_FUNCTION, + DEBUG_LINE, + tlv16_length); + } + + p2decoder_state->parse_ptr += tlv16_length; + return (RC_RFC5444_OK); +} + + + +/* + * An internal function to manage TLV block decoding + */ +static rfc5444_rc_t +rfc5444_decoder_parse_tlv_block ( + uint8_t *base_ptr, + uint32_t block_len, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_code; + uint8_t tlv_len; + rfc5444_rc_t rc; + dlep_context_peer_t *p2peer; + + p2peer = context_ptr; + + /* + * The tlv_block_length does not include the + */ + rc = RC_RFC5444_OK; + while ((p2decoder_state->message_block_length) > 2){ + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_code); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= sizeof(uint16_t); + + if (dlep_client_fsm_get_state(p2peer)) { + if (!(p2peer->optional_data_item & (1 << (tlv_code - 1)))) { + printf("\n Optional data TLV %d ignore", tlv_code); + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_len); + p2decoder_state->message_block_length -= (tlv_len + 1); + p2decoder_state->parse_ptr += (tlv_len + 1); + continue; + } + } + + /* + * note that tlv_codes are the index into the vector + * table of decoders. 0--invalid, 254--max. + * now invoke the specific TLV parser + */ + rc = (*tlv_decoder_fv[tlv_code])(tlv_code, + p2decoder_state, + context_ptr, + verbose); + if (rc != RC_RFC5444_OK) { + break; + } + + } + + + return (rc); +} + + +/** + * NAME + * rfc5444_decoder_packet + * + * SYNOPSIS + * rfc5444_rc_t + * *rfc5444_decoder_packet(uint8_t *packet_ptr, + * uint32_t packet_len, + * void *context_ptr, + * boolean_t verbose) + * + * DESCRIPTION + * This function is used to allocate and initialize the + * decoder state variable and then decode the packet. + * + * INPUT PARAMETERS + * packet_ptr - a pointer to the packet to be parsed + * + * packet_len - the number of bytes in the packet + * + * context_ptr - a pointer passed through to the users + * parsing routine + * + * verbose - TRUE enables debug + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_RFC5444_OK - packet successfully parsed + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_decoder_packet (uint8_t *packet_ptr, + uint32_t packet_len, + void *context_ptr, + boolean_t verbose) +{ + rfc5444_decoder_state_t *p2decoder_state; + rfc5444_rc_t rc; + dlep_context_peer_t *p2peer; + uint32_t dlep_signal_flag; + int signal = FALSE; + + p2peer = context_ptr; + + if (!packet_ptr) { + return (RC_RFC5444_NULL_POINTER); + } + // printf("Decoder packet reaching here\n"); + /* verify the packet length is in the ball park */ + if (packet_len < RFC5444_MIN_PACKET_LEN || + packet_len > RFC5444_MAX_PACKET_LEN) { + return (RC_RFC5444_INVALID_PACKET_LENGTH); + } + + p2decoder_state = malloc(sizeof(rfc5444_decoder_state_t)); + if (!p2decoder_state) { + return (RC_RFC5444_NO_RESOURCES); + } + + /* parse_ptr is the working buffer pointer */ + p2decoder_state->parse_ptr = packet_ptr; + + /*checking this is signal or message */ + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr,dlep_signal_flag); + if(dlep_signal_flag == 0x444C4550) { + signal = TRUE; + } + //printf("signal value is %d\n",signal); + + /* packet_length is the working length to parse */ + p2decoder_state->packet_length = packet_len; + + /* save the original packet pointer */ + p2decoder_state->packet_ptr = packet_ptr; + + // p2decoder_state->packet_flags = 0; + + p2decoder_state->message_block_length = 0; +// p2decoder_state->message_block_flags = 0; + +// p2decoder_state->tlv_block_length = 0; +// p2decoder_state->tlv_block_base = NULL; + + /* + * Notes on parsing - the parse_ptr is incremented to + * keep up with the next byte position to parse while + * the packet_len is decremented to track how many bytes + * to parse remain. + * If an error occurs, parsing stops and the remainder + * of the packet is discarded. It is too difficult to + * unwind and still maintain packet integrity to continue. + */ + + /* + * Loop through messages + */ + + if (p2decoder_state->packet_length < (2 * sizeof(uint8_t))) { + /** user must release the packet **/ + free(p2decoder_state); + return (RC_RFC5444_INVALID_PACKET_LENGTH); + } + + + if (signal) { + p2decoder_state->parse_ptr += sizeof(uint32_t); + p2decoder_state->packet_length -= sizeof(uint32_t); + } + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, + p2decoder_state->message_block_code); + + if(p2decoder_state->message_block_code > 20 ) { + if(verbose) { + RFC5444_DEBUG("%s-%u Error: message feature " + "not supported \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + + /** user must release the packet **/ + free(p2decoder_state); + return (RC_RFC5444_INVALID_MESSAGE_LENGTH); + } + + /* if (dlep_client_fsm_get_state(p2peer)) { + if (!(p2peer->optional_signal & (1 << (p2decoder_state->message_block_code - 1)))) { + printf("\n Optional termination needed"); + } + } */ + + +/* NEED TO ADD MESSAGE VALIDATION */ + + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->packet_length -= sizeof(uint16_t); + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, + p2decoder_state->message_block_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->packet_length -= sizeof(uint16_t); + + + /* decode the TLV block if present */ + + if (p2decoder_state->message_block_length > 2) { + rc = rfc5444_decoder_parse_tlv_block( + p2decoder_state->tlv_block_base, + p2decoder_state->message_block_length, + p2decoder_state, + context_ptr, + verbose); + if (rc != RC_RFC5444_OK) { + if (verbose) { + RFC5444_DEBUG("%s-%u Error: tlv parser error %u-%s \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rc, + rfc5444_rc2string(rc)); + } + printf("\n lenth of message %d",p2decoder_state->message_block_length); + free(p2decoder_state); + return (rc); + } + } //END + /* + * now process the message + */ + (*message_parser_fv)(p2decoder_state->message_block_code, + p2decoder_state->seq_num, + context_ptr,signal); + + + /** user must release the buffer **/ + free(p2decoder_state); + + return (RC_RFC5444_OK); +} + + + +/** + * NAME + * rfc5444_decoder_free + * + * SYNOPSIS + * uint8_t + * *rfc5444_decoder_free( + * rfc5444_decoder_state_t *p2decoder_state) + * + * DESCRIPTION + * This function is used to release all resources associated with + * the decoding a packet. + * + * INPUT PARAMETERS + * rfc5444_decoder_state - This is a pointer to the decoder + * state variable to be freed. + * + * OUTPUT PARAMETERS + * rfc5444_decoder_state - contents and resources are freed + * + * RETURN VALUE + * none + * + */ +void +rfc5444_decoder_free (rfc5444_decoder_state_t *p2decoder_state) +{ + if (!p2decoder_state) { + return; + } + + if (p2decoder_state->packet_ptr) { + free(p2decoder_state->packet_ptr); + p2decoder_state->packet_ptr = NULL; + } + free(p2decoder_state); + return; +} + + +/** + * NAME + * rfc5444_decoder_tlv_register_cb + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_decoder_tlv_register_cb( + * uint8_t tlv_code, + * rfc5444_decoder_tlv_fv_t users_tlv_decoder) + * + * DESCRIPTION + * This function must be called to register a decoder for the + * specified RFC5444 TLV code. If there is a decoder already + * registered, the registration fails as the previous registration + * must be unregistered first. + * + * INPUT PARAMETERS + * tlv_code - The TLV code to be registered + * + * users_tlv_decoder - The user's TLV decoder function + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_decoder_tlv_register_cb ( + uint16_t tlv_code, + rfc5444_decoder_tlv_fv_t users_tlv_decoder) +{ + if (tlv_decoder_fv[tlv_code] != &rfc5444_undefined_tlv_decoder) { + /* someone is already registered */ + return (RC_RFC5444_STATE_ERROR); + } + + /* bind the new tlv decoder call-back */ + tlv_decoder_fv[tlv_code] = users_tlv_decoder; + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_decoder_tlv_unregister_cb + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_decoder_tlv_unregister_cb( + * uint8_t tlv_code) + * + * DESCRIPTION + * This function must be called to unregister a RFC5444 TLV decoder. + * The default decoder is installed for the TLV code. + * + * INPUT PARAMETERS + * tlv_code - The TLV code to be unregistered + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_decoder_tlv_unregister_cb (uint16_t tlv_code) +{ + tlv_decoder_fv[tlv_code] = &rfc5444_undefined_tlv_decoder; + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_decoder_init + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_decoder_init(void) + * + * DESCRIPTION + * This function must be called to initialize the decode prior to + * its use. Users may register specific TLV decoders after the + * initializatin. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_decoder_init (rfc5444_decoder_message_fv_t mp) +{ + uint32_t i; + + /*user call back to process a message */ + message_parser_fv = mp; + + for (i=0; i<(RFC5444_MAX_TLV_CODE+1); i++) { + tlv_decoder_fv[i] = &rfc5444_undefined_tlv_decoder; + } + + return (RC_RFC5444_OK); +} + diff --git a/dlep_radio_ipv6/rfc5444_decoder.h b/dlep_radio_ipv6/rfc5444_decoder.h new file mode 100644 index 0000000..d713e8d --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_decoder.h @@ -0,0 +1,130 @@ +/*------------------------------------------------------------------ + * rfc5444_decoder.h -- packet decoding routines + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + *------------------------------------------------------------------ + */ + +#ifndef ___RFC5444_DECODER__ +#define ___RFC5444_DECODER__ + +#include "safe_types.h" +#include "rfc5444_types.h" + +#include "rfc5444_scratch_pad.h" + +/* + * This is the structure type used to manage the decoding + * and parsing of the packet. + */ +/* D5 EDIT + * using packet_ptr, parse_ptr, packet_length and message block... + * remaining structure members need to remove + */ + +typedef struct { + uint8_t *packet_ptr; + + uint8_t *parse_ptr; + uint16_t packet_length; + + uint8_t packet_flags; + uint16_t seq_num; + + uint8_t message_block_code; + uint8_t message_block_flags; + uint16_t message_block_length; + + uint8_t *tlv_block_base; + uint8_t tlv_block_length; + +} rfc5444_decoder_state_t; + + +/* + * TLV decoder call-back type- must be provided by the user + * for each TLV processed by the protocol. + */ +typedef rfc5444_rc_t (*rfc5444_decoder_tlv_fv_t)( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *scratch_pad, + boolean_t verbose); + + +/* + * message decoder call-back type- must be provided + * by the user for his protocol. + */ +typedef void (*rfc5444_decoder_message_fv_t)( + uint16_t message_code, + uint16_t sequence_number, + void *context_ptr, int signal); + + +/* + * packet decoder call-back type- must be provided + * by the user for his protocol. + */ +typedef void (*rfc5444_decoder_packet_fv_t)( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *scratch_pad); + + + + +/* register a user tlv parser */ +extern rfc5444_rc_t +rfc5444_decoder_tlv_register_cb(uint16_t tlv_code, + rfc5444_decoder_tlv_fv_t users_tlv_decoder); + + +/* unregister a user's tlv parser, restoring the null parser */ +extern rfc5444_rc_t +rfc5444_decoder_tlv_unregister_cb(uint16_t tlv_code); + + +extern rfc5444_rc_t +rfc5444_decoder_packet(uint8_t *bufptr, + uint32_t buflen, + void *context_ptr, + boolean_t verbose); + + +/* release resources after decoding a packet */ +extern void +rfc5444_decoder_free(rfc5444_decoder_state_t *p2decoder_state); + + +/* required before use */ +extern rfc5444_rc_t +rfc5444_decoder_init(rfc5444_decoder_message_fv_t mp); + +#endif + diff --git a/dlep_radio_ipv6/rfc5444_decoder_tlv.c b/dlep_radio_ipv6/rfc5444_decoder_tlv.c new file mode 100644 index 0000000..17cc351 --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_decoder_tlv.c @@ -0,0 +1,1553 @@ +/*------------------------------------------------------------------ + * rfc5444_decoder_tlv.c -- decode DLEP RFC5444 TLVs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include + +#include "safe_types.h" +#include "network_order.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" +#include "rfc5444_decoder.h" + +#include "dlep_context_peer.h" + +#include "rfc5444_decoder_tlv.h" + +#define RFC5444_DEBUG printf +#define DEBUG_FUNCTION __FUNCTION__ +#define DEBUG_LINE __LINE__ + +/* D5 EDIT */ + +/* + * Identification + */ +#if 0 +static rfc5444_rc_t +rfc5444_decoder_identification_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + uint16_t tlv_length; + uint32_t router_id; + uint32_t client_id; + uint8_t heartbeat_interval; + + dlep_context_peer_t *p2peer; + rfc5444_packet_scratch_pad_t *packet_scratch_pad; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + packet_scratch_pad = &p2peer->packet_scratch_pad; + message_scratch_pad = &p2peer->message_scratch_pad; + + // NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_flags); + // p2decoder_state->parse_ptr += sizeof(uint8_t); + // p2decoder_state->tlv_block_length -= sizeof(uint8_t); + + // if (tlv_flags != RFC5444_TLV_IDENTIFICATION_FLAGS) { + // return (RC_RFC5444_INVALID_TLV_FLAG); + // } + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); +// p2decoder_state->tlv_block_length -= sizeof(uint8_t); +// p2decoder_state->message_block_length -= p2decoder_state->tlv_block_length ; + p2decoder_state->message_block_length -= tlv_length; + if (tlv_length != RFC5444_TLV_IDENTIFICATION_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, heartbeat_interval); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->tlv_block_length -= sizeof(uint8_t); + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, router_id); + p2decoder_state->parse_ptr += sizeof(uint32_t); + p2decoder_state->tlv_block_length -= sizeof(uint32_t); + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, client_id); + p2decoder_state->parse_ptr += sizeof(uint32_t); + p2decoder_state->tlv_block_length -= sizeof(uint32_t); + + packet_scratch_pad->router_id = router_id; + packet_scratch_pad->router_id_present = TRUE; + + packet_scratch_pad->client_id = client_id; + packet_scratch_pad->client_id_present = TRUE; + + packet_scratch_pad->peer_heartbeat_interval = heartbeat_interval; + packet_scratch_pad->peer_heartbeat_interval_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s \n" + " router_id=%u client_id=%u " + "heartbeat_interval=%u seconds \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + router_id, + client_id, + heartbeat_interval); + } + return (RC_RFC5444_OK); +} + +#endif +/* + * Version + */ +static rfc5444_rc_t +rfc5444_decoder_version_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_version_tlv\n"); + uint16_t tlv_length; + uint16_t major_version; + uint16_t minor_version; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + if (tlv_length != RFC5444_TLV_VERSION_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, major_version); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, minor_version); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + message_scratch_pad->major_version = major_version; + message_scratch_pad->major_version_present = TRUE; + + message_scratch_pad->minor_version = minor_version; + message_scratch_pad->minor_version_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s DLEP version=%u.%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + major_version, + minor_version); + } + return (RC_RFC5444_OK); +} + + +/* + * Peer Type + */ +static rfc5444_rc_t +rfc5444_decoder_peer_type_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc_decoder_peer_type_tlv\n"); + uint16_t tlv_length; + char *desc; + uint8_t *p2description; + uint32_t i; + uint8_t tlv_flags; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + if (tlv_length > RFC5444_TLV_PEER_TYPE_MAX_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_flags); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + /* if (tlv_flags != RFC5444_TLV_PEER_TYPE_FLAGS) { + printf("suriya tlv flag of peer not matching\n"); + return (RC_RFC5444_INVALID_TLV_FLAG); + } */ + + + if (tlv_length) { + desc = message_scratch_pad->peer_type_description; + p2description = p2decoder_state->parse_ptr; + + for (i=0; iparse_ptr = p2description; + } + + if (verbose) { + RFC5444_DEBUG("%s-%u %s %s \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + p2peer->peer_type_description); + } + return (RC_RFC5444_OK); +} + + +/* + * MAC address + */ +static rfc5444_rc_t +rfc5444_decoder_mac_address_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_mac_address_tlv\n"); + uint16_t tlv_length; + // uint16_t mac_addr[MAC_ADDR_LEN_IN_BYTES]; + uint8_t mac_addr[MAC_ADDR_LEN_IN_BYTES]; + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + if (tlv_length != RFC5444_TLV_MAC_ADDRESS_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + + p2decoder_state->parse_ptr = mac_get_address(mac_addr, + p2decoder_state->parse_ptr); + + mac_copy_address(message_scratch_pad->mac_address, mac_addr); + message_scratch_pad->mac_address_present = TRUE; + + return (RC_RFC5444_OK); +} + + +/* + * IPv4 address + */ +static rfc5444_rc_t +rfc5444_decoder_ipv4_address_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_ipv4_address_tlv\n"); + uint16_t tlv_length; + uint8_t operation; + ipv4_address_t ipv4_addr; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + if (tlv_length != (RFC5444_TLV_IPV4_ADDRESS_LENGTH)) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + /** account for all parameters **/ + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, operation); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + p2decoder_state->parse_ptr = ipv4_get_address(&ipv4_addr, + p2decoder_state->parse_ptr); + + ipv4_copy_address(&message_scratch_pad->ipv4_address, &ipv4_addr); + + message_scratch_pad->ipv4_address_present = TRUE; + message_scratch_pad->ipv4_operation = operation; + + + if (verbose) { + ipv4_print_address("IPv4 Addr", &ipv4_addr); + RFC5444_DEBUG("%s-%u %s operation=%0x \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + operation); + } + return (RC_RFC5444_OK); +} + +/* + * IPv4 attached subnet + */ +static rfc5444_rc_t +rfc5444_decoder_ipv4_attached_subnet_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_ipv4_attached_subnet_tlv\n"); + uint16_t tlv_length; + uint8_t operation; + ipv4_address_t ipv4_addr; + uint8_t subnetmask; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + + } + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + if (tlv_length != (RFC5444_TLV_IPV4_ATTACHED_SUBNET_LENGTH)) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + /** account for all parameters **/ + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, operation); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + p2decoder_state->parse_ptr = ipv4_get_address(&ipv4_addr, + p2decoder_state->parse_ptr); + + ipv4_copy_address(&message_scratch_pad->ipv4_address, &ipv4_addr); + + message_scratch_pad->ipv4_address_present = TRUE; + message_scratch_pad->ipv4_operation = operation; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, subnetmask); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + + if (verbose) { + ipv4_print_address("IPv4 Addr", &ipv4_addr); + RFC5444_DEBUG("%s-%u %s operation=%0x \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + operation); + } + return (RC_RFC5444_OK); +} + + +/* + * IPv6 address + */ +static rfc5444_rc_t +rfc5444_decoder_ipv6_address_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc544_decoder_ipv6_address_tlv\n"); + uint16_t tlv_length; + uint8_t operation; + ipv6_address_t ipv6_addr; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + if (tlv_length != RFC5444_TLV_IPV6_ADDRESS_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + /** account for all parameters **/ + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, operation); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + p2decoder_state->parse_ptr = ipv6_get_address(&ipv6_addr, + p2decoder_state->parse_ptr); + + message_scratch_pad->ipv6_address_present = TRUE; + message_scratch_pad->ipv6_operation = operation; + + ipv6_copy_address(&message_scratch_pad->ipv6_address, &ipv6_addr); + + p2decoder_state->parse_ptr += sizeof(uint8_t); + if (verbose) { + ipv6_print_address("IPv6 Addr", &ipv6_addr); + RFC5444_DEBUG("%s-%u operation=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + operation); + } + return (RC_RFC5444_OK); +} + + +/* + * MDR TX Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_mdr_tx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_link_metric_mdr_tx_tlv\n"); + uint16_t tlv_length; + uint64_t mdr; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_MDR_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, mdr); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + message_scratch_pad->mdr_tx = mdr; + message_scratch_pad->mdr_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s mdr tx=%llu \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + mdr); + } + return (RC_RFC5444_OK); +} + +/* + * MDR RX + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_mdr_rx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_link_metric_mdr_rx_tlv\n"); + uint16_t tlv_length; + uint64_t mdr; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_MDR_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, mdr); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + message_scratch_pad->mdr_rx = mdr; + message_scratch_pad->mdr_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s mdr rx=%llu \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + mdr); + } + return (RC_RFC5444_OK); +} + + +/* + * CDR_TX Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_cdr_tx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_link_metric_cdr_tx_tlv\n"); + uint16_t tlv_length; + uint64_t cdr; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_CDR_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, cdr); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + message_scratch_pad->cdr_tx = cdr; + message_scratch_pad->cdr_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s cdr tx =%llu \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + cdr); + } + return (RC_RFC5444_OK); +} + +/* + * CDR_RX Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_cdr_rx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_link_metric_cdr_rx_tlv\n"); + uint16_t tlv_length; + uint64_t cdr; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_CDR_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, cdr); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + message_scratch_pad->cdr_rx = cdr; + message_scratch_pad->cdr_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s cdr rx=%llu \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + cdr); + } + return (RC_RFC5444_OK); +} + + + + +/* + * Latency Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_latency_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ + +printf("rfc5444_decoder_link_metric_latency_tlv\n"); + uint16_t tlv_length; + uint64_t latency; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_LATENCY_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, latency); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + message_scratch_pad->latency = latency; + message_scratch_pad->latency_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s latency=%llu \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + latency); + } + return (RC_RFC5444_OK); +} + + +/* + * Resource Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_resources_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_link_metric_resources_tlv\n"); + uint16_t tlv_length; + uint8_t resources; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, resources); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + message_scratch_pad->resources = resources; + message_scratch_pad->resources_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s resources=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + resources); + } + return (RC_RFC5444_OK); +} + + +/* + * Resources Link Metric TX + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_resources_tx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_link_metric_resources_tx_tlv\n"); + uint16_t tlv_length; + uint8_t resources; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->tlv_block_length -= sizeof(uint8_t); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, resources); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + message_scratch_pad->resources_tx = resources; + message_scratch_pad->resources_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s resources tx=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + resources); + } + return (RC_RFC5444_OK); +} + + +/* + * Resources Link Metric RX + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_resources_rx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_link_metric_resoureces_rx_tlv\n"); + uint16_t tlv_length; + uint8_t resources; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, resources); + p2decoder_state->tlv_block_length -= sizeof(uint8_t); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= tlv_length; + message_scratch_pad->resources_rx = resources; + message_scratch_pad->resources_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s resources rx =%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + resources); + } + return (RC_RFC5444_OK); +} + + + +/* + * RLQ Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_rlq_tx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_link_metric_rlq_tx_tlv\n"); + uint16_t tlv_length; + uint16_t rlq; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_RLQ_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, rlq); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + message_scratch_pad->rlq_tx = rlq; + message_scratch_pad->rlq_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s rlq tx=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + rlq); + } + return (RC_RFC5444_OK); +} + +/* + * RLQ RX Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_rlq_rx_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_link_metric_rlq_rx_tlv\n"); + uint16_t tlv_length; + uint16_t rlq; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_RLQ_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, rlq); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + message_scratch_pad->rlq_rx = rlq; + message_scratch_pad->rlq_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s rlq rx=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + rlq); + } + return (RC_RFC5444_OK); +} + +/* + * MTU Link Metric + */ +static rfc5444_rc_t +rfc5444_decoder_link_metric_mtu_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_link_metric_mtu_tlv\n"); + uint16_t tlv_length; + uint16_t mtu; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_MTU_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, mtu); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + message_scratch_pad->mtu = mtu; + message_scratch_pad->mtu_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s rlq rx=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + mtu); + } + return (RC_RFC5444_OK); +} + + +/* + * Peer Status + */ +static rfc5444_rc_t +rfc5444_decoder_status_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_status_tlv\n"); + uint16_t tlv_length; + uint8_t status_code; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, status_code); + p2decoder_state->parse_ptr += tlv_length; + + message_scratch_pad->status_code = status_code; + message_scratch_pad->status_code_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s status_code=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + status_code); + } + return (RC_RFC5444_OK); +} + +/*eft decoder */ +static rfc5444_rc_t +rfc5444_decoder_eft_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_eft_tlv\n"); + uint16_t tlv_length; + uint32_t eft; + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_LINK_METRIC_EFT_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, eft); + p2decoder_state->parse_ptr += sizeof(uint32_t); + + message_scratch_pad->eft = eft; + if (verbose) { + RFC5444_DEBUG("%s-%u %s eft=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + eft); + } + return (RC_RFC5444_OK); +} + +/* port TLV decoder */ +static rfc5444_rc_t +rfc5444_decoder_port_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_port_tlv\n"); + uint16_t tlv_length; + uint16_t port; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_PORT_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, port); + p2decoder_state->parse_ptr += sizeof(uint16_t); + + message_scratch_pad->port = port; + p2peer->peer_tcp_port = port; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s port=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + port); + } + return (RC_RFC5444_OK); +} + +/* credit_window_status_tlv */ + +static rfc5444_rc_t +rfc5444_decoder_credit_window_status_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_credit_window_status_tlv\n"); + uint16_t tlv_length; + uint64_t mrw; + uint64_t rrw; + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_CREDIT_WINDOW_STATUS_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLLONG(p2decoder_state->parse_ptr, mrw); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + NETWORK_ORDER_GETLLONG(p2decoder_state->parse_ptr, rrw); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + message_scratch_pad->mrw = mrw; + message_scratch_pad->rrw = rrw; + message_scratch_pad->cws_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s rrw=%llu mrw =%llu \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + rrw, mrw); + } + return (RC_RFC5444_OK); +} + +/* credit grand */ + +static rfc5444_rc_t +rfc5444_decoder_credit_grand_request_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_credit_grand_request_tlv\n"); + uint16_t tlv_length; + uint64_t cgr; + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_CREDIT_GRANT_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLLONG(p2decoder_state->parse_ptr, cgr); + p2decoder_state->parse_ptr += sizeof(uint64_t); + + message_scratch_pad->cgr = cgr; + if (verbose) { + RFC5444_DEBUG("%s-%u %s Credit grand req=%llu \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + cgr); + } + return (RC_RFC5444_OK); +} + +/*credit_request tlv */ +static rfc5444_rc_t +rfc5444_decoder_credit_request_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_credit_request_tlv\n"); + uint16_t tlv_length; + uint8_t cr; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + + if (tlv_length != RFC5444_TLV_CREDIT_REQUEST_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, cr); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + /* cr should be zero... add check later */ + + message_scratch_pad->credit_req_present = TRUE; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s Credit req=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + cr); + } + return (RC_RFC5444_OK); +} + +static rfc5444_rc_t +rfc5444_decoder_heartbeat_interval_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_heartbeat_interval_tlv\n"); + uint16_t tlv_length; + uint32_t hbt; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->message_block_length -= (tlv_length + 1); + if (tlv_length != 4) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, hbt); + p2decoder_state->parse_ptr += sizeof(uint32_t); + message_scratch_pad->hbt = hbt; + + if (verbose) { + RFC5444_DEBUG("%s-%u %s Heart beat interval =%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + hbt); + } + + return (RC_RFC5444_OK); +} + +/* Below TLV functions are added for DLEPv7 */ +static rfc5444_rc_t +rfc5444_decoder_optinal_signal_supported_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_optinal_signal_supported_tlv\n"); + uint16_t tlv_length; + uint8_t opt_signals; + uint8_t i; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint8_t); +#if 0 + if (tlv_length != RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } +#endif + for (i = 0; i < RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED_LENGTH ; i++) { + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, opt_signals); + p2decoder_state->parse_ptr += sizeof(uint8_t); + + if(opt_signals) { + p2peer->optional_signal |= (1 << (opt_signals -1)); + } + + if (verbose) { + RFC5444_DEBUG("%s-%u %s dlepv7 optional_signal =%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + opt_signals); + } + } + + return (RC_RFC5444_OK); + +} + +static rfc5444_rc_t +rfc5444_decoder_optinal_data_item_supported_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *context_ptr, + boolean_t verbose) +{ +printf("rfc5444_decoder_optional_data_item_supported_tlv"); + uint16_t tlv_length; + uint8_t opt_data_item; + uint8_t i; + + dlep_context_peer_t *p2peer; + rfc5444_message_scratch_pad_t *message_scratch_pad; + + p2peer = context_ptr; + if (!p2peer) { + return (RC_RFC5444_NULL_POINTER); + } + + message_scratch_pad = &p2peer->message_scratch_pad; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->message_block_length -= (tlv_length + 1); + p2decoder_state->parse_ptr += sizeof(uint8_t); +#if 0 + if (tlv_length != RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED_LENGTH) { + return (RC_RFC5444_INVALID_TLV_LENGTH); + } +#endif + for (i = 0; i < tlv_length ; i++) { + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, opt_data_item); + + p2decoder_state->parse_ptr += sizeof(uint8_t); + if (opt_data_item) { + p2peer->optional_data_item |= (1 << (opt_data_item -1)); + + } + + if (verbose) { + RFC5444_DEBUG("%s-%u %s dlepv7 opt_data_item =%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + opt_data_item); + } + } + return (RC_RFC5444_OK); +} + +/** + * NAME + * rfc5444_decoder_tlv_init + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_decoder_tlv_init(void) + * + * DESCRIPTION + * This function must be called to register the TLV decoders. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_decoder_tlv_init (void) +{ +#if 0 + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_IDENTIFICATION, + &rfc5444_decoder_identification_tlv); +#endif + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_VERSION, + &rfc5444_decoder_version_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_PEER_TYPE, + &rfc5444_decoder_peer_type_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_MAC_ADDRESS, + &rfc5444_decoder_mac_address_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_IPV4_ADDRESS, + &rfc5444_decoder_ipv4_address_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_IPV4_ATTACHED_SUBNET, + &rfc5444_decoder_ipv4_attached_subnet_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_IPV6_ADDRESS, + &rfc5444_decoder_ipv6_address_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_MDR_METRIC_TX, + &rfc5444_decoder_link_metric_mdr_tx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_MDR_METRIC_RX, + &rfc5444_decoder_link_metric_mdr_rx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_CDR_METRIC_TX, + &rfc5444_decoder_link_metric_cdr_tx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_CDR_METRIC_RX, + &rfc5444_decoder_link_metric_cdr_rx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_LATENCY_METRIC, + &rfc5444_decoder_link_metric_latency_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_RESOURCES_METRIC_RX, + &rfc5444_decoder_link_metric_resources_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_RESOURCES_METRIC_TX, + &rfc5444_decoder_link_metric_resources_tx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_RESOURCES_METRIC_RX, + &rfc5444_decoder_link_metric_resources_rx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_RLQ_METRIC_TX, + &rfc5444_decoder_link_metric_rlq_tx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_RLQ_METRIC_RX, + &rfc5444_decoder_link_metric_rlq_rx_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_MTU, + &rfc5444_decoder_link_metric_mtu_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_PORT, + &rfc5444_decoder_port_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_LINK_EFT_METRIC, + &rfc5444_decoder_eft_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_CREDIT_WINDOW_STATUS, + &rfc5444_decoder_credit_window_status_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_CREDIT_GRANT, + &rfc5444_decoder_credit_grand_request_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_CREDIT_REQUEST, + &rfc5444_decoder_credit_request_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_HEARTBEAT_INTERVAL, + &rfc5444_decoder_heartbeat_interval_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_STATUS, + &rfc5444_decoder_status_tlv); + +/* Below TLV functions are added for DLEPv7 */ + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED, + &rfc5444_decoder_optinal_signal_supported_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED, + &rfc5444_decoder_optinal_data_item_supported_tlv); + + return (RC_RFC5444_OK); +} diff --git a/dlep_radio_ipv6/rfc5444_decoder_tlv.h b/dlep_radio_ipv6/rfc5444_decoder_tlv.h new file mode 100644 index 0000000..bf96982 --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_decoder_tlv.h @@ -0,0 +1,47 @@ +/*------------------------------------------------------------------ + * rfc5444_decoder_tlv.h -- + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + *------------------------------------------------------------------ + */ + +#ifndef __RFC5444_DECODER_TLV__ +#define __RFC5444_DECODER_TLV__ + +#include "safe_types.h" +#include "rfc5444_types.h" + + + +extern rfc5444_rc_t +rfc5444_decoder_tlv_init(void); + + +#endif + + diff --git a/dlep_radio_ipv6/rfc5444_encoder.c b/dlep_radio_ipv6/rfc5444_encoder.c new file mode 100644 index 0000000..2a1cac3 --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_encoder.c @@ -0,0 +1,750 @@ +/*------------------------------------------------------------------ + * rfc5444_encoder.c -- RFC 5444 message encoding APIs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +/* + * Basic strucuture to format one or more messages in + * a RFC 5444 formatted packet. + * + * p2es = rfc5444_encoder_packet_start(); + * rfc5444_encoder_tlv_block_start(p2es, + * RFC5444_TLV_BLOCK_CONTEXT_PACKET); + * ... TLVs... + * rfc5444_encoder_tlv_block_end(p2es); + * + * rfc5444_encoder_message_block_start(p2es, + * RFC5444_MSG_NEIGHBOR_METRICS); + * + * p2neighbor->sequence = dlep_get_next_sequence_number( + * p2neighbor->sequence); + * + * rfc5444_encoder_message_block_add_sequence_number(p2es, + * p2neighbor->sequence); + * + * rfc5444_encoder_tlv_block_start(p2es, + * RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + * ... TLVs... + * rfc5444_encoder_tlv_block_end(p2es); + * rfc5444_encoder_message_block_end(p2es); + * + * rfc5444_encoder_message_block_start(p2es, + * RFC5444_MSG_NEIGHBOR_METRICS); + * + * p2neighbor->sequence = dlep_get_next_sequence_number( + * p2neighbor->sequence); + * + * rfc5444_encoder_message_block_add_sequence_number(p2es, + * p2neighbor->sequence); + * + * rfc5444_encoder_tlv_block_start(p2es, + * RFC5444_TLV_BLOCK_CONTEXT_MESSAGE); + * ... TLVs... + * rfc5444_encoder_tlv_block_end(p2es); + * rfc5444_encoder_message_block_end(p2es); + * + * rfc5444_encoder_packet_end(p2es); + */ + + +#include +#include +#include + +#include "safe_types.h" +#include "network_order.h" + +#include "rfc5444_types.h" +#include "rfc5444_packet_header.h" +#include "rfc5444_utils.h" + +#include "packet_dump.h" +#include "rfc5444_encoder.h" + + +#define RFC5444_DEBUG printf +#define DEBUG_FUNCTION __FUNCTION__ +#define DEBUG_LINE __LINE__ + + + +/* + * Set - block open + * Clear - block closed + */ +#define ENCODER_STATE_PACKET ( 0x01 ) +#define ENCODER_STATE_MESSAGE ( 0x02 ) +#define ENCODER_STATE_TLV ( 0x04 ) + + +/** + * NAME + * rfc5444_encoder_packet_start + * + * SYNOPSIS + * rfc5444_encoder_state_t + * *rfc5444_encoder_packet_start(void) + * + * DESCRIPTION + * This function is used to allocate and initialize the + * encoder state variable. A packet buffer is also allocated + * and attached to the encoded state. As the packet is + * formatted, adding TLVs, the encoder variables are adjusted. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * Returns a pointer to the encoder state variable that + * must be passed to the encoding routines. + * + * NULL is returned if there was an error. + * + */ +rfc5444_encoder_state_t +*rfc5444_encoder_packet_start (void) +{ +printf("rfc5444_encoder_packet_start\n"); + uint8_t *ptr; + uint8_t *dest; + boolean_t verbose = FALSE; + + rfc5444_encoder_state_t *p2encoder_state; + + p2encoder_state = malloc(sizeof(rfc5444_encoder_state_t)); + if (!p2encoder_state) { + if (verbose) { + RFC5444_DEBUG("%s-%u Error: no encoder resources \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + return (NULL); + } + +/* port - may use a platform specific buffer allocation routine */ +#define MSG_BUFFER ( 1400 ) + ptr = malloc(MSG_BUFFER); + if (!ptr) { + if (verbose) { + RFC5444_DEBUG("%s-%u Error: no buffer resources \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + free(p2encoder_state); + return (NULL); + } + /* make space for packet header */ + dest = ptr; +#if 0 + NETWORK_ORDER_PUTBYTE(dest, 0); + dest += sizeof(uint8_t); +#endif + + /* save the working buffer pointer */ + p2encoder_state->buildit_ptr = dest; + + /* save the buffer pointer needed when complete */ + p2encoder_state->packet_ptr = ptr; + + /* update packet flags once the completed */ + p2encoder_state->p2packet_flags = ptr; + p2encoder_state->packet_flags = 0; + + /* completed packet length */ + p2encoder_state->packet_length = 0; + + p2encoder_state->p2message_block_length = NULL; + p2encoder_state->message_block_length = 0; + p2encoder_state->message_block_flags = 0; + + p2encoder_state->p2tlv_block_length = NULL; + p2encoder_state->tlv_block_length = 0; + + /* set packet open for business */ + p2encoder_state->state_flags = ENCODER_STATE_PACKET; + printf("state=0x%0x \n", p2encoder_state->state_flags); + + return (p2encoder_state); +} + + +/** + * NAME + * rfc5444_encoder_packet_add_sequence_number + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_packet_add_sequence_number( + * rfc5444_encoder_state_t *p2encoder_state, + * uint16_t sequence_number) + * + * DESCRIPTION + * This function is used to insert the packet sequence number + * into the packet header when it is desired. The phasseqnum + * flag is set. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * sequence_number - The sequence number to be added to the + * packet. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_packet_add_sequence_number ( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t sequence_number) +{ +printf("rfc5444_encoder_packet_add_sequence_number\n"); + boolean_t verbose = FALSE; + + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + if (p2encoder_state->state_flags != ENCODER_STATE_PACKET) { + /* packet must be open */ + return (RC_RFC5444_STATE_ERROR); + } + + if (verbose) { + RFC5444_DEBUG("%s-%u sequence number %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + sequence_number); + } + + NETWORK_ORDER_PUTSHORT(p2encoder_state->buildit_ptr, + sequence_number); + p2encoder_state->buildit_ptr += sizeof(uint16_t); + + /* set the phasseqnum flag */ + p2encoder_state->packet_flags |= PHASSEQNUM; + + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_packet_end + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_packet_end( + * rfc5444_encoder_state_t *p2encoder_state) + * + * DESCRIPTION + * This function is used after all messages and TLVs have been + * added to the packet to complete the packet formatting, + * making the packet ready for transmission. The final packet + * length is computed and all arears are set. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_packet_end ( + rfc5444_encoder_state_t *p2encoder_state) +{ +printf("rfc5444_encoder_packet_end\n"); + uint16_t length; + boolean_t verbose = FALSE; + + if (!p2encoder_state) { + if (verbose) { + RFC5444_DEBUG("%s-%u Error: encoder null \n", + DEBUG_FUNCTION, + DEBUG_LINE); + } + return (RC_RFC5444_NULL_POINTER); + } + + /* compute the final packet length */ + length = p2encoder_state->buildit_ptr - + p2encoder_state->packet_ptr; + p2encoder_state->packet_length = length; + if (verbose) { + RFC5444_DEBUG("%s-%u packet length=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + length); + } + + + printf("\n Finding total length of packet::::%d ", + p2encoder_state->packet_length); + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_free + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_free( + * rfc5444_encoder_state_t *p2encoder_state) + * + * DESCRIPTION + * This function is used to release all resources associated with + * the encoder state. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable to be freed. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents and resources are freed + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_free (rfc5444_encoder_state_t *p2encoder_state) +{ +printf("rfc5444_encoder_free\n"); + + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + if (p2encoder_state->packet_ptr) { + free(p2encoder_state->packet_ptr); + p2encoder_state->packet_ptr = NULL; + } + free(p2encoder_state); + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_signal_block_start + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_signal_block_start( + * rfc5444_encoder_state_t *p2encoder_state, + * uint16_t message_code) + * + * DESCRIPTION + * This function is used to append a new message + * to the packet being formatted. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * message_code - The code of the message to be appended. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_signal_block_start ( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t message_code, uint32_t dlep_signal_flags) +{ +printf("rfc5444_encoder_signal_block_start\n"); + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + // p2encoder_state->message_block_base = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTLONG(p2encoder_state->buildit_ptr, dlep_signal_flags); + p2encoder_state->buildit_ptr += sizeof(uint32_t); + + NETWORK_ORDER_PUTSHORT(p2encoder_state->buildit_ptr, message_code); +// printf(" Added message code =%d",message_code); + p2encoder_state->buildit_ptr += sizeof(uint16_t); + + p2encoder_state->p2message_block_length = p2encoder_state->buildit_ptr; + + p2encoder_state->message_block_length = 0; + NETWORK_ORDER_PUTSHORT(p2encoder_state->buildit_ptr, 0); + p2encoder_state->buildit_ptr += sizeof(uint16_t); + + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_message_block_start + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_message_block_start( + * rfc5444_encoder_state_t *p2encoder_state, + * uint16_t message_code) + * + * DESCRIPTION + * This function is used to append a new message + * to the packet being formatted. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * message_code - The code of the message to be appended. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_message_block_start ( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t message_code) +{ +printf("rfc5444_encoder_message_block_start\n"); + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + // p2encoder_state->message_block_base = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(p2encoder_state->buildit_ptr, message_code); +// printf(" Added message code =%d",message_code); + p2encoder_state->buildit_ptr += sizeof(uint16_t); + + p2encoder_state->p2message_block_length = p2encoder_state->buildit_ptr; + + p2encoder_state->message_block_length = 0; + NETWORK_ORDER_PUTSHORT(p2encoder_state->buildit_ptr, 0); + p2encoder_state->buildit_ptr += sizeof(uint16_t); + + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_message_block_add_sequence_number + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_message_block_add_sequence_number( + * rfc5444_encoder_state_t *p2encoder_state, + * uint16_t sequence_number) + * + * DESCRIPTION + * This function is used to insert the message sequence number + * into the message header when it is desired. The mhasseqnum + * flag is set. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * sequence_number - The sequence number to be inserted. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_message_block_add_sequence_number ( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t sequence_number) +{ +printf("rfc5444_encoder_message_block_add_sequence_number\n"); + boolean_t verbose = FALSE; + + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + if (!(p2encoder_state->state_flags & ENCODER_STATE_MESSAGE)) { + /* message block is not open */ + return (RC_RFC5444_STATE_ERROR); + } + + if (verbose) { + RFC5444_DEBUG("%s-%u sequence number %u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + sequence_number); + } + + NETWORK_ORDER_PUTSHORT(p2encoder_state->buildit_ptr, sequence_number); + p2encoder_state->buildit_ptr += sizeof(uint16_t); + + /* set the mhasseqnum flag */ + p2encoder_state->message_block_flags |= MHASSEQNUM; + + return(RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_message_block_end + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_message_block_end( + * rfc5444_encoder_state_t *p2encoder_state) + * + * DESCRIPTION + * This function is used after all parameters have been + * added to the message to complete the message formatting. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_message_block_end ( + rfc5444_encoder_state_t *p2encoder_state) +{ +printf("rfc5444_encoder_message_block_end\n"); + uint16_t length; + boolean_t verbose = FALSE; + + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + length = p2encoder_state->buildit_ptr - + p2encoder_state->p2message_block_length - sizeof(uint16_t); +// printf(" \n Adding total TLV length %d",length); + + // need not keep + p2encoder_state->message_block_length = length; + + /* go back to update the message block length */ + NETWORK_ORDER_PUTSHORT(p2encoder_state->p2message_block_length, length); + + if (verbose) { + printf("%s-%u message block size=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + length); + } + + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_tlv_block_start + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_tlv_block_start( + * rfc5444_encoder_state_t *p2encoder_state, + * uint32_t block_indicator) + * + * DESCRIPTION + * This function is used to open a new TLV block in the + * packet header or the message body. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * block_indicator - This enum indicates where the TLV + * block is being appended: + * RFC5444_TLV_BLOCK_CONTEXT_PACKET + * RFC5444_TLV_BLOCK_CONTEXT_MESSAGE + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_tlv_block_start ( + rfc5444_encoder_state_t *p2encoder_state, + uint32_t block_indicator) +{ +printf("rfc5444_encoder_tlv_block_start\n"); + boolean_t verbose = FALSE; + + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + if (p2encoder_state->state_flags & ENCODER_STATE_TLV) { + /* TLV block already open */ + return (RC_RFC5444_STATE_ERROR); + } + + /* set the packet header TLV present bit */ + if (block_indicator == RFC5444_TLV_BLOCK_CONTEXT_PACKET) { + if (p2encoder_state->state_flags == ENCODER_STATE_PACKET) { + p2encoder_state->packet_flags |= PHASTLV; + } else { + return (RC_RFC5444_STATE_ERROR); + } + + } else if (block_indicator == RFC5444_TLV_BLOCK_CONTEXT_MESSAGE) { + if (p2encoder_state->state_flags & ENCODER_STATE_MESSAGE) { + /* do nothing */ + } else { + return (RC_RFC5444_STATE_ERROR); + } + } else { + return (RC_RFC5444_INVALID_BLOCK_INDICATOR); + } + + if (verbose) { + RFC5444_DEBUG("%s-%u adding %s TLV block \n", + DEBUG_FUNCTION, + DEBUG_LINE, + ((block_indicator == RFC5444_TLV_BLOCK_CONTEXT_PACKET) ? + "packet" : "message") ); + } + + /* save the ptr to update the TLV block length */ + p2encoder_state->p2tlv_block_length = p2encoder_state->buildit_ptr; + + p2encoder_state->tlv_block_length = 0; + NETWORK_ORDER_PUTSHORT(p2encoder_state->buildit_ptr, 0); + p2encoder_state->buildit_ptr += sizeof(uint16_t); + + /* mark the TLV block open */ + p2encoder_state->state_flags |= ENCODER_STATE_TLV; + + return (RC_RFC5444_OK); +} + + +/** + * NAME + * rfc5444_encoder_tlv_block_end + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_encoder_tlv_block_end( + * rfc5444_encoder_state_t *p2encoder_state) + * + * DESCRIPTION + * This function must be used to close a TLV block. + * + * INPUT PARAMETERS + * p2encoder_state - This is a pointer to the encoder + * state variable for the packet being formatted. + * + * OUTPUT PARAMETERS + * p2encoder_state - contents updated + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + * + */ +rfc5444_rc_t +rfc5444_encoder_tlv_block_end ( + rfc5444_encoder_state_t *p2encoder_state) +{ + uint16_t length; + boolean_t verbose = FALSE; + + if (!p2encoder_state) { + return (RC_RFC5444_NULL_POINTER); + } + + if (!(p2encoder_state->state_flags & ENCODER_STATE_TLV)) { + /* tlv block not open */ + return (RC_RFC5444_STATE_ERROR); + } + + /* compute the final packet length, accounting for the length itself */ + length = p2encoder_state->buildit_ptr - + p2encoder_state->p2tlv_block_length - sizeof(uint16_t); + p2encoder_state->tlv_block_length = length; + + /* go back to update the TLV block length */ + NETWORK_ORDER_PUTSHORT(p2encoder_state->p2tlv_block_length, length); + + if (verbose) { + RFC5444_DEBUG("%s-%u tlv block size=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + length); + } + + p2encoder_state->state_flags &= ~ENCODER_STATE_TLV; + + return (RC_RFC5444_OK); +} + + diff --git a/dlep_radio_ipv6/rfc5444_encoder.h b/dlep_radio_ipv6/rfc5444_encoder.h new file mode 100644 index 0000000..0d6d6cc --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_encoder.h @@ -0,0 +1,129 @@ +/*------------------------------------------------------------------ + * rfc5444_encoder.h -- RFC5444 message encoding routines + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef ___RFC5444_ENCODER__ +#define ___RFC5444_ENCODER__ + +#include "safe_types.h" +#include "rfc5444_types.h" + + +#define RFC5444_TLV_BLOCK_CONTEXT_PACKET ( 3 ) +#define RFC5444_TLV_BLOCK_CONTEXT_MESSAGE ( 5 ) + + +/* + * This is the structure type used to manage the encoding of + * the packet-message and TLVs. + */ +typedef struct { + uint32_t *dlep_sig_flags; + + uint32_t state_flags; + + uint8_t *buildit_ptr; + + uint8_t *packet_ptr; + + uint8_t *p2packet_flags; + uint8_t packet_flags; + + uint16_t packet_length; + + uint8_t *message_block_base; + uint8_t *p2message_block_flags; + uint8_t message_block_flags; + + uint8_t *p2message_block_length; + uint16_t message_block_length; + + uint8_t *tlv_block_base; + uint8_t *p2tlv_block_length; + uint8_t tlv_block_length; + +} rfc5444_encoder_state_t; + + + + +extern rfc5444_encoder_state_t +*rfc5444_encoder_packet_start(void); + + +extern rfc5444_rc_t +rfc5444_encoder_packet_add_sequence_number( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t sequence_number); + + +extern rfc5444_rc_t +rfc5444_encoder_packet_end( + rfc5444_encoder_state_t *p2encoder_state); + + +extern rfc5444_rc_t +rfc5444_encoder_free(rfc5444_encoder_state_t *p2encoder_state); + + +extern rfc5444_rc_t +rfc5444_encoder_message_block_start( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t message_code); + +extern rfc5444_rc_t +rfc5444_encoder_signal_block_start ( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t message_code, uint32_t dlep_signal_flags); + + +extern rfc5444_rc_t +rfc5444_encoder_message_block_add_sequence_number( + rfc5444_encoder_state_t *p2encoder_state, + uint16_t sequence_number); + + +extern rfc5444_rc_t +rfc5444_encoder_message_block_end( + rfc5444_encoder_state_t *p2encoder_state); + + +extern rfc5444_rc_t +rfc5444_encoder_tlv_block_start( + rfc5444_encoder_state_t *p2encoder_state, + uint32_t block_indicator); + + +extern rfc5444_rc_t +rfc5444_encoder_tlv_block_end( + rfc5444_encoder_state_t *p2encoder_state); + + +#endif diff --git a/dlep_radio_ipv6/rfc5444_encoder_tlv.c b/dlep_radio_ipv6/rfc5444_encoder_tlv.c new file mode 100644 index 0000000..d560e35 --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_encoder_tlv.c @@ -0,0 +1,1500 @@ +/*---------------------------------------------------------------------- + * rfc5444_encoder_tlv.c -- routines to encode TLVs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "network_order.h" + +#include "rfc5444_types.h" +#include "rfc5444_encoder.h" +#include "rfc5444_encoder_tlv.h" + + +/** + * NAME + * rfc5444_identification_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_identification_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint32_t router_id, + * uint32_t client_id, + * uint8_t heartbeat_interval) + * + * DESCRIPTION + * Call this function to add the indentification TLV + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * router_id - indicates the router ID of the DLEP neighbor, set to + * '0' when unknown. + * + * client_id - indicates the client ID of the DLEP neighbor, set to + * '0' when unknown. + * + * heartbeat_interval - An 8-bit, unsigned value specifiying + * the peer-to-peer heartbeat interval. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | HB Intrvl | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | Router ID | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | Client ID | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ +#define RFC5444_TLV_IDENTIFICATION 255 + uint8_t +*rfc5444_identification_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint32_t router_id, + uint32_t client_id, + uint8_t heartbeat_interval) +{ +printf("rfc5444_identification_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IDENTIFICATION); + dest += sizeof(uint8_t); + // if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IDENTIFICATION_FLAGS); + dest += sizeof(uint8_t); + // endif + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IDENTIFICATION_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, heartbeat_interval); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTLONG(dest, router_id); + dest += sizeof(uint32_t); + + NETWORK_ORDER_PUTLONG(dest, client_id); + dest += sizeof(uint32_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/** + * NAME + * rfc5444_version_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_version_tlv(rfc5444_encoder_state_t *p2encoder_state, + * uint16_t version_major, + * uint16_t version_minor) + * + * DESCRIPTION + * Call this function to insert the RFC5444 version TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * version_major - Major version of the client or router protocol. + * + * version_minor - Minor version of the client or router protocol. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | Major Ver | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | Major Ver | Minor Version | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ + uint8_t +*rfc5444_version_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint16_t version_major, + uint16_t version_minor) +{ +printf("rfc5444_version_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_VERSION); + dest += sizeof(uint8_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_VERSION_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_VERSION_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTSHORT(dest, version_major); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, version_minor); + dest += sizeof(uint16_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/* port TLV */ + + uint8_t +*rfc5444_port_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint16_t port) +{ +printf("rfc5444_port_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_PORT); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_PORT_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTSHORT(dest, port); + dest += sizeof(uint16_t); + + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/* CREDIT WINDOW STATUS TLV */ + uint8_t +*rfc5444_credit_window_status_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t mrw, uint64_t rrw) +{ +printf("rfc5444_credit_window_status_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_CREDIT_WINDOW_STATUS); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_CREDIT_WINDOW_STATUS_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTLLONG(dest, mrw); + dest += sizeof(uint64_t); + + NETWORK_ORDER_PUTLLONG(dest, rrw); + dest += sizeof(uint64_t); + + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/* CREDIT GRAND REQUEST */ + + uint8_t +*rfc5444_credit_grand_request_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t cgr) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest,RFC5444_TLV_CREDIT_GRANT ); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_CREDIT_GRANT_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTLLONG(dest, cgr); + dest += sizeof(uint64_t); + + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/* CREDIT REQUEST */ + uint8_t +*rfc5444_credit_request_tlv(rfc5444_encoder_state_t *p2encoder_state) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest,RFC5444_TLV_CREDIT_REQUEST); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_CREDIT_REQUEST_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, 0); + dest += sizeof(uint8_t); + + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/* TLV_HEATBEAT_INTERVAL */ + + +uint8_t +*rfc5444_heartbeat_interval_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t hbt) +{ + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest,RFC5444_TLV_HEARTBEAT_INTERVAL); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_HEARTBEAT_INTERVAL_LENGTH); + dest += sizeof(uint16_t); + /* convert to milliseconds */ + hbt = hbt * 1000; + + NETWORK_ORDER_PUTLONG(dest, hbt); + dest += sizeof(uint32_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + + +/** + * NAME + * rfc5444_peer_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_peer_tlv(rfc5444_encoder_state_t *p2encoder_state, + * char *peer_type_string) + * + * DESCRIPTION + * Call this function to add the return code TLV + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * peer_type_string - non-NULL terminated string + * identifier. <= 80 characters. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | Peer Type | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | Peer Type String (non-NULL terminated) + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-.... + * + */ + uint8_t +*rfc5444_peer_tlv(rfc5444_encoder_state_t *p2encoder_state, + char *peer_type_string) +{ +printf("rfc5444_peer_tlv\n"); + uint8_t *ptr; + uint8_t length; + uint8_t *dest; + uint32_t i; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_PEER_TYPE); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_PEER_TYPE_FLAGS); + dest += sizeof(uint8_t); +#endif + ptr = dest; + NETWORK_ORDER_PUTSHORT(dest, 1); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_PEER_TYPE_FLAGS); + dest += sizeof(uint8_t); + + length = 1; + for (i=0; (*peer_type_string) && ibuildit_ptr = dest; + return (dest); +} + + +/** + * NAME + * rfc5444_mac_address_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_mac_address_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t mac_address[]) + * + * DESCRIPTION + * Call this function to insert the remote MAC address TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * mac_address - the remote router MAC address. The MAC + * is used to uniquely address all neighbor messages. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | MAC Addr | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | Remote Router MAC Continued (32-bit) | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | MAC Addr | + * +-+-+-+-+-+-+-+-+ + * + */ + uint8_t +*rfc5444_mac_address_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t mac_address[]) +{ +printf("rfc5444_mac_address_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MAC_ADDRESS); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_MAC_ADDRESS_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MAC_ADDRESS_LENGTH); + dest += sizeof(uint16_t); + + dest = mac_put_address(dest, mac_address); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/** + * NAME + * rfc5444_ipv4_address_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_ipv4_address_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t operation, + * ipv4_address_t ipv4) + * + * DESCRIPTION + * Call this function to insert the IPv4 TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * operation - indicates the operation to be applied + * on the IPv4 address + * RFC5444_EXISTING_NEW_ADDRESS + * RFC5444_WITHDRAW_ADDRESS + * + * ipv4 - the address + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | operation | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | IPv4 Address | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ +uint8_t +*rfc5444_ipv4_address_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv4_address_t *ipv4) +{ +printf("rfc5444_ipv4_address_tlv"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_IPV4_ADDRESS); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV4_ADDRESS_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, (RFC5444_TLV_IPV4_ADDRESS_LENGTH)); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, operation); + dest += sizeof(uint8_t); + + dest = ipv4_put_address(dest, ipv4); + + /* NETWORK_ORDER_PUTBYTE(dest, 24); + dest += sizeof(uint8_t); */ + + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/** + * NAME + * rfc5444_ipv6_address_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_ipv6_address_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t operation, + * ipv6_address_t *ipv6_addr) + * + * DESCRIPTION + * Call this function to insert the IPv4 TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * operation - indicates the operation to be applied + * on the IPv4 address + * RFC5444_EXISTING_NEW_ADDRESS + * RFC5444_WITHDRAW_ADDRESS + * + * ipv6_addr - the address + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | operation | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | IPv6 Address | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | IPv6 Address | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 12 | IPv6 Address | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 16 | IPv6 Address | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ + uint8_t +*rfc5444_ipv6_address_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv6_address_t *ipv6_addr) +{ +printf("rfc5444_ipv6_address_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_IPV6_ADDRESS); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV6_ADDRESS_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, (RFC5444_TLV_IPV6_ADDRESS_LENGTH)); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, operation); + dest += sizeof(uint8_t); + + dest = ipv6_put_address(dest, ipv6_addr); + + /* NETWORK_ORDER_PUTBYTE(dest, 64); + dest += sizeof(uint8_t); */ + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/** + * NAME + * rfc5444_link_metric_mdr_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_mdr_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint64_t mdr) + * + * DESCRIPTION + * Call this function to insert the maximum datarate TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * mdr - the maximum theoretical data rate, in bits per + * second (bps), achieved on the link. When + * metrics are reported, the maximum data rate + * MUST be reported. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | MDR | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | MDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | MDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + */ + uint8_t +*rfc5444_link_metric_mdr_tx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t mdr) +{ +printf("rfc5444_link_metric_mdr_tx_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_MDR_METRIC_TX); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_MDR_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_MDR_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, mdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + uint8_t +*rfc5444_link_metric_mdr_rx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t mdr) +{ +printf("rfc5444_link_metric_mdr_rx_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_MDR_METRIC_RX); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_MDR_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_MDR_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, mdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + + +/** + * NAME + * rfc5444_link_metric_cdr_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_cdr_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint64_t cdr) + * + * DESCRIPTION + * Call this function to insert the current datarate TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * cdr - the current data rate, in bits per second + * (bps), achieved on the link. If there is no + * distinction between maximum and current + * data rate, current data rate SHOULD be set + * equal to the maximum data rate. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | CDR | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | CDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 8 | CDR contd | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + */ +uint8_t +*rfc5444_link_metric_cdr_tx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t cdr) +{ +printf("rfc5444_link_metric_cdr_tx_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_CDR_METRIC_TX); + dest += sizeof(uint16_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_CDR_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_CDR_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, cdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +uint8_t +*rfc5444_link_metric_latency_tlv1 (rfc5444_encoder_state_t *p2encoder_state, + uint64_t latency) +{ +printf("rfc5444_link_metric_latency_tlv1\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_LATENCY_METRIC); + dest += sizeof(uint16_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_CDR_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_LATENCY_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, latency); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); + +} + +uint8_t +*rfc5444_link_metric_cdr_rx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t cdr) +{ +printf("rfc5444_link_metric_cdr_rx_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_CDR_METRIC_RX); + dest += sizeof(uint16_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_CDR_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_CDR_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLLONG(dest, cdr); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} +/** + * NAME + * rfc5444_link_metric_latency_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_latency_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint64_t latency) + * + * DESCRIPTION + * Call this function to insert the latency TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * latency - the transmission delay that a packet + * encounters as it is transmitted over the link. + * This is reported in absolute delay, in + * milliseconds. If latency cannot be calculated, + * a value of 0 should be reported. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | Latency | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 4 | Latency | + * +-+-+-+-+-+-+-+-+ + * + */ +uint8_t +*rfc5444_link_metric_latency_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint64_t latency) +{ +printf("rfc5444_link_metric_latency_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_LATENCY_METRIC); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_LATENCY_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_LATENCY_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLONG(dest, latency); + dest += sizeof(uint64_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/** + * NAME + * rfc5444_link_metric_resources_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t resources) + * + * DESCRIPTION + * Call this function to insert the resources TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * resources - a percentage, 0-100, representing the amount + * of remaining resources, such as battery power. + * If resources cannot be calculated, a value of + * 100 should be reported. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | Resources | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + */ +uint8_t +*rfc5444_link_metric_resources_tx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources) +{ +printf("rfc5444_link_metric_resources_tx_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_RESOURCES_METRIC_TX); + dest += sizeof(uint8_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, resources); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +uint8_t +*rfc5444_link_metric_resources_rx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources) +{ +printf("rfc5444_link_metric_resources_rx_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_RESOURCES_METRIC_RX); + dest += sizeof(uint8_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, resources); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +uint8_t +*rfc5444_link_metric_resources_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources) +{ +printf("rfc5444_link_metric_resources_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_RESOURCES_METRIC); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, resources); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} +/** + * NAME + * rfc5444_link_metric_rlq_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_link_metric_rq_tlv( + * rfc5444_encoder_state_t *p2encoder_state, + * uint8_t rlq) + * + * DESCRIPTION + * Call this function to insert the RLQ TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * rlq - a non-dimensional number, 0-100, representing + * the relative link quality. A value of 100 + * represents a link of the highest quality. If + * the RLQ cannot be calculated, a value of 100 + * should be reported. + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | RLQ | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + * + */ +uint8_t +*rfc5444_link_metric_rlq_tx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t rlq) +{ +printf("rfc5444_link_metric_rlq_tx_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_RLQ_METRIC_TX); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RLQ_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_RLQ_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, rlq); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +uint8_t +*rfc5444_link_metric_rlq_rx_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t rlq) +{ +printf("rfc5444_link_metric_rlq_rx_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_RLQ_METRIC_RX); + dest += sizeof(uint16_t); + +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RLQ_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_LINK_METRIC_RLQ_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, rlq); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} +/* + * MTU + */ +uint8_t +*rfc5444_mtu_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint16_t mtu) +{ +printf("rfc5444_mtu_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MTU); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_MTU_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, mtu); + dest += sizeof(uint16_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/* + * eft + */ +uint8_t +*rfc5444_link_metric_eft_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint32_t eft) +{ +printf("rfc5444_link_metric_eft_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_EFT_METRIC); + dest += sizeof(uint8_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_RLQ_FLAGS); + dest += sizeof(uint8_t); +#endif + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_METRIC_EFT_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTLONG(dest, eft); + dest += sizeof(uint32_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/** + * NAME + * rfc5444_status_tlv + * + * SYNOPSIS + * uint8_t + * *rfc5444_status_tlv(rfc5444_encoder_state_t *p2encoder_state, + * uint8_t status_code) + * + * DESCRIPTION + * Call this function to insert the peer status TLV. + * + * INPUT PARAMETERS + * p2es - pointer to the encoder state variable + * + * status_code - protocol status code reflecting success + * of previous request + * + * OUTPUT PARAMETERS + * p2es - updated + * + * RETURNS + * The pointer to the byte immediately following the TLV. + * + * NOTES + * + * Most Least + * Byte Significant Bit Significant Bit + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * 0 | TLV Code | Flags | Length | Status Code | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * + */ +uint8_t +*rfc5444_status_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t status_code) +{ +printf("rfc5444_status_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_STATUS); + dest += sizeof(uint16_t); +#if 0 + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_STATUS_FLAGS); + dest += sizeof(uint8_t); +#endif + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_STATUS_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, status_code); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/* Below TLV functions are added for DLEPv7 */ + +uint8_t +*rfc5444_ipv4_attached_subnet_tlv (rfc5444_encoder_state_t *p2encoder_state, uint8_t operation) + +{ +printf("rfc5444_ipv4_attached_subnet_tlv\n"); + uint8_t *dest; + char subnet[16]; + char local_ipv4_dot[IPV4_ADDR_STRING_LEN] = "255.255.255.0"; + ipv4_address_t ipv4_subnet_addr; + + ipv4_dot_decimal2digits(&ipv4_subnet_addr, local_ipv4_dot); + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_IPV4_ATTACHED_SUBNET); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, (RFC5444_TLV_IPV4_ATTACHED_SUBNET_LENGTH)); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, operation); + dest += sizeof(uint8_t); + + dest = ipv4_put_address(dest, &ipv4_subnet_addr); + + NETWORK_ORDER_PUTBYTE(dest, 24); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + + uint8_t +*rfc5444_ipv6_attached_subnet_tlv (rfc5444_encoder_state_t *p2encoder_state, + ipv6_address_t *ipv6_subnet_addr) +{ +printf("rfc5444_ipv6_attached_subnet_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV6_ADDRESS); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, (RFC5444_TLV_IPV6_ATTACHED_SUBNET_LENGTH)); + dest += sizeof(uint8_t); + + dest = ipv6_put_address(dest, ipv6_subnet_addr); + + NETWORK_ORDER_PUTBYTE(dest, 64); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +/* Suriya added for testing purpose */ +//vinod +/* +*rfc5444_ipv6_subnet_tlv_surya (rfc5444_encoder_state_t *p2encoder_state,uint8_t operation, +uint8_t subnet,ipv6_address_t *ipv6_subnet_addr) +*/ + + uint8_t +*rfc5444_ipv6_subnet_tlv (rfc5444_encoder_state_t *p2encoder_state,uint8_t operation, +uint8_t subnet,ipv6_address_t *ipv6_subnet_addr ) +{ +printf("rfc5444_ipv6_subnet_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_IPV6_ATTACHED_SUBNET); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, (RFC5444_TLV_IPV6_ATTACHED_SUBNET_LENGTH)); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, operation); + dest += sizeof(uint8_t); + + dest = ipv6_put_address(dest, ipv6_subnet_addr); + + NETWORK_ORDER_PUTBYTE(dest, subnet); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + + uint8_t +*rfc5444_optinal_signal_supported_tlv (rfc5444_encoder_state_t *p2encoder_state) +{ +printf("rfc5444_optional_signal_supported_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED_LENGTH); + dest += sizeof(uint8_t); + + /* Reserved bit */ + NETWORK_ORDER_PUTBYTE(dest, 0x00); + dest += sizeof(uint8_t); + NETWORK_ORDER_PUTBYTE(dest, 0x00); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_MSG_PEER_UPDATE_RES); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest,RFC5444_MSG_PEER_UPDATE_REQ); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_MSG_LINK_CHAR_RES); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest,RFC5444_MSG_LINK_CHAR_REQ); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + +uint8_t +*rfc5444_optinal_data_item_supported_tlv (rfc5444_encoder_state_t *p2encoder_state) +{ +printf("rfc5444_optional_data_item_supported_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED_LENGTH); + dest += sizeof(uint8_t); + + /* Reserved bit */ + NETWORK_ORDER_PUTBYTE(dest, 0x00); + dest += sizeof(uint8_t); + NETWORK_ORDER_PUTBYTE(dest, 0x00); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_RESOURCES_METRIC_RX); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_RESOURCES_METRIC_TX); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_RLQ_METRIC_TX); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_LINK_RLQ_METRIC_RX); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_CREDIT_WINDOW_STATUS); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_CREDIT_GRANT); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_CREDIT_REQUEST); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_VENDOR_EXTENSION); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV4_ATTACHED_SUBNET); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV6_ATTACHED_SUBNET); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + uint8_t +*rfc5444_vendor_extension_tlv (rfc5444_encoder_state_t *p2encoder_state) +{ +printf("rfc5444_vendor_extension_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_VENDOR_EXTENSION); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_VENDOR_EXTENSION_LENGTH); + dest += sizeof(uint8_t); + + /* Reserved bit */ + NETWORK_ORDER_PUTBYTE(dest, 0x00); + dest += sizeof(uint8_t); + NETWORK_ORDER_PUTBYTE(dest, 0x00); + dest += sizeof(uint8_t); + NETWORK_ORDER_PUTBYTE(dest, 0x00); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, VENDOR_OUI_LENGTH); + dest += sizeof(uint8_t); + +/* Vendor OUI */ + NETWORK_ORDER_PUTBYTE(dest, 0xAB); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, 0xBC); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, 0xCD); + dest += sizeof(uint8_t); + +/* Device type*/ + NETWORK_ORDER_PUTSHORT(dest, 0xBABE); + dest += sizeof(uint16_t); + +/*PAYLOAD in TLV format*/ + NETWORK_ORDER_PUTBYTE(dest, VENDOR_SPECIFIC_PAYLOAD_TYPE); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, VENDOR_SPECIFIC_PAYLOAD_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, 0xEF); + dest += sizeof(uint8_t); + NETWORK_ORDER_PUTBYTE(dest, 0xDC); + dest += sizeof(uint8_t); + NETWORK_ORDER_PUTBYTE(dest, 0xBA); + dest += sizeof(uint8_t); + NETWORK_ORDER_PUTBYTE(dest, 0xBD); + dest += sizeof(uint8_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} +/* + * ipv4 connection point tlv + * + */ +uint8_t +*rfc5444_ipv4_connection_point_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint16_t port, + ipv4_address_t *ipv4) +{ +printf("rfc5444_ipv4_connection_point_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_IPV4_CONNECTION_POINT); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTSHORT(dest, (RFC5444_TLV_IPV4_CONNECTION_POINT_LENGTH)); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_IPV4_CONNECTION_POINT_FLAGS); + dest += sizeof(uint8_t); + + dest = ipv4_put_address(dest, ipv4); + + NETWORK_ORDER_PUTSHORT(dest, port); + dest += sizeof(uint16_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + diff --git a/dlep_radio_ipv6/rfc5444_encoder_tlv.h b/dlep_radio_ipv6/rfc5444_encoder_tlv.h new file mode 100644 index 0000000..a50eb45 --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_encoder_tlv.h @@ -0,0 +1,197 @@ +/*---------------------------------------------------------------------- + * rfc5444_encoder_tlv.h -- routine prototypes to encode TLVs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __RFC5444_ENCODER_TLV_H__ +#define __RFC5444_ENCODER_TLV_H__ + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_encoder.h" + + + +extern uint8_t +*rfc5444_identification_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t router_id, + uint32_t client_id, + uint8_t heartbeat_interval); + +extern uint8_t +*rfc5444_version_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint16_t version_major, + uint16_t version_minor); + + +extern uint8_t +*rfc5444_peer_tlv(rfc5444_encoder_state_t *p2encoder_state, + char *peer_type_string); + + +extern uint8_t +*rfc5444_mac_address_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t mac_address[]); + + +extern uint8_t +*rfc5444_ipv4_address_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv4_address_t *ipv4); + +extern uint8_t +*rfc5444_ipv6_address_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, + ipv6_address_t *ipv6_dest_addr); + + +extern uint8_t +*rfc5444_link_metric_mdr_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t mdr); + +extern uint8_t +*rfc5444_link_metric_mdr_rx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t mdr); + +extern uint8_t +*rfc5444_link_metric_cdr_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t cdr); +extern uint8_t +*rfc5444_link_metric_latency_tlv1(rfc5444_encoder_state_t *p2encoder_state, + uint64_t latency); + +extern uint8_t +*rfc5444_link_metric_cdr_rx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t cdr); + +extern uint8_t +*rfc5444_link_metric_latency_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t latency); + +extern uint8_t +*rfc5444_link_metric_resources_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources); + +extern uint8_t +*rfc5444_link_metric_resources_rx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources); + +extern uint8_t +*rfc5444_link_metric_rlq_tx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t rlq); + +extern uint8_t +*rfc5444_link_metric_rlq_rx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t rlq); + +extern uint8_t +*rfc5444_link_metric_eft_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint32_t eft); + + +extern uint8_t +*rfc5444_status_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t termination_code); + + +extern uint8_t +*rfc5444_datarate_request_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t requested_cdr); + + +extern uint8_t +*rfc5444_datarate_request_ack_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t requested_cdr, + uint32_t granted_cdr); +extern uint8_t +*rfc5444_port_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint16_t port); +extern uint8_t +*rfc5444_credit_window_status_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t mrw, uint64_t rrw); +extern uint8_t +*rfc5444_credit_grand_request_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint64_t cgr); +extern uint8_t +*rfc5444_credit_request_tlv(rfc5444_encoder_state_t *p2encoder_state); + +extern uint8_t +*rfc5444_heartbeat_interval_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t hbt); + + +/* Below TLV functions are added for DLEPv7 */ + +extern uint8_t +*rfc5444_ipv4_attached_subnet_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation); + +//vinod + +extern uint8_t +*rfc5444_ipv6_attached_subnet_tlv (rfc5444_encoder_state_t *p2encoder_state, + ipv6_address_t *ipv6_subnet); + + +//vinod +extern uint8_t +*rfc5444_ipv6_subnet_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint8_t operation, uint8_t subnet,ipv6_address_t *ipv6_subnet_addr); + + +/* Below TLV functions are added for DLEPv27 */ +extern uint8_t +*rfc5444_link_metric_resources_rx_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint8_t resources); + +extern uint8_t +*rfc5444_mtu_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint16_t mtu); + +extern uint8_t +*rfc5444_ipv4_connection_point_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint16_t port, + ipv4_address_t *ipv4); + +extern uint8_t +*rfc5444_optinal_signal_supported_tlv (rfc5444_encoder_state_t *p2encoder_state); + +extern uint8_t +*rfc5444_optinal_data_item_supported_tlv (rfc5444_encoder_state_t *p2encoder_state); + +extern uint8_t +*rfc5444_vendor_extension_tlv (rfc5444_encoder_state_t *p2encoder_state); + + +#endif + + diff --git a/dlep_radio_ipv6/rfc5444_experimental_tlv.c b/dlep_radio_ipv6/rfc5444_experimental_tlv.c new file mode 100644 index 0000000..7778d39 --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_experimental_tlv.c @@ -0,0 +1,264 @@ +/*------------------------------------------------------------------ + * rfc5444_experimental_tlv.c -- routines for standard TLVs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include + +#include "safe_types.h" +#include "network_order.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" +#include "rfc5444_decoder.h" + +#include "rfc5444_experimental_tlv.h" + + + +#define RFC5444_TLV_EXPER_8 ( 253 ) +#define RFC5444_TLV_EXPER_8_LENGTH ( 4 ) + +#define RFC5444_TLV_EXPER_16 ( 254 ) +#define RFC5444_TLV_EXPER_16_LENGTH ( 4 ) + + +#define RFC5444_DEBUG printf +#define DEBUG_FUNCTION __FUNCTION__ +#define DEBUG_LINE __LINE__ + + + +/* + * RFC 5444 defines TLVs as + * + * := + * + * ? + * (?)? + * (?)? + * + * This is referred to as the T-F-L-V format. The + * field is used to describe the length field size, 8-bits + * or 16-bits as well as the presence of the value or not. + * + * The standard TLV encoding does not specify the + * field. The flag field is not needed as the tlv_code itself + * describes the value by definition of the code itself. + * http://en.wikipedia.org/wiki/Type-length-value + * + * This file experiments with the standard TLV format + * in RFC5444 formatting. It is also a good test for + * the decoder. + */ + +/* + * Experimental 8-bit length + */ +uint8_t +*rfc5444_exper_8_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint32_t parameter) +{ +printf("rfc5444_exper_8_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_EXPER_8); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_EXPER_8_LENGTH); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTLONG(dest, parameter); + dest += sizeof(uint32_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/* + * Experimental 16-bit length + */ +uint8_t +*rfc5444_exper_16_tlv (rfc5444_encoder_state_t *p2encoder_state, + uint32_t parameter) +{ +printf("rfc5444_exper_16_tlv\n"); + uint8_t *dest; + + dest = p2encoder_state->buildit_ptr; + + NETWORK_ORDER_PUTBYTE(dest, RFC5444_TLV_EXPER_16); + dest += sizeof(uint8_t); + + NETWORK_ORDER_PUTSHORT(dest, RFC5444_TLV_EXPER_16_LENGTH); + dest += sizeof(uint16_t); + + NETWORK_ORDER_PUTLONG(dest, parameter); + dest += sizeof(uint32_t); + + p2encoder_state->buildit_ptr = dest; + return (dest); +} + + +/* + * Experimental 8-bit length field decoder + */ +static rfc5444_rc_t +rfc5444_decoder_exper_8_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *scratch_pad, + boolean_t verbose) +{ +printf("rfc5444_decoder_exper_8_tlv\n"); + uint8_t tlv_length; + uint32_t parameter; + + NETWORK_ORDER_GETBYTE(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint8_t); + p2decoder_state->tlv_block_length -= sizeof(uint8_t); + + if (tlv_length != RFC5444_TLV_EXPER_8_LENGTH) { + if (verbose) { + RFC5444_DEBUG("%s-%u ERROR: invalid length tlv_code=%u " + "len=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + tlv_code, + tlv_length); + } + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, parameter); + p2decoder_state->parse_ptr += sizeof(uint32_t); + p2decoder_state->tlv_block_length -= sizeof(uint32_t); + + if (verbose) { + RFC5444_DEBUG("%s-%u %s parameter=0x%0x \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + parameter); + } + return (RC_RFC5444_OK); +} + + +/* + * Experimental 16-bit length field decoder + */ +static rfc5444_rc_t +rfc5444_decoder_exper_16_tlv ( + uint16_t tlv_code, + rfc5444_decoder_state_t *p2decoder_state, + void *scratch_pad, + boolean_t verbose) +{ +printf("rfc5444_decoder_exper_16_tlv\n"); + uint16_t tlv_length; + uint32_t parameter; + + NETWORK_ORDER_GETSHORT(p2decoder_state->parse_ptr, tlv_length); + p2decoder_state->parse_ptr += sizeof(uint16_t); + p2decoder_state->tlv_block_length -= sizeof(uint16_t); + + if (tlv_length != RFC5444_TLV_EXPER_16_LENGTH) { + if (verbose) { + RFC5444_DEBUG("%s-%u ERROR: invalid length tlv_code=%u " + "len=%u \n", + DEBUG_FUNCTION, + DEBUG_LINE, + tlv_code, + tlv_length); + } + return (RC_RFC5444_INVALID_TLV_LENGTH); + } + + NETWORK_ORDER_GETLONG(p2decoder_state->parse_ptr, parameter); + p2decoder_state->parse_ptr += sizeof(uint32_t); + p2decoder_state->tlv_block_length -= sizeof(uint32_t); + + if (verbose) { + RFC5444_DEBUG("%s-%u %s parameter=0x%0x \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rfc5444_tlv_code2string(tlv_code), + parameter); + } + return (RC_RFC5444_OK); +} + + +/* + * + * NAME + * rfc5444_experimental_tlv_init + * + * SYNOPSIS + * rfc5444_rc_t + * rfc5444_experimental_tlv_init(void) + * + * DESCRIPTION + * This function must be called to register the experimental + * TLV decoders. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_RFC5444_OK - success + * error otherwise + *- + */ +rfc5444_rc_t +rfc5444_experimental_tlv_init (void) +{ + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_EXPER_8, + &rfc5444_decoder_exper_8_tlv); + + rfc5444_decoder_tlv_register_cb(RFC5444_TLV_EXPER_16, + &rfc5444_decoder_exper_16_tlv); + + return (RC_RFC5444_OK); +} + + diff --git a/dlep_radio_ipv6/rfc5444_experimental_tlv.h b/dlep_radio_ipv6/rfc5444_experimental_tlv.h new file mode 100644 index 0000000..65a4b32 --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_experimental_tlv.h @@ -0,0 +1,56 @@ +/*------------------------------------------------------------------ + * rfc5444_experimental_tlv.h -- prototypes for stndard TLV APIs + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + *------------------------------------------------------------------ + */ + +#ifndef __RFC5444_EXPERIMENTAL_TLV__ +#define __RFC5444_EXPERIMENTAL_TLV__ + +#include "safe_types.h" +#include "rfc5444_types.h" +#include "rfc5444_encoder.h" + + +extern uint8_t +*rfc5444_exper_8_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t parameter); + + +extern uint8_t +*rfc5444_exper_16_tlv(rfc5444_encoder_state_t *p2encoder_state, + uint32_t parameter); + + +extern rfc5444_rc_t +rfc5444_experimental_tlv_init(void); + +#endif + + diff --git a/dlep_radio_ipv6/rfc5444_packet_header.c b/dlep_radio_ipv6/rfc5444_packet_header.c new file mode 100644 index 0000000..3d9853c --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_packet_header.c @@ -0,0 +1,179 @@ +/*------------------------------------------------------------------ + * rfc5444_packet_header.c -- + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include + +#include "safe_types.h" +#include "network_order.h" + +#include "rfc5444_packet_header.h" + + + +#define RFC5444_VERSION ( 0 ) + +/* + * This will change when authentication is supported. + */ +#define RFC5444_PACKET_FLAGS ( 2 ) + + +/* + * RFC5444 Control Header + * + * 0 1 2 3 + * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 + * +-+-+-+-+-+-+-+-+ + * | | | + * | Vers | Flags | + * | | | + * +-+-+-+-+-+-+-+-+ + * + */ +#define RFC5444_PACKET_HDR_VERSION_MASK ( 0xF0 ) +#define RFC5444_PACKET_HDR_VERSION_SHIFT ( 4 ) + +#define RFC5444_PACKET_HDR_FLAGS_MASK ( 0x0F ) +#define RFC5444_PACKET_HDR_FLAGS_SHIFT ( 0 ) + + + +/** + * NAME + * rfc5444_add_packet_header + * + * SYNOPSIS + * uint8_t + * *rfc5444_add_packet_header(uint8_t *dest) + * + * DESCRIPTION + * Call this function to add the RFC5444 packet header + * when constructing a message. + * + * INPUT PARAMETERS + * dest - pointer to where the RFC5444 header is placed + * + * OUTPUT PARAMETERS + * dest - buffer is modified with the packet header + * + * RETURN VALUES + * Pointer to data area just beyond the newly added + * RFC5444 header. + * + * NOTES + * ASSUME all pointers are valid + */ +uint8_t +*rfc5444_add_packet_header (uint8_t *dest, uint8_t flags) +{ +printf("rfc5444_add_packet_header\n"); + uint8_t rfc5444_header; + + /* all fields are defaulted to zero */ + rfc5444_header = 0; + + rfc5444_header = (flags & RFC5444_PACKET_HDR_FLAGS_MASK); + + rfc5444_header |= ((RFC5444_VERSION << RFC5444_PACKET_HDR_VERSION_SHIFT) & + RFC5444_PACKET_HDR_VERSION_MASK); + + rfc5444_header |= rfc5444_header; + + NETWORK_ORDER_PUTBYTE(dest, rfc5444_header); + dest += sizeof(uint8_t); + return (dest); +} + + +/** + * NAME + * rfc5444_parse_packet_header + * + * SYNOPSIS + * uint8_t + * *rfc5444_parse_packet_header(uint8_t *msg, + * uint8_t *packet_flags, + * + * DESCRIPTION + * Call this function to extract the RFC5444 packet header + * fields when a message is received. + * + * INPUT PARAMETERS + * msg - pointer to the beginning of the RFC5444 message + * + * rsvrd - pointer to the reserved field + * + * rf0 - pointer to the rf0 flag + * + * OUTPUT PARAMETERS + * rsvrd - updated + * + * rf0 - updated + * + * RETURN VALUES: + * Pointer to data area just beyond the newly parsed + * RFC5444 header. + * NULL if the version is not supported. + * + * NOTES + * ASSUME all pointers are valid + * + */ +uint8_t +*rfc5444_parse_packet_header (uint8_t *msg, + uint8_t *packet_header_flags) +{ +printf("rfc5444_parse_packet_header\n"); + uint8_t rfc5444_packet_header; + uint8_t rfc5444_version; + + *packet_header_flags = 0; + + NETWORK_ORDER_GETBYTE(msg, rfc5444_packet_header); + + rfc5444_version = ((rfc5444_packet_header & + RFC5444_PACKET_HDR_VERSION_MASK) >> + RFC5444_PACKET_HDR_VERSION_SHIFT); + + if (rfc5444_version == RFC5444_VERSION) { + *packet_header_flags = ((rfc5444_packet_header & + RFC5444_PACKET_HDR_FLAGS_MASK) >> + RFC5444_PACKET_HDR_FLAGS_SHIFT); + + msg += sizeof(uint8_t); + } else { + msg = NULL; + } + + return (msg); +} + + diff --git a/dlep_radio_ipv6/rfc5444_packet_header.h b/dlep_radio_ipv6/rfc5444_packet_header.h new file mode 100644 index 0000000..3b1f34a --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_packet_header.h @@ -0,0 +1,49 @@ +/*------------------------------------------------------------------ + * rfc5444_packet_header.h -- + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __RFC5444_PACKET_HEADER_H__ +#define __RFC5444_PACKET_HEADER_H__ + +#include "safe_types.h" + + +extern uint8_t +*rfc5444_add_packet_header(uint8_t *dest, + uint8_t packet_header_flags); + + +extern uint8_t +*rfc5444_parse_packet_header(uint8_t *msg, + uint8_t *packet_header_flags); + + +#endif + diff --git a/dlep_radio_ipv6/rfc5444_scratch_pad.c b/dlep_radio_ipv6/rfc5444_scratch_pad.c new file mode 100644 index 0000000..857d27a --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_scratch_pad.c @@ -0,0 +1,384 @@ +/*---------------------------------------------------------------------- + * rfc5444_scratch_pad.c -- Routines to manage parsed data + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" +#include "rfc5444_scratch_pad.h" + + +/** + * NAME + * rfc5444_show_packet_scratch_pad + * + * SYNOPSIS + * #include "rfc5444_scratch_pad.h" + * void + * rfc5444_show_packet_scratch_pad( + * rfc5444_packet_scratch_pad_t *scratch_pad) + * + * DESCRIPTION + * This function is used to display the packet scratch pad + * to facilitate debugging and integration. + * + * INPUT PARAMETERS + * pkt_scratch_pad - This is a pointer to the packet scratch + * pad area + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +rfc5444_show_packet_scratch_pad ( + rfc5444_packet_scratch_pad_t *pkt_scratch_pad) +{ +printf("rfc5444_show_packet_scratch_pad\n"); + if (!pkt_scratch_pad) { + return; + } + + printf("\nPacket Scratch Pad \n"); + + if (pkt_scratch_pad->sequence_present) { + printf(" sequence number=%u \n", + pkt_scratch_pad->sequence); + } + + if (pkt_scratch_pad->router_id_present) { + printf(" router id=%u \n", + pkt_scratch_pad->router_id); + } + + if (pkt_scratch_pad->client_id_present) { + printf(" client id=%u \n", + pkt_scratch_pad->client_id); + } + + if (pkt_scratch_pad->peer_heartbeat_interval_present) { + printf(" peer heartbeat interval=%u seconds \n", + pkt_scratch_pad->peer_heartbeat_interval); + } + + return; +} + + +/** + * NAME + * rfc5444_show_message_scratch_pad + * + * SYNOPSIS + * #include "rfc5444_scratch_pad.h" + * void + * rfc5444_show_message_scratch_pad( + * rfc5444_message_scratch_pad_t *scratch_pad) + * + * DESCRIPTION + * This function is used to display the message scratch pad to + * facilitate debugging and ntegration. + * + * INPUT PARAMETERS + * msg_scratch_pad - This is a pointer to the message scratch + * pad area + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +rfc5444_show_message_scratch_pad ( + rfc5444_message_scratch_pad_t *msg_scratch_pad) +{ +printf("rfc5444_show_message_scratch_pad\n"); + if (!msg_scratch_pad) { + return; + } + + printf("Message Scratch Pad \n"); + + printf(" message code=%u %s \n", + msg_scratch_pad->message_code, + rfc5444_message_code2string(msg_scratch_pad->message_code)); + + /* if (msg_scratch_pad->sequence_present) { + printf(" sequence number=%u \n", + msg_scratch_pad->sequence); + } */ + + if (msg_scratch_pad->major_version_present || + msg_scratch_pad->minor_version_present) { + printf(" DLEP version=%u.%u \n", + msg_scratch_pad->major_version, + msg_scratch_pad->minor_version); + } + + if (msg_scratch_pad->status_code_present) { + printf(" status code=%u \n", + msg_scratch_pad->status_code); + } + + if (msg_scratch_pad->mac_address_present) { + mac_print_address(" MAC=", msg_scratch_pad->mac_address); + } + + if (msg_scratch_pad->ipv4_address_present) { + printf(" IPv4 operation=%u \n", + msg_scratch_pad->ipv4_operation); + ipv4_print_address(" IPv4", &msg_scratch_pad->ipv4_address); + } + + if (msg_scratch_pad->ipv6_address_present) { + printf(" IPv6 operation=%u \n", + msg_scratch_pad->ipv6_operation); + ipv6_print_address(" IPv6", &msg_scratch_pad->ipv6_address); + } + + if (msg_scratch_pad->rlq_present) { + printf(" rlq tx=%u percent \n", + msg_scratch_pad->rlq_tx); + + printf(" rlq rx=%u percent \n", + msg_scratch_pad->rlq_rx); + } + + if (msg_scratch_pad->resources_present) { + printf(" resources =%u percent\n", + msg_scratch_pad->resources); + + } + + if (msg_scratch_pad->latency_present) { + printf(" latency=%llu milliseconds \n", + msg_scratch_pad->latency); + } + + if (msg_scratch_pad->cdr_present) { + printf(" cdr tx=%llu bps \n", + msg_scratch_pad->cdr_tx); + + printf(" cdr rx=%llu bps \n", + msg_scratch_pad->cdr_rx); + } + + if (msg_scratch_pad->mdr_present) { + printf(" mdr tx=%llu bps\n", + msg_scratch_pad->mdr_tx); + + printf(" mdr rx=%llu bps\n", + msg_scratch_pad->mdr_rx); + } + + if (msg_scratch_pad->mtu_present) { + printf(" mtu=%u \n", + msg_scratch_pad->mtu); + } + + return; +} + + +/** + * NAME + * rfc5444_scrub_packet_scratch_pad + * + * SYNOPSIS + * #include "rfc5444_scratch_pad.h" + * void + * rfc5444_scrub_packet_scratch_pad( + * rfc5444_packet_scratch_pad_t *pkt_scratch_pad) + * + * DESCRIPTION + * This function is used to scrub the packet scratch pad + * prior to parsing a RFC5444 packet. + * + * INPUT PARAMETERS + * scratch_pad - This is a pointer to the scratch pad area + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +rfc5444_scrub_packet_scratch_pad ( + rfc5444_packet_scratch_pad_t *pkt_scratch_pad) +{ +printf("rfc5444_srcub_packet_scratch\n"); + if (!pkt_scratch_pad) { + return; + } + + pkt_scratch_pad->sequence = 0; + pkt_scratch_pad->sequence_present = FALSE; + + pkt_scratch_pad->router_id = 0; + pkt_scratch_pad->router_id_present = FALSE; + + pkt_scratch_pad->client_id = 0; + pkt_scratch_pad->client_id_present = FALSE; + + pkt_scratch_pad->peer_heartbeat_interval = 0; + pkt_scratch_pad->peer_heartbeat_interval_present = FALSE; + + return; +} + +#if 0 +/* Below two init functions are added for DLEPv7 */ +static uint32_t init_optional_signal(void) { + + uint32_t opt_signal = 0; + + opt_signal |= (~(~0 << (RFC5444_MAX_MESSAGE_CODE - 1))); + + opt_signal &= (~(1 << RFC5444_MSG_PEER_UPDATE_RES)); + opt_signal &= (~(1 << RFC5444_MSG_LINK_CHAR_RES)); + + return opt_signal; +} + +static uint32_t init_optional_data_item(void) { + + uint32_t opt_data = 0; + + opt_data |= (~(~0 << (RFC5444_MAX_DATA_ITEM - 1))); + + opt_data &= (~(1 << RFC5444_TLV_LINK_RESOURCES_METRIC_RX)); + opt_data &= (~(1 << RFC5444_TLV_LINK_RESOURCES_METRIC_TX)); + opt_data &= (~(1 << RFC5444_TLV_CREDIT_WINDOW_STATUS)); + opt_data &= (~(1 << RFC5444_TLV_CREDIT_GRANT)); + opt_data &= (~(1 << RFC5444_TLV_CREDIT_REQUEST)); + opt_data &= (~(1 << RFC5444_TLV_VENDOR_EXTENSION)); + opt_data &= (~(1 << RFC5444_TLV_IPV4_ATTACHED_SUBNET)); + opt_data &= (~(1 << RFC5444_TLV_IPV6_ATTACHED_SUBNET)); + + return opt_data; +} +#endif +/** + * NAME + * rfc5444_scrub_message_scratch_pad + * + * SYNOPSIS + * #include "rfc5444_scratch_pad.h" + * void + * rfc5444_scrub_message_scratch_pad( + * rfc5444_message_scratch_pad_t *msg_scratch_pad) + * + * DESCRIPTION + * This function is used to scrub the message scratch pad + * prior to parsing a RFC5444 message. + * + * INPUT PARAMETERS + * scratch_pad - This is a pointer to the scratch pad area + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +rfc5444_scrub_message_scratch_pad ( + rfc5444_message_scratch_pad_t *msg_scratch_pad) +{ + if (!msg_scratch_pad) { + return; + } + + msg_scratch_pad->message_code = 0; + + msg_scratch_pad->major_version = 0; + msg_scratch_pad->major_version_present = FALSE; + + msg_scratch_pad->minor_version = 0; + msg_scratch_pad->minor_version_present = FALSE; + + msg_scratch_pad->sequence = 0; + msg_scratch_pad->sequence_present = FALSE; + + msg_scratch_pad->status_code = 0; + msg_scratch_pad->status_code_present = 0; + + mac_zero_address(msg_scratch_pad->mac_address); + msg_scratch_pad->mac_address_present = FALSE; + + ipv4_zero_address(&msg_scratch_pad->ipv4_address); + msg_scratch_pad->ipv4_address_present = FALSE; + + ipv6_zero_address(&msg_scratch_pad->ipv6_address); + msg_scratch_pad->ipv6_address_present = FALSE; + + strcpy(msg_scratch_pad->peer_type_description, " "); + msg_scratch_pad->peer_type_description[ + RFC5444_TLV_PEER_TYPE_MAX_LENGTH]='\0'; + + msg_scratch_pad->rlq_tx = 0; + msg_scratch_pad->rlq_rx = 0; + msg_scratch_pad->rlq_present = FALSE; + + msg_scratch_pad->resources = 0; + msg_scratch_pad->resources_present = FALSE; + + msg_scratch_pad->latency = 0; + msg_scratch_pad->latency_present = FALSE; + + msg_scratch_pad->cdr_tx = 0; + msg_scratch_pad->cdr_rx = 0; + msg_scratch_pad->cdr_present = FALSE; + + msg_scratch_pad->mdr_tx = 0; + msg_scratch_pad->mdr_rx = 0; + msg_scratch_pad->mdr_present = FALSE; + + msg_scratch_pad->mtu = 0; + msg_scratch_pad->mtu_present = FALSE; + +#if 0 +/* Below code is added for DLEPv7 */ + msg_scratch_pad->dlepv7_optional_signal = init_optional_signal(); + msg_scratch_pad->dlepv7_optional_data_item = init_optional_data_item(); +#endif + return; +} diff --git a/dlep_radio_ipv6/rfc5444_scratch_pad.h b/dlep_radio_ipv6/rfc5444_scratch_pad.h new file mode 100644 index 0000000..19656ae --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_scratch_pad.h @@ -0,0 +1,165 @@ +/*---------------------------------------------------------------------- + * rfc5444_scratch_pad.h -- data to manage parsed data + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __RFC5444_SCRATCH_PAD_H__ +#define __RFC5444_SCRATCH_PAD_H__ + +#include "safe_types.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" + +#include "rfc5444_types.h" + + + +/* + * message scratch pad - when a message is parsed, its + * data is first saved here so the peer or neighbor can + * be looked up. The required and optional TLVs can + * also be managed. + */ +typedef struct { + uint16_t sequence; + boolean_t sequence_present; + + uint32_t router_id; + boolean_t router_id_present; + + uint32_t client_id; + boolean_t client_id_present; + + uint8_t peer_heartbeat_interval; + boolean_t peer_heartbeat_interval_present; + +} rfc5444_packet_scratch_pad_t; + + + +/* + * message scratch pad - when a message is parsed, its + * data is first saved here so the peer or neighbor can + * be looked up. The required and optional TLVs can + * also be managed. + */ +typedef struct { + uint16_t message_code; + + uint16_t sequence; + boolean_t sequence_present; + + uint8_t major_version; + boolean_t major_version_present; + + uint8_t minor_version; + boolean_t minor_version_present; + + uint16_t status_code; + boolean_t status_code_present; + + uint8_t mac_address[MAC_ADDR_LEN_IN_BYTES]; + boolean_t mac_address_present; + + ipv4_address_t ipv4_address; + ipv4_address_t ipv4_attached_subnet; + uint8_t ipv4_operation; + boolean_t ipv4_address_present; + + ipv6_address_t ipv6_address; + ipv6_address_t ipv6_attached_subnet; + uint8_t ipv6_operation; + boolean_t ipv6_address_present; + + char peer_type_description[RFC5444_TLV_PEER_TYPE_MAX_LENGTH+1]; + + /* metrics */ + boolean_t rlq_present; + uint8_t rlq_tx; + uint8_t rlq_rx; + + boolean_t resources_present; + uint8_t resources_tx; + uint8_t resources_rx; + uint8_t resources; /* addded for v27 */ + + boolean_t latency_present; + uint64_t latency; + + boolean_t cdr_present; + uint64_t cdr_tx; + uint64_t cdr_rx; + + boolean_t mdr_present; + uint64_t mdr_tx; + uint64_t mdr_rx; + + uint16_t port; + uint32_t eft; + + boolean_t cws_present; + uint64_t mrw; + uint64_t rrw; + uint64_t cgr; + + boolean_t credit_req_present; + + uint32_t hbt; + + boolean_t mtu_present; + uint16_t mtu; /* added for v27 */ + +#if 0 + uint32_t dlepv7_optional_signal; + uint32_t dlepv7_optional_data_item; +#endif + +} rfc5444_message_scratch_pad_t; + + +extern void +rfc5444_show_packet_scratch_pad( + rfc5444_packet_scratch_pad_t *pkt_scratch_pad); + +extern void +rfc5444_show_message_scratch_pad( + rfc5444_message_scratch_pad_t *msg_scratch_pad); + +extern void +rfc5444_scrub_packet_scratch_pad( + rfc5444_packet_scratch_pad_t *pkt_scratch_pad); + +extern void +rfc5444_scrub_message_scratch_pad( + rfc5444_message_scratch_pad_t *msg_scratch_pad); + +#endif + + diff --git a/dlep_radio_ipv6/rfc5444_types.h b/dlep_radio_ipv6/rfc5444_types.h new file mode 100644 index 0000000..f57b0b2 --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_types.h @@ -0,0 +1,292 @@ +/*------------------------------------------------------------------ + * rfc5444_types.h -- RFC5444 types + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef ___RFC5444_TYPES__ +#define ___RFC5444_TYPES__ + + +#include "rfc5444_api_rc.h" + + + +#define SECONDS_TO_MILLISECONDS ( 1000 ) + + + +/* reasonable bounds for good measure */ +#define RFC5444_MIN_PACKET_LEN ( 3 ) +#define RFC5444_MAX_PACKET_LEN ( 1400 ) + +#define RFC5444_MIN_MESSAGE_LEN ( 3 ) +#define RFC5444_MAX_MESSAGE_LEN ( 500 ) + + + +/* + * packet header flag definitions + */ +#define PHASSEQNUM ( 0x08 ) /* ignored */ +#define PHASTLV ( 0x04 ) + +/* + * message header flag definitions + */ +#define MHASHORIG ( 0x80 ) /* not supported */ +#define MHASHOPLIMIT ( 0x40 ) /* not supported */ +#define MHASHOPCOUNT ( 0x20 ) /* not supported */ +#define MHASSEQNUM ( 0x10 ) +#define MHASADDRLEN ( 0x03 ) /* not supported */ + +/* + * TLV flag definitions + */ +#define THASTYPEEXT ( 0x80 ) /* not supported */ +#define THASSINGLEINDEX ( 0x40 ) /* not supported */ +#define THASMULTIINDEX ( 0x20 ) /* not supported */ +#define THASVALUE ( 0x10 ) +#define THASEXTLEN ( 0x08 ) +#define THASMULTIVALUE ( 0x04 ) /* not supported */ + + +/* + * Signal header flags + */ +#define DLEP_SIGNAL_FLAGS (0x444C4550) + +/* + * Status codes used in the Status TLV. + */ +typedef enum { + RFC5444_SUCCESS = 0, + RFC5444_ERROR, + RFC5444_REQUEST_DENIED = 2, + RFC5444_MSG_UNKNOWN = 128, + RFC5444_MSG_UNEXPECTED = 129, + RFC5444_INVALID_DATA = 130, + RFC5444_INVALID_DESTINATION = 131, + RFC5444_MSG_TIMEOUT = 132, +} rfc5444_status_code_type_t; + + +/* + * The max value for RLQ and Resources + */ +#define RFC5444_100_PERCENT ( 100 ) + +/* DLEP version implemented and supported */ +#define RFC5444_DLEP_MAJOR_VERSION ( 1 ) +#define RFC5444_DLEP_MINOR_VERSION ( 7 ) + + +/* + * When the TLV vector table is allocated, we add one to + * the max to account for the 0 based array. The TLV + * code is the index straight-up. 0--invalid, 1-255 valid. + */ +#define RFC5444_MAX_TLV_CODE ( 255 ) + + +/* + * RFC5444 TLV Codes + ***FIX - TLV codes to be defined with IANA + */ +typedef enum { + RFC5444_TLV_RESERVED = 0, + RFC5444_TLV_STATUS = 1, + RFC5444_TLV_IPV4_CONNECTION_POINT = 2, + RFC5444_TLV_IPV6_CONNECTION_POINT = 3, + RFC5444_TLV_PEER_TYPE = 4, + RFC5444_TLV_HEARTBEAT_INTERVAL = 5, + RFC5444_TLV_EXTENSION_SUPPORTED = 6, + + RFC5444_TLV_MAC_ADDRESS = 7, + RFC5444_TLV_IPV4_ADDRESS = 8, + RFC5444_TLV_IPV6_ADDRESS = 9, + RFC5444_TLV_IPV4_ATTACHED_SUBNET = 10, + RFC5444_TLV_IPV6_ATTACHED_SUBNET = 11, + + RFC5444_TLV_LINK_MDR_METRIC_RX = 12, + RFC5444_TLV_LINK_MDR_METRIC_TX = 13, + RFC5444_TLV_LINK_CDR_METRIC_RX = 14, + RFC5444_TLV_LINK_CDR_METRIC_TX = 15, + RFC5444_TLV_LINK_LATENCY_METRIC = 16, + RFC5444_TLV_LINK_RESOURCES_METRIC = 17, + RFC5444_TLV_LINK_RLQ_METRIC_RX = 18, + RFC5444_TLV_LINK_RLQ_METRIC_TX = 19, + + RFC5444_TLV_MTU = 20, + + RFC5444_MAX_DATA_ITEM = 21, + /* added to avoid build error of 27 since existing v7 needs below */ + RFC5444_TLV_VERSION, + RFC5444_TLV_PORT, + RFC5444_TLV_LINK_RESOURCES_METRIC_RX , + RFC5444_TLV_LINK_RESOURCES_METRIC_TX , + RFC5444_TLV_LINK_EFT_METRIC , + RFC5444_TLV_CREDIT_WINDOW_STATUS , + RFC5444_TLV_CREDIT_GRANT , + RFC5444_TLV_CREDIT_REQUEST , + RFC5444_TLV_VENDOR_EXTENSION, + RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED , + RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED , +} rfc5444_tlv_t; + + +/* + * Flag values used to encode and decode TLVs + */ +#define RFC5444_TLV_IDENTIFICATION_FLAGS ( 0x10 ) +#define RFC5444_TLV_VERSION_FLAGS ( 0x10 ) +#define RFC5444_TLV_PEER_TYPE_FLAGS ( 0x00 ) + +#define RFC5444_TLV_MAC_ADDRESS_FLAGS ( 0x10 ) +#define RFC5444_TLV_IPV4_ADDRESS_FLAGS ( 0x10 ) +#define RFC5444_TLV_IPV6_ADDRESS_FLAGS ( 0x10 ) + +#define RFC5444_TLV_LINK_METRIC_MDR_FLAGS ( 0x10 ) +#define RFC5444_TLV_LINK_METRIC_CDR_FLAGS ( 0x10 ) +#define RFC5444_TLV_LINK_METRIC_LATENCY_FLAGS ( 0x10 ) +#define RFC5444_TLV_LINK_METRIC_RESOURCES_FLAGS ( 0x10 ) +#define RFC5444_TLV_LINK_METRIC_RLQ_FLAGS ( 0x10 ) + +#define RFC5444_TLV_STATUS_FLAGS ( 0x10 ) +#define RFC5444_TLV_IPV4_CONNECTION_POINT_FLAGS ( 0x00 ) + +/* + * Lengths (bytes) used to encode and decode TLVs + */ +#define RFC5444_TLV_IDENTIFICATION_LENGTH ( 9 ) +#define RFC5444_TLV_VERSION_LENGTH ( 4 ) + + /* string length <= 80 */ +#define RFC5444_TLV_PEER_TYPE_MAX_LENGTH ( 160 ) + +#define RFC5444_TLV_MAC_ADDRESS_LENGTH ( 6 ) +#define RFC5444_TLV_IPV4_ADDRESS_LENGTH ( 5 ) /* + operation */ +#define RFC5444_TLV_IPV6_ADDRESS_LENGTH ( 17 ) /* + operation */ + +#define RFC5444_TLV_LINK_METRIC_MDR_LENGTH ( 8 ) +#define RFC5444_TLV_LINK_METRIC_CDR_LENGTH ( 8 ) +#define RFC5444_TLV_LINK_METRIC_LATENCY_LENGTH ( 8 ) +#define RFC5444_TLV_LINK_METRIC_RESOURCES_LENGTH ( 1 ) +#define RFC5444_TLV_LINK_METRIC_RLQ_LENGTH ( 1 ) +#define RFC5444_TLV_LINK_METRIC_EFT_LENGTH ( 4 ) +#define RFC5444_TLV_PORT_LENGTH ( 2 ) +#define RFC5444_TLV_CREDIT_WINDOW_STATUS_LENGTH ( 16 ) +#define RFC5444_TLV_STATUS_LENGTH ( 1 ) +#define RFC5444_TLV_CREDIT_GRANT_LENGTH ( 8 ) +#define RFC5444_TLV_CREDIT_REQUEST_LENGTH ( 1 ) +#define RFC5444_TLV_HEARTBEAT_INTERVAL_LENGTH ( 4 ) +#define RFC5444_TLV_MTU_LENGTH ( 2 ) +#define RFC5444_TLV_IPV4_CONNECTION_POINT_LENGTH ( 7 ) + +/* Below TLV's length are added for DLEPv7 */ +#define RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED_LENGTH ( 6 ) +#define RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED_LENGTH ( 12 ) +/* +Length (3) + OUI length(1) + VENDOR OUI (3 octets) ++ DEVICE TYPE (2) + PAYLOAD length (6 (T + L + V) = 15 +*/ +#define RFC5444_TLV_VENDOR_EXTENSION_LENGTH ( 15 ) +#define RFC5444_TLV_IPV4_ATTACHED_SUBNET_LENGTH ( 6 ) +#define RFC5444_TLV_IPV6_ATTACHED_SUBNET_LENGTH ( 18 ) + +/* For VENDOR EXTENSION TLV in DLEPv7 */ +#define VENDOR_OUI_LENGTH ( 3 ) +#define VENDOR_SPECIFIC_PAYLOAD_TYPE ( 30 ) +#define VENDOR_SPECIFIC_PAYLOAD_LENGTH 4 + +/* + * IPv4/6 addresses can be added or dropped by the + * RFC5444_MSG_NEIGHBOR_ADDRESS message. + */ +#define RFC5444_NO_ADDRESS ( 0x02 ) /* added to avoid error */ +#define RFC5444_EXISTING_ADD_ADDRESS ( 0x01 ) +#define RFC5444_DROP_ADDRESS ( 0x00 ) + + + + +/* + * RFC5444 Router-Radio Message codes + ***FIX - message codes to be defined with IANA + */ + +typedef enum { + RFC5444_SIG_RESERVED = 0, + + RFC5444_SIG_ATT_PEER_DISCOVERY, + + RFC5444_SIG_PEER_OFFER, + + RFC5444_MAX_SIGNAL_CODE +} rfc5444_sig_type_t; + +typedef enum { + RFC5444_MSG_RESERVED = 0, + + RFC5444_MSG_PEER_INIT_REQ, + RFC5444_MSG_PEER_INIT_RES, + + + RFC5444_MSG_PEER_UPDATE_REQ, + RFC5444_MSG_PEER_UPDATE_RES, + + RFC5444_MSG_PEER_TERM_REQ, + RFC5444_MSG_PEER_TERM_RES, + + RFC5444_MSG_NEIGHBOR_UP_REQ, + RFC5444_MSG_NEIGHBOR_UP_RES, + + RFC5444_MSG_NEIGHBOR_ANNOUNCE_REQ, + RFC5444_MSG_NEIGHBOR_ANNOUNCE_RES, + + RFC5444_MSG_NEIGHBOR_DOWN_REQ, + RFC5444_MSG_NEIGHBOR_DOWN_RES, + + RFC5444_MSG_NEIGHBOR_METRICS, + + RFC5444_MSG_LINK_CHAR_REQ, + RFC5444_MSG_LINK_CHAR_RES, + + RFC5444_MSG_PEER_HEARTBEAT, + + RFC5444_MAX_MESSAGE_CODE, + /* added to avoid build errors */ + RFC5444_MSG_DET_PEER_DISCOVERY, + RFC5444_MSG_NEIGHBOR_ADDRESS_REQ, + RFC5444_MSG_NEIGHBOR_ADDRESS_RES, + +} rfc5444_msg_type_t; + + +#endif + diff --git a/dlep_radio_ipv6/rfc5444_utils.c b/dlep_radio_ipv6/rfc5444_utils.c new file mode 100644 index 0000000..6c515db --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_utils.c @@ -0,0 +1,400 @@ +/*---------------------------------------------------------------------- + * rfc5444_utils.c -- RFC5444 utils + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#include + +#include "safe_types.h" +#include "rfc5444_types.h" + +#include "rfc5444_utils.h" + + +/** + * NAME + * r2rc2string + * + * SYNOPSIS + * #include "rfc5444_utils.h" + * char + * *rfc5444_rc2string(uint32_t rc) + * + * DESCRIPTION + * This function converts a RFC5444 return code to a string + * for display. + * + * INPUT PARAMETERS + * rc - The return code to be converted to a string + * + * OUTPUT PARAMETERS + * None + * + * RETURN VALUE + * A pointer to a string description of the return code + * + */ +char +*rfc5444_rc2string (uint32_t rc) +{ +printf("rfc5444_rc2string\n"); + char *p2text; + + switch (rc) { + + case RC_RFC5444_OK: + p2text = "RC_RFC5444_OK"; + break; + + case RC_RFC5444_NULL_POINTER: + p2text = "RC_RFC5444_NULL_POINTER"; + break; + + case RC_RFC5444_NO_RESOURCES: + p2text = "RC_RFC5444_NO_RESOURCES"; + break; + + case RC_RFC5444_STATE_ERROR: + p2text = "RC_RFC5444_STATE_ERROR"; + break; + + case RC_RFC5444_VERSION_ERROR: + p2text = "RC_RFC5444_VERSION_ERROR"; + break; + + case RC_RFC5444_INVALID_PACKET_HEADER: + p2text = "RC_RFC5444_INVALID_PACKET_HEADER"; + break; + + case RC_RFC5444_INVALID_PACKET_LENGTH: + p2text = "RC_RFC5444_INVALID_PACKET_LENGTH"; + break; + + case RC_RFC5444_INVALID_BLOCK_INDICATOR: + p2text = "RC_RFC5444_INVALID_BLOCK_INDICATOR"; + break; + + case RC_RFC5444_INVALID_MESSAGE_FLAG: + p2text = "RC_RFC5444_INVALID_MESSAGE_FLAG"; + break; + + case RC_RFC5444_INVALID_MESSAGE_MAL: + p2text = "RC_RFC5444_INVALID_MESSAGE_MAL"; + break; + + case RC_RFC5444_INVALID_MESSAGE_LENGTH: + p2text = "RC_RFC5444_INVALID_MESSAGE_LENGTH"; + break; + + case RC_RFC5444_INVALID_MESSAGE_SEQUENCE: + p2text = "RC_RFC5444_INVALID_MESSAGE_SEQUENCE"; + break; + + case RC_RFC5444_INVALID_MESSAGE_CODE: + p2text = "RC_RFC5444_INVALID_MESSAGE_CODE"; + break; + + case RC_RFC5444_INVALID_TLV_BLOCK_LENGTH: + p2text = "RC_RFC5444_INVALID_TLV_BLOCK_LENGTH"; + break; + + case RC_RFC5444_UNKNOWN_TLV_CODE: + p2text = "RC_RFC5444_UNKNOWN_TLV_CODE"; + break; + + case RC_RFC5444_INVALID_TLV_FLAG: + p2text = "RC_RFC5444_INVALID_TLV_FLAG"; + break; + + case RC_RFC5444_INVALID_TLV_LENGTH: + p2text = "RC_RFC5444_INVALID_TLV_LENGTH"; + break; + + default: + p2text = "RFC5444_UNKNOWN_RETURN_CODE"; + break; + } + return (p2text); +} + + +/** + * NAME + * rfc5444_tlv_code2string + * + * SYNOPSIS + * #include "rfc5444_utils.h" + * char + * *rfc5444_tlv_code2string(uint8_t tlv_code) + * + * DESCRIPTION + * This function converts a RFC5444 TLV code to a string + * for display. + * + * INPUT PARAMETERS + * tlv_code - The code to be converted to a string + * + * OUTPUT PARAMETERS + * None + * + * RETURN VALUE + * A pointer to a string description of the TLV code + * + */ +char +*rfc5444_tlv_code2string (uint16_t tlv_code) +{ +printf("rfc5444_tlv_code2string\n"); + char *p2text; + + switch (tlv_code) { +#if 0 + case RFC5444_TLV_IDENTIFICATION: + p2text = "RFC5444_TLV_IDENTIFICATION"; + break; +#endif + case RFC5444_TLV_VERSION: + p2text = "RFC5444_TLV_VERSION"; + break; + + case RFC5444_TLV_PORT: + p2text = "RFC5444_TLV_PORT"; + break; + + case RFC5444_TLV_PEER_TYPE: + p2text = "RFC5444_TLV_PEER_TYPE"; + break; + + case RFC5444_TLV_MAC_ADDRESS: + p2text = "RFC5444_TLV_MAC_ADDRESS"; + break; + + case RFC5444_TLV_IPV4_ADDRESS: + p2text = "RFC5444_TLV_IPV4_ADDRESS"; + break; + + case RFC5444_TLV_IPV6_ADDRESS: + p2text = "RFC5444_TLV_IPV6_ADDRESS"; + break; + + case RFC5444_TLV_LINK_MDR_METRIC_TX: + p2text = "RFC5444_TLV_LINK_MDR_TX_METRIC"; + break; + + case RFC5444_TLV_LINK_MDR_METRIC_RX: + p2text = "RFC5444_TLV_LINK_MDR_RX_METRIC"; + break; + + case RFC5444_TLV_LINK_CDR_METRIC_TX: + p2text = "RFC5444_TLV_LINK_CDR_TX_METRIC"; + break; + + case RFC5444_TLV_LINK_CDR_METRIC_RX: + p2text = "RFC5444_TLV_LINK_CDR_RX_METRIC"; + break; + + case RFC5444_TLV_LINK_LATENCY_METRIC: + p2text = "RFC5444_TLV_LINK_LATENCY_METRIC"; + break; + + case RFC5444_TLV_LINK_RESOURCES_METRIC_TX: + p2text = "RFC5444_TLV_LINK_RESOURCES_TX_METRIC"; + break; + + case RFC5444_TLV_LINK_RESOURCES_METRIC_RX: + p2text = "RFC5444_TLV_LINK_RESOURCES_RX_METRIC"; + break; + + case RFC5444_TLV_LINK_RLQ_METRIC_TX: + p2text = "RFC5444_TLV_LINK_RLQ_METRIC"; + break; + + case RFC5444_TLV_LINK_RLQ_METRIC_RX: + p2text = "RFC5444_TLV_LINK_RLQ_RX_METRIC"; + break; + + case RFC5444_TLV_HEARTBEAT_INTERVAL: + p2text = "RFC5444_TLV_HEARTBEAT_INTERVAL"; + break; + + case RFC5444_TLV_STATUS: + p2text = "RFC5444_TLV_STATUS"; + break; + + case RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED: + p2text = "RFC5444_TLV_OPTIONAL_SIGNAL_SUPPORTED"; + break; + + case RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED: + p2text = "RFC5444_TLV_OPTIONAL_DATA_ITEM_SUPPORTED"; + break; + + case RFC5444_TLV_VENDOR_EXTENSION: + p2text = "RFC5444_TLV_VENDOR_EXTENSION"; + break; + + case RFC5444_TLV_IPV4_ATTACHED_SUBNET: + p2text = "RFC5444_TLV_IPV4_ATTACHED_SUBNET"; + break; + + case RFC5444_TLV_IPV6_ATTACHED_SUBNET: + p2text = "RFC5444_TLV_IPV6_ATTACHED_SUBNET"; + break; + + /* added for dlepv 27 */ + + case RFC5444_TLV_LINK_RESOURCES_METRIC: + p2text = "RFC5444_TLV_LINK_RESOURCES_METRIC"; + break; + + case RFC5444_TLV_MTU: + p2text = "RFC5444_TLV_MTU"; + break; + + default: + p2text = "RFC5444_UNKNOWN_TLV_CODE"; + break; + } + return (p2text); +} + + +/** + * NAME + * rfc5444_message_code2string + * + * SYNOPSIS + * #include "rfc5444_utils.h" + * char + * *rfc5444_message_code2string(uint8_t message_code) + * + * DESCRIPTION + * This function converts a RFC5444 message code to a string + * for display. + * + * INPUT PARAMETERS + * message_code - The message code to be converted to a string + * + * OUTPUT PARAMETERS + * None + * + * RETURN VALUE + * A pointer to a string description of the message code + * + */ +char +*rfc5444_message_code2string (uint16_t message_code) +{ +printf("rfc5444_message_code2string"); + char *p2text; + + switch (message_code) { + /* case RFC5444_SIG_ATT_PEER_DISCOVERY: + p2text = "RFC5444_SIG_ATT_PEER_DISCOVERY"; + break; */ + + case RFC5444_MSG_DET_PEER_DISCOVERY: + p2text = "RFC5444_MSG_DET_PEER_DISCOVERY"; + break; + + /* case RFC5444_SIG_PEER_OFFER: + p2text = "RFC5444_SIG_PEER_OFFER"; + break; */ + + case RFC5444_MSG_PEER_INIT_REQ: + p2text = "RFC5444_MSG_PEER_INIT_REQ"; + break; + + case RFC5444_MSG_PEER_INIT_RES: + p2text = "RFC5444_MSG_PEER_INIT_RES"; + break; + + case RFC5444_MSG_PEER_HEARTBEAT: + p2text = "RFC5444_MSG_PEER_HEARTBEAT"; + break; + + case RFC5444_MSG_PEER_UPDATE_REQ: + p2text = "RFC5444_MSG_PEER_UPDATE_REQ"; + break; + + case RFC5444_MSG_PEER_UPDATE_RES: + p2text = "RFC5444_MSG_PEER_UPDATE_RES"; + break; + + case RFC5444_MSG_PEER_TERM_REQ: + p2text = "RFC5444_MSG_PEER_TERM_REQ"; + break; + + case RFC5444_MSG_PEER_TERM_RES: + p2text = "RFC5444_MSG_PEER_TERM_RES"; + break; + + case RFC5444_MSG_NEIGHBOR_UP_REQ: + p2text = "RFC5444_MSG_NEIGHBOR_UP_REQ"; + break; + + case RFC5444_MSG_NEIGHBOR_UP_RES: + p2text = "RFC5444_MSG_NEIGHBOR_UP_RES"; + break; + + case RFC5444_MSG_NEIGHBOR_DOWN_REQ: + p2text = "RFC5444_MSG_NEIGHBOR_DOWN_REQ"; + break; + + case RFC5444_MSG_NEIGHBOR_DOWN_RES: + p2text = "RFC5444_MSG_NEIGHBOR_DOWN_RES"; + break; + + case RFC5444_MSG_NEIGHBOR_METRICS: + p2text = "RFC5444_MSG_NEIGHBOR_METRICS"; + break; + + case RFC5444_MSG_NEIGHBOR_ADDRESS_REQ: + p2text = "RFC5444_MSG_NEIGHBOR_ADDRESS_REQ"; + break; + + case RFC5444_MSG_NEIGHBOR_ADDRESS_RES: + p2text = "RFC5444_MSG_NEIGHBOR_ADDRESS_RES"; + break; + + case RFC5444_MSG_LINK_CHAR_REQ: + p2text = "RFC5444_MSG_LINK_CHAR_REQ"; + break; + + case RFC5444_MSG_LINK_CHAR_RES: + p2text = "RFC5444_MSG_LINK_CHAR_RES"; + break; + + default: + p2text = "RFC5444_UNKNOWN_MESSAGE_CODE"; + break; + } + return (p2text); +} + diff --git a/dlep_radio_ipv6/rfc5444_utils.h b/dlep_radio_ipv6/rfc5444_utils.h new file mode 100644 index 0000000..bce8a1e --- /dev/null +++ b/dlep_radio_ipv6/rfc5444_utils.h @@ -0,0 +1,45 @@ +/*---------------------------------------------------------------------- + * rfc5444_utils.h -- utility prototypes + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +#ifndef __RFC5444_UTILS_H__ +#define __RFC5444_UTILS_H__ + +#include "safe_types.h" + + +extern char *rfc5444_rc2string(uint32_t rc); + +extern char *rfc5444_tlv_code2string(uint16_t tlv_code); + +extern char *rfc5444_message_code2string(uint16_t message_code); + +#endif + diff --git a/dlep_radio_ipv6/runtime_environment.h b/dlep_radio_ipv6/runtime_environment.h new file mode 100644 index 0000000..5971b60 --- /dev/null +++ b/dlep_radio_ipv6/runtime_environment.h @@ -0,0 +1,41 @@ +/*------------------------------------------------------------------ + * runtime_environment.h -- Abstractions + * + * Februrary 2002, Bo Berry + * + * Copyright (c) 2002-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __RUNTIME_ENVIRONMENT_H__ +#define __RUNTIME_ENVIRONMENT_H__ + + +#define LOCK_INTERRUPTS() +#define UNLOCK_INTERRUPTS() + + +#endif + diff --git a/dlep_radio_ipv6/safe_limits.h b/dlep_radio_ipv6/safe_limits.h new file mode 100644 index 0000000..b028026 --- /dev/null +++ b/dlep_radio_ipv6/safe_limits.h @@ -0,0 +1,195 @@ +/*------------------------------------------------------------------ + * safe_limits.h + * + * February 2009, Bo Berry + * + * Copyright (c) 2009-2011 by Cisco Systems + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __SAFE_LIMITS__ +#define __SAFE_LIMITS__ + +/* + * Abstract header file for portability. + */ + + +/* + * ANSI C - number of bits by type + */ +#ifndef CHAR_BIT +#define CHAR_BIT ( 8 ) +#endif + +#ifndef BYTE_BIT +#define BYTE_BIT ( 8 ) +#endif + +#ifndef SHORT_BIT +#define SHORT_BIT ( 16 ) +#endif + +#ifndef INT_BIT +#define INT_BIT ( 32 ) +#endif + +#ifndef LONG_BIT +// #define LONG_BIT ( 32 ) +#define LONG_BIT ( 64 ) +#endif + +#ifndef LONG_LONG_BIT +#define LONG_LONG_BIT ( 64 ) +#endif + +#ifndef POINTER_BIT +#define POINTER_BIT ( 64 ) +#endif + + + +#ifndef BYTE_MAX +#define BYTE_MAX ( 255 ) +#endif + +#ifndef SCHAR_MAX +#define SCHAR_MAX ( 127 ) +#define SCHAR_MIN ( -SCHAR_MAX - 1 ) +#endif + +#ifndef CHAR_MAX +#define CHAR_MAX ( 127 ) +#define CHAR_MIN ( -CHAR_MAX - 1 ) +#endif + +#ifndef UCHAR_MAX +#define UCHAR_MAX ( 0xff ) +#endif + +#ifndef SHRT_MAX +#define SHRT_MAX ( 32767 ) +#define SHRT_MIN ( -SHRT_MAX - 1 ) +#endif + +#ifndef USHRT_MAX +#define USHRT_MAX ( 0xffff ) +#endif + +#ifndef INT_MAX +#define INT_MAX ( 2147483647 ) +#define INT_MIN ( -INT_MAX - 1 ) +#endif + +#ifndef UINT_MAX +#define UINT_MAX ( 0xffffffff ) +#endif + +#ifndef LLONG_MAX +#define LLONG_MAX ( 9223372036854775807 ) +#define LLONG_MIN ( -LLONG_MAX - 1 ) +#endif + +#ifndef ULLONG_MAX +#define ULLONG_MAX ( 0xffffffffffffffff ) +#endif + + +#if LONG_BIT == INT_BIT + +#ifndef LONG_MAX +#define LONG_MAX ( INT_MAX) +#define LONG_MIN ( -LONG_MAX - 1 ) +#endif + +#ifndef ULONG_MAX +#define ULONG_MAX ( UINT_MAX ) +#endif + +#else + +#ifndef LONG_MAX +#define LONG_MAX ( LLONG_MAX) +#define LONG_MIN ( -LONG_MAX - 1 ) +#endif + +#ifndef ULONG_MAX +#define ULONG_MAX ( ULLONG_MAX ) +#endif + +#endif + + +#ifndef INT8_MIN +#define INT8_MIN ( SCHAR_MIN ) +#endif + +#ifndef INT8_MAX +#define INT8_MAX ( SCHAR_MAX ) +#endif + +#ifndef UINT8_MAX +#define UINT8_MAX ( UCHAR_MAX ) +#endif + +#ifndef INT16_MIN +#define INT16_MIN ( SHRT_MIN ) +#endif + +#ifndef INT16_MAX +#define INT16_MAX ( SHRT_MAX ) +#endif + +#ifndef UINT16_MAX +#define UINT16_MAX ( USHRT_MAX ) +#endif + +#ifndef INT32_MIN +#define INT32_MIN ( INT_MIN ) +#endif + +#ifndef INT32_MAX +#define INT32_MAX ( INT_MAX ) +#endif + +#ifndef UINT32_MAX +#define UINT32_MAX ( UINT_MAX ) +#endif + +#ifndef INT64_MIN +#define INT64_MIN ( LLONG_MIN ) +#endif + +#ifndef INT64_MAX +#define INT64_MAX ( LLONG_MAX ) +#endif + +#ifndef UINT64_MAX +#define UINT64_MAX ( ULLONG_MAX ) +#endif + + +#endif /* __SAFE_LIMITS__ */ + diff --git a/dlep_radio_ipv6/safe_types.h b/dlep_radio_ipv6/safe_types.h new file mode 100644 index 0000000..eafaa0a --- /dev/null +++ b/dlep_radio_ipv6/safe_types.h @@ -0,0 +1,139 @@ +/*------------------------------------------------------------------ + * safe_types.h + * + * March 2007, Bo Berry + * + * Copyright (c) 2007-2011 by Cisco Systems, Inc + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __SAFE_TYPES__ +#define __SAFE_TYPES__ + +#include + +#include "safe_limits.h" + + +/* + * Abstract header file for portability. + */ + +#ifndef TRUE +#define TRUE ( 1 ) +#endif + +#ifndef FALSE +#define FALSE ( 0 ) +#endif + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#ifndef boolean_t +typedef unsigned char boolean_t; +#endif + + + +#ifndef int8_t +typedef signed char int8_t; +#endif + +#ifndef int16_t +typedef short int16_t; +#endif + +#ifndef int32_t +typedef int int32_t; +#endif + +#ifndef uchar_t +typedef unsigned char uchar_t; +#endif + +#ifndef uint8_t +typedef unsigned char uint8_t; +#endif + +#ifndef uint16_t +typedef unsigned short uint16_t; +#endif + +#ifndef uint32_t +typedef unsigned int uint32_t; +#endif + +#ifndef uint64_t +//typedef unsigned long long uint64_t; +#endif + +#if 0 +#if POINTER_BIT == 64 +#ifndef intptr_t; +typedef long long intptr_t; +#endif + +#ifndef uintptr_t; +typedef unsigned long long uintptr_t; +#endif + +#else + +#ifndef intptr_t; +typedef signed int intptr_t; +#endif +#ifndef uintptr_t; +typedef unsigned int uintptr_t; +#endif + +#endif +#endif + + +#ifndef ushort +typedef unsigned short ushort; +#endif + +#ifndef int_t +typedef int int_t; +#endif + +#ifndef uint_t +typedef unsigned int uint_t; +#endif + +#ifndef ulong +typedef unsigned long ulong; +#endif + +#ifndef ulonglong +typedef unsigned long long ullong; +#endif + + +#endif /* __SAFE_TYPES__ */ + diff --git a/dlep_radio_ipv6/sim_dlep_radio.c b/dlep_radio_ipv6/sim_dlep_radio.c new file mode 100644 index 0000000..ae45a8b --- /dev/null +++ b/dlep_radio_ipv6/sim_dlep_radio.c @@ -0,0 +1,511 @@ +/*---------------------------------------------------------------------- + * sim_dlep_radio.c -- Radio simulator + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *--------------------------------------------------------------------- + */ + +static char FileID[] = "@(#)dlep_radio "__DATE__" "__TIME__" "; + +#include +#include +#include +//#include +#include +#include + +#include "safe_types.h" +#include "cli.h" +#include "time_units.h" +#include "stw_system_timer.h" +#include "packet_dump.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" +#include "rfc5444_encoder_tlv.h" +#include "rfc5444_encoder.h" +#include "rfc5444_decoder.h" +#include "rfc5444_decoder_tlv.h" +#include "rfc5444_experimental_tlv.h" + + +#include "dlep_debug.h" +//#include "dlep_porter.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" +#include "dlep_client_timer.h" +#include "dlep_client_peer_fsm.h" +#include "sim_dlep_radio_cli.h" + +#include "dlep_porter.h" + +#include "dlep_client_message_parser.h" + + +#define MAXMESG ( 1500 ) + + +static char *instructions[] = { + " dlep_radio ", + " options: ", + " -d Debug peer flags, hex ", + " -f Configuration filename ", + " -h This help file ", + " -v Display version ", + " ", + }; + + +int TCP_READY = 0; +int TCP_CLIENT_READY = 0; + +/** + * NAME + * show_instructions + * + * DESCRIPTION + * Displays the help info to stdout. + * + * INPUT PARAMETERS + * None. + * + * RETURN VALUE + * None. + * + */ +static void +show_instructions( ) +{ + int i; + + for (i=0; ifilename, args); + break; + + case 'h': + show_instructions(); + exit (EXIT_SUCCESS); + break; + + case 'v': + printf("\n%s \n\n", &FileID[4]); + exit (EXIT_SUCCESS); + break; + + default: + fprintf(stderr, "\nUnknown option: %s\n", args); + exit (EXIT_SUCCESS); + break; + } + + } else { + return (i); + } + } + + return (argc); +} + + +/* + * This function is envoked as result of the interval timer expiration + */ +static void timer_handler (int signum) +{ + stw_system_timer_tick(); +} + + +int main (int argc, char **argv) +{ + dlep_config_t *p2config; + rfc5444_rc_t rc; + + uint8_t *tmp; + uint8_t udp_msg[2000]; + int32_t udp_msg_len; + uint8_t tcp_msg[2000]; + int32_t tcp_msg_len; + struct timeval timeout; + timeout.tv_sec = 0; + timeout.tv_usec = 0; + +#define SCENARIO_INDICATOR ( 0xFFFF ) + uint16_t scenario_key; + + /* + * interval timer variables + */ + struct sigaction sa; + struct itimerval timer; + uint32_t microseconds; + //uint32_t milliseconds; + dlep_context_peer_t *p2peer; + + struct sockaddr_in6 rcvd_msg_addr; +// struct sockaddr_in6 rcvd_msg_addr6; + + socklen_t rcvd_msg_socket_length; + ipv6_address_t rcvd_msg_socket_length6; + + int highsock=0; + fd_set readfds={0}; + boolean_t verbose; + rfc5444_decoder_init(&dlep_client_message_parser); + rfc5444_decoder_tlv_init(); + rfc5444_experimental_tlv_init(); + + dlep_cli_init(); + dlep_debug_init(&dlep_debug_flags, 0); + + dlep_default_config(); + p2config = dlep_get_config_ptr(); + + dlep_parse_user_options(p2config, argc, argv); + + dlep_read_config_file(p2config); + dlep_display_config(p2config); + + dlep_porter_init(p2config); + dlep_porter_open(p2config); + dlep_tcp_porter_open(p2config); + + /* + * create and configure the timer + */ +#define DLEP_STW_NUMBER_BUCKETS ( 512 ) +#define DLEP_STW_RESOLUTION ( 100 ) + + stw_system_timer_create(DLEP_STW_NUMBER_BUCKETS, + DLEP_STW_RESOLUTION, + "DLEP Timer"); + + /* + * Install the interval timer_handler as the signal handler + * for SIGALRM. + */ + memset (&sa, 0, sizeof (sa)); + sa.sa_handler = &timer_handler; + sigaction (SIGALRM, &sa, NULL); + + /* + * Configure the initial and post delay + */ + microseconds = milli_to_microseconds(DLEP_STW_RESOLUTION); + timer.it_value.tv_sec = 0; + timer.it_value.tv_usec = microseconds; + timer.it_interval.tv_sec = 0; + timer.it_interval.tv_usec = microseconds; + + /* + * Now start the interval timer. + */ + setitimer (ITIMER_REAL, &timer, NULL); + + + /* + * allocate and instantiate a peer for simulation + */ + p2peer = dlep_peer_allocate(&p2config->local_ipv6, + &p2config->local_ipv4, + p2config->local_udp_port, + p2config->local_tcp_port); + + if (!p2peer) { + printf("%s-%u ERROR: did not allocate peer block \n", + DEBUG_FUNCTION, + DEBUG_LINE); + exit (0); + } + dlep_peer_init(p2config, p2peer); + + /* set the peer udp/tcp port to router udp/tcp port and + * peer address to the router address */ + + p2peer->peer_udp_port = p2config->router_udp_port; + p2peer->peer_tcp_port = p2config->router_tcp_port; + + + p2peer->peer_ipv4.v4_addr.v4_addr32 = + p2config->router_ipv4.v4_addr.v4_addr32; +// memcpy(p2peer->peer_ipv6.v6_addr.v6_addr32,&p2config->router_ipv6.v6_addr.v6_addr32,sizeof(ipv6_address_t)); + +#if 0 + p2peer->peer_ipv6.v6_addr.v6_addr32[0] = + p2config->router_ipv6.v6_addr.v6_addr32[0]; + p2peer->peer_ipv6.v6_addr.v6_addr32[1] = + p2config->router_ipv6.v6_addr.v6_addr32[1]; + p2peer->peer_ipv6.v6_addr.v6_addr32[2] = + p2config->router_ipv6.v6_addr.v6_addr32[2]; + p2peer->peer_ipv6.v6_addr.v6_addr32[3] = + p2config->router_ipv6.v6_addr.v6_addr32[3]; +#endif + p2peer->peer_ipv6.v6_addr.v6_addr16[0] = + p2config->router_ipv6.v6_addr.v6_addr16[0]; + p2peer->peer_ipv6.v6_addr.v6_addr16[1] = + p2config->router_ipv6.v6_addr.v6_addr16[1]; + p2peer->peer_ipv6.v6_addr.v6_addr16[2] = + p2config->router_ipv6.v6_addr.v6_addr16[2]; + p2peer->peer_ipv6.v6_addr.v6_addr16[3] = + p2config->router_ipv6.v6_addr.v6_addr16[3]; + p2peer->peer_ipv6.v6_addr.v6_addr16[4] = + p2config->router_ipv6.v6_addr.v6_addr16[4]; + p2peer->peer_ipv6.v6_addr.v6_addr16[5] = + p2config->router_ipv6.v6_addr.v6_addr16[5]; + p2peer->peer_ipv6.v6_addr.v6_addr16[6] = + p2config->router_ipv6.v6_addr.v6_addr16[6]; + p2peer->peer_ipv6.v6_addr.v6_addr16[7] = + p2config->router_ipv6.v6_addr.v6_addr16[7]; + + +#if 0 + ipv4_print_address("router IPv4", &p2peer->peer_ipv4); + ipv6_print_address("router IPv6", &p2peer->peer_ipv6); +#endif + + /* position the DLEP IDs */ + p2peer->client_id = p2config->local_id; + p2peer->router_id = 0; + + p2config->client_lenght = sizeof(p2config->client); + printf("start on launch\n"); + +#if 0 + if (p2config->start_on_launch) { + ** start the state machine ** + if (p2config->start_on_discovery) { + dlep_client_fsm_engine(start_init_e, p2peer, NULL); + } else { + dlep_client_fsm_engine(peer_init_request_e, p2peer, NULL); + } + } +#endif + + cli_set_prompt(p2config->sim_name); + highsock = p2config->dlep_tcp_sockfd +1 ; + +#if 0 + FD_ZERO(&readfds); + FD_SET(0, &readfds); + FD_SET(p2config->dlep_udp_sockfd, &readfds); + FD_SET(p2config->dlep_tcp_sockfd, &readfds); +#endif + while (1) { + // printf("inside while loop of udp\n"); + + /* zero out the control header and initial payload data */ + memset(udp_msg, 0, 20); + + FD_ZERO(&readfds); + FD_SET(0, &readfds); + FD_SET(p2config->dlep_udp_sockfd, &readfds); + FD_SET(p2config->dlep_tcp_sockfd, &readfds); + + if (TCP_CLIENT_READY == 1) { + FD_SET(p2config->dlep_tcp_client_sockfd, &readfds); + //printf("tcp client is ready\n"); + } + + /* Since tcp socket is created after udp socket, it will have + * the highest-numbered file descriptor. + */ + // printf("before select\n"); + + if (select(highsock, &readfds, NULL, NULL, NULL) < 0 ) { + continue; + } + printf("after select call \n"); + + /* check is udp socket ready for read operation */ + if (FD_ISSET(p2config->dlep_udp_sockfd, &readfds)) { + //printf("ready udp\n"); + /* blocking call */ + udp_msg_len = dlep_udp_receive(p2config, + &rcvd_msg_addr, + &rcvd_msg_socket_length, + udp_msg, + 1400); + if (udp_msg_len < 1 ) { + continue; + } + printf("udp is failed to receive due to socket issue\n"); + + tmp = udp_msg; + NETWORK_ORDER_GETSHORT(udp_msg, scenario_key); + tmp += sizeof(uint16_t); + if (scenario_key == SCENARIO_INDICATOR) { + printf(" %s \n", tmp); + dlep_cli_engine((char *)tmp); + } else { + + rfc5444_scrub_packet_scratch_pad( + &p2peer->packet_scratch_pad); + rfc5444_scrub_message_scratch_pad( + &p2peer->message_scratch_pad); + + if (dlep_debug_flags & DLEP_INCOMING_TRACE_FLAG) { + packet_dump("INCOMING-", udp_msg, udp_msg_len); + } + + verbose = + ((dlep_debug_flags & DLEP_DECODER_TRACE_FLAG) ? TRUE : FALSE); + //printf("reaching decoder packet\n"); + rc = rfc5444_decoder_packet(udp_msg, + udp_msg_len, + p2peer, + verbose); + if (verbose) { + DLEP_DEBUG("%s-%u Packet decode rc=%u %s \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rc, + rfc5444_rc2string(rc) ); + } + } + } + + /* check is tcp socket ready for read operation */ + if (FD_ISSET(p2config->dlep_tcp_sockfd, &readfds)) { + p2config->dlep_tcp_client_sockfd = accept(p2config->dlep_tcp_sockfd, + (struct sockaddr *)&p2config->client, &p2config->client_lenght); + + if (p2config->dlep_tcp_client_sockfd < 0) { + perror("ERROR on accept"); + } + + FD_SET(p2config->dlep_tcp_client_sockfd, &readfds); + highsock = (p2config->dlep_tcp_client_sockfd + 1); + TCP_CLIENT_READY = 1; + } + + if (FD_ISSET(p2config->dlep_tcp_client_sockfd, &readfds) && TCP_CLIENT_READY) { + /* blocking call */ + tcp_msg_len = dlep_tcp_receive(p2config, + &rcvd_msg_addr, + &rcvd_msg_socket_length, + tcp_msg, + 1400); + printf("read bytes are %d\n",tcp_msg_len); + if (tcp_msg_len < 1 ) { + if (TCP_CLIENT_READY == 0) { + printf("\n TCP Connection closed"); + close(p2config->dlep_tcp_client_sockfd); + } + continue; + } + + tmp = tcp_msg; + NETWORK_ORDER_GETSHORT(tcp_msg, scenario_key); + tmp += sizeof(uint16_t); + if (scenario_key == SCENARIO_INDICATOR) { + printf(" %s \n", tmp); + dlep_cli_engine((char *)tmp); + } else { + + rfc5444_scrub_packet_scratch_pad( + &p2peer->packet_scratch_pad); + rfc5444_scrub_message_scratch_pad( + &p2peer->message_scratch_pad); + + if (dlep_debug_flags & DLEP_INCOMING_TRACE_FLAG) { + packet_dump("INCOMING-", tcp_msg, tcp_msg_len); + } + + verbose = + ((dlep_debug_flags & DLEP_DECODER_TRACE_FLAG) ? TRUE : FALSE); + rc = rfc5444_decoder_packet(tcp_msg, + tcp_msg_len, + p2peer, + verbose); + if (verbose) { + DLEP_DEBUG("%s-%u Packet decode rc=%u %s \n", + DEBUG_FUNCTION, + DEBUG_LINE, + rc, + rfc5444_rc2string(rc) ); + } + } + } + + + /* console */ + if (FD_ISSET(0, &readfds)) { + fgets((char *)udp_msg, MAXMESG, stdin); + dlep_cli_engine((char *)udp_msg); + } + + } + + exit (0); +} + + diff --git a/dlep_radio_ipv6/sim_dlep_radio_cli.c b/dlep_radio_ipv6/sim_dlep_radio_cli.c new file mode 100644 index 0000000..6ea6efc --- /dev/null +++ b/dlep_radio_ipv6/sim_dlep_radio_cli.c @@ -0,0 +1,2062 @@ +/*------------------------------------------------------------------ + * sim_dlep_radio_cli.c -- Radio simulator CLI support + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reerved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include +#include +#include + +#include "safe_types.h" +#include "cli.h" +#include "mac_address.h" +#include "ipv4_address.h" +#include "ipv6_address.h" +#include "stw_system_timer.h" + +#include "rfc5444_types.h" +#include "rfc5444_utils.h" + +#include "dlep_debug.h" +#include "dlep_debug_cli.h" +#include "dlep_client_neighbor_fsm.h" +#include "dlep_client_peer_fsm.h" +#include "dlep_message_builder.h" + +#include "dlep_context_neighbor.h" +#include "dlep_context_neighbor_management.h" +#include "dlep_context_peer.h" +#include "dlep_context_peer_management.h" +#include "dlep_client_timer.h" + +#include "dlep_source_cli.h" +#include "fuzz_dlep_cli.h" + +#include "sim_dlep_radio_cli.h" +#include "dlep_porter.h" + +static boolean_t started = FALSE; +//static boolean_t CREDIT_NOT_SUPPORTED = FALSE; +//static boolean_t CREDIT_ENABLED = FALSE; + + +/* + * directory record + */ +static cli_record_t show_system_dir; +static cli_record_t show_peer_dir; +static cli_record_t show_neighbor_dir; + +//static cli_record_t clear_peer_dir; +//static cli_record_t clear_neighbor_dir; + +static cli_record_t test_peer_dir; +static cli_record_t test_neighbor_dir; + + +/* + * allocate command records + */ +static cli_record_t system_start_cmd; +static cli_record_t system_stop_cmd; + +static cli_record_t show_timer_stats_cmd; + +static cli_record_t show_peer_all_cmd; +static cli_record_t show_peer_fsm_history_cmd; +static cli_record_t show_peer_fsm_table_cmd; + +//static cli_record_t show_neighbor_id_cmd; +static cli_record_t show_neighbor_mac_cmd; +static cli_record_t show_neighbors_on_peer_cmd; +static cli_record_t show_neighbor_fsm_history_cmd; +static cli_record_t show_neighbor_fsm_table_cmd; + + +/* + * test command records + */ +static cli_record_t test_session_init_cmd; +static cli_record_t test_peer_term_cmd; +static cli_record_t test_peer_update_cmd; +static cli_record_t test_peer_offer_cmd; +static cli_record_t test_peer_update_res_cmd; +static cli_record_t test_peer_term_res_cmd; +static cli_record_t test_peer_init_ack_cmd; +static cli_record_t test_peer_heartbeat_cmd; +static cli_record_t test_neighbor_up_cmd; +static cli_record_t test_neighbor_update_cmd; +//static cli_record_t test_neighbor_l3_up_cmd; +static cli_record_t test_neighbor_credit_up_cmd; +static cli_record_t test_neighbor_metric_up_cmd; + +static cli_record_t test_neighbor_ipv4_req_cmd; +static cli_record_t test_neighbor_ipv6_req_cmd; + +static cli_record_t test_neighbor_down_cmd; + +static cli_record_t test_neighbor_metrics_cmd; +static cli_record_t test_neighbor_rlq_cmd; +static cli_record_t test_neighbor_resources_cmd; +static cli_record_t test_neighbor_latency_cmd; +static cli_record_t test_neighbor_cdr_cmd; +static cli_record_t test_neighbor_mdr_cmd; +static cli_record_t test_neighbor_mtu_cmd; +int init = 0; + + + +static void +system_start (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + dlep_config_t *p2config; + + if (argv[1] && *argv[1] == '?') { + printf("start - starts the discovery process when MANUAL " + "is defined in the config file. \n"); + return; + } + + if (started) { + printf("\n"); + printf("Hey, the radio sim is already running!! \n"); + printf("\n"); + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + p2config = dlep_get_config_ptr(); + if (p2peer) { + /*** start the state machine ***/ +/* if (p2config->start_on_discovery) { + dlep_client_fsm_engine(start_init_e, p2peer, NULL); + } else { + dlep_client_fsm_engine(peer_init_request_e, p2peer, NULL); + } + started = TRUE; +*/ + + } else { + printf("ERROR: hum, could not find peer to start \n"); + } + return; +} + + +static void +system_stop (uint32_t argc, char *argv[]) +{ + if (argv[1] && *argv[1] == '?') { + printf("stop - immediately exits the simulation \n"); + return; + } + + exit (0); + return; +} + + + +/** + ** show system commands + **/ +static void +system_show_timer (uint32_t argc, char *argv[]) +{ + if (argv[1] && *argv[1] == '?') { + printf("system_show_timer - lists timer stats \n"); + return; + } + + stw_system_timer_stats(); + return; +} + + +/** + ** show peer commands + **/ +static void +peer_show_peer_all (uint32_t argc, char *argv[]) +{ + if (argv[1] && *argv[1] == '?') { + printf("peer_show_all - lists all peers \n"); + printf("\n"); + return; + } + + dlep_peer_list_all(); + return; +} + + +static void +peer_show_fsm_history (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + if (argv[1] && *argv[1] == '?') { + printf("peer_show_fsm_history - display peer state history \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (p2peer) { + dlep_client_fsm_show_history(p2peer); + } else { + printf("Input error: local peer id %u not known \n", nid); + } + return; +} + + +static void +peer_show_fsm_table (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + if (argv[1] && *argv[1] == '?') { + printf("peer_show_fsm_table - displays peer state machine \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (p2peer) { + dlep_client_fsm_show_state_table(p2peer); + } else { + printf("Input error: local peer id %u not known \n", nid); + } + return; +} + + +static void +neighbor_show_neighbor_mac (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + uint16_t nid; + + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_show_mac - " + "display neighbor info for MAC address \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + p2config = dlep_get_config_ptr(); + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (!p2peer) { + printf("Input error: local peer id %u not known \n", nid); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac address missing \n"); + return; + } + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (p2neighbor) { + dlep_neighbor_display(p2neighbor); + } else { + printf("Input error: mac address %s not known \n", argv[1]); + } + return; +} + + +static void +neighbor_show_all_neighbors (uint32_t argc, char *argv[]) +{ + if (argv[1] && *argv[1] == '?') { + printf("neighbor_show_all - lists all client neighbors \n"); + printf("\n"); + return; + } + + dlep_peer_neighbor_list_all(); + return; +} + + +static void +neighbor_show_fsm_history (uint32_t argc, char *argv[]) +{ + uint32_t nid; + uint8_t mac_address[8]; + dlep_context_neighbor_t *p2neighbor; + dlep_context_peer_t *p2peer; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_show_fsm_history - displays " + "neighbor state history\n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (!p2peer) { + printf("Input error: local peer id %u not known \n", nid); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac address missing \n"); + return; + } + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (p2neighbor) { + dlep_client_neighbor_fsm_show_history(p2neighbor); + } else { + printf("Input error: mac address %s not known \n", argv[1]); + } + return; +} + + +static void +neighbor_show_fsm_table (uint32_t argc, char *argv[]) +{ + uint32_t nid; + uint8_t mac_address[8]; + dlep_context_neighbor_t *p2neighbor; + dlep_context_peer_t *p2peer; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_show_fsm_table - displays neighbor " + "state machine\n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (!p2peer) { + printf("Input error: local peer id %u not known \n", nid); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac address missing \n"); + return; + } + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (p2neighbor) { + dlep_client_neighbor_fsm_show_state_table(p2neighbor); + } else { + printf("Input error: mac address %s not known \n", argv[1]); + } + return; +} + + +/** + ** test peer commands + **/ +static void +peer_test_peer_term (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + if (argv[1] && *argv[1] == '?') { + printf("peer_test_terminate - sends a peer terminate \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (p2peer) { + p2peer->status_code = RFC5444_MSG_TIMEOUT; /* suriya just added for now */ + dlep_client_fsm_engine(user_peer_term_request_e, p2peer, NULL); + + } else { + printf("Input error: local peer id %u not known \n", nid); + } + return; + +} + +static void +peer_test_peer_update (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + uint8_t rlq_tx,rlq_rx; + uint8_t resources; + uint64_t latency; + uint64_t cdr_tx,cdr_rx; + uint64_t mdr_tx,mdr_rx; + uint16_t mtu; + uint64_t temp; + uint32_t ttl ; + + + if (argv[1] && *argv[1] == '?') { + printf("peer_test_update - sends a peer update \n"); + printf("\n"); + return; + } + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (p2peer) { + if (argv[1]) { + temp = strtoul(argv[1], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + rlq_tx = RFC5444_100_PERCENT; + } else { + rlq_tx = temp; + } + } else { + printf("Input error: rlq tx missing \n"); + return; + } + + if (argv[2]) { + temp = strtoul(argv[2], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + rlq_rx = RFC5444_100_PERCENT; + } else { + rlq_rx = temp; + } + } else { + printf("Input error: rlq rx missing \n"); + return; + } + if (argv[3]) { + temp = strtoul(argv[3], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + resources = RFC5444_100_PERCENT; + } else { + resources = temp; + } + } else { + printf("Input error: resources missing \n"); + return; + } + + latency=0; + + if (argv[4]) { + latency = strtoull(argv[4], NULL, 10); + } else { + printf("Input error: latency missing \n"); + return; + } + cdr_tx = 0; + if (argv[5]) { + cdr_tx = strtoull(argv[5], NULL, 10); + } else { + printf("Input error: cdr tx missing \n"); + return; + } + + cdr_rx = 0; + if (argv[6]) { + cdr_rx = strtoull(argv[6], NULL, 10); + } else { + printf("Input error: cdr rx missing \n"); + return; + } + + + mdr_tx = 0; + if (argv[7]) { + mdr_tx = strtoull(argv[7], NULL, 10); + } else { + printf("Input error: mdr tx missing \n"); + return; + } + + mdr_rx = 0; + if (argv[8]) { + mdr_rx = strtoull(argv[8], NULL, 10); + } else { + printf("Input error: mdr rx missing \n"); + return; + } + + mtu = 0; + if (argv[9]) { + mtu = strtoull(argv[9], NULL, 10); + } else { + printf("Input error: mtu missing \n"); + return; + } + + ttl = 0; + if (argv[10]) { + ttl = strtoull(argv[10], NULL, 10); + } + +#if 0 + if (argv[11]) { + printf(" Input error: extra argument is passed \n"); + return; + } +#endif + + /* set the neighbor data to be picked up at the next interval */ + p2peer->rlq_tx = rlq_tx; + p2peer->rlq_rx = rlq_rx; + p2peer->resources = resources; + p2peer->latency = latency; + p2peer->cdr_tx = cdr_tx; + p2peer->cdr_rx = cdr_rx; + p2peer->mdr_tx = mdr_tx; + p2peer->mdr_rx = mdr_rx; + p2peer->mtu = mtu; + p2peer->ttl = ttl; + + send_dlep_peer_update_request(p2peer); + + printf(" metrics updated: RLQ TX=%u RLQ RX=%u \n" + + "Resources =%u \n" + "Latency=%llu \n" + "CDR TX=%llu CDR RX=%llu \n" + "MDR TX=%llu MDR RX=%llu \n" + "MTU =%u ", + rlq_tx, + rlq_rx, + resources, + latency, + cdr_tx, + cdr_rx, + mdr_tx, + mdr_rx, + mtu); + + } else { + printf("Input error: local peer id %u not known \n", nid); + } + return; +} + + +/** + ** test neighbor commands + **/ +static void +cli_test_neighbor_update_msg (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_test_update_msg - generate a neighbor up \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2config = dlep_get_config_ptr(); + p2peer = dlep_get_peer_by_peer_id(1); + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + p2neighbor = dlep_neighbor_allocate(p2peer, mac_address); + } + + if (!p2neighbor) { + printf("Error: new neighbor instaniation failed \n"); + return; + } + + /* don't send the layer 3 addresses, force router to ARP/ND */ + ipv4_zero_address(&p2neighbor->ipv4_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + + /* set the neighbor metrics */ + p2neighbor->rlq_rx = 100; + p2neighbor->rlq_tx = 100; + p2neighbor->resources = 100; + p2neighbor->latency = 250; + p2neighbor->cdr_rx = 100000000; + p2neighbor->cdr_tx = 100000000; + p2neighbor->mdr_rx = 100000000; + p2neighbor->mdr_tx = 100000000; + p2neighbor->mtu = 1500; + send_dlep_neighbor_address_request(p2peer, p2neighbor); + /* + * start the ack timer + */ + (void)stw_system_timer_start(&p2neighbor->neighbor_init_ack_tmr, + p2peer->neighbor_up_ack_tmo, + p2peer->neighbor_up_ack_tmo, + &dlep_neighbor_init_ack_tmr, + (void *)p2neighbor); + + return; +} + + + +static void +cli_test_neighbor_up (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + ipv4_address_t ipv4_address; + ipv6_address_t ipv6_address; + char ipv6_addr[130]; + + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_test_up - generate " + " a neighbor up with Layer 3 addresse\n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" - 210.123.234.102 \n"); + printf(" - 2001:0db8:85a3:0000:0000:8a2e:0370:7334 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + +#if 0 + if (argv[2]) { + ipv4_dot_decimal2digits(&ipv4_address, argv[2]); + ipv4_print_address(NULL, &ipv4_address); + } else { + printf("Input error: IPv4 is missing \n"); + return; + } +#endif + + if (argv[2]) { + inet_pton(AF_INET6,argv[2],&ipv6_address.v6_addr.v6_addr16); + expand_ipv6_addr(ipv6_addr,&ipv6_address); + ipv6_ascii2digits(&ipv6_address, ipv6_addr); + // ipv6_ascii2digits(&ipv6_address, argv[2]); + ipv6_print_address(NULL, &ipv6_address); + printf("v6 is %p\n",&ipv6_address); + } else { + printf("Input error: IPv6 is missing \n"); + return; + } + + if (argv[3]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + + p2config = dlep_get_config_ptr(); + p2peer = dlep_get_peer_by_peer_id(1); + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + p2neighbor = dlep_neighbor_allocate(p2peer, mac_address); + } + + if (!p2neighbor) { + printf("Error: new neighbor instaniation failed \n"); + return; + } + + //ipv4_copy_address(&p2neighbor->ipv4_address, &ipv4_address); + ipv6_copy_address(&p2neighbor->ipv6_address, &ipv6_address); + + //memcpy(&p2neighbor->ipv6_address,&ipv6_address.v6_addr,sizeof(ipv6_address_t)); + + /* set the neighbor metrics */ + p2neighbor->rlq_tx = 100; + p2neighbor->rlq_rx = 100; + p2neighbor->resources = 100; + p2neighbor->latency = 250; + p2neighbor->cdr_tx = 100000000; + p2neighbor->cdr_rx = 100000000; + p2neighbor->mdr_tx = 100000000; + p2neighbor->mdr_rx = 100000000; + p2neighbor->mtu = 1500; + + send_dlep_neighbor_up(p2peer, p2neighbor); + + /* + * start the ack timer + */ + (void)stw_system_timer_start(&p2neighbor->neighbor_init_ack_tmr, + p2peer->neighbor_up_ack_tmo, + p2peer->neighbor_up_ack_tmo, + &dlep_neighbor_init_ack_tmr, + (void *)p2neighbor); + + return; +} + + +static void +cli_test_neighbor_credit_up (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_test_up - generate a neighbor up \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2config = dlep_get_config_ptr(); + p2peer = dlep_get_peer_by_peer_id(1); + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + p2neighbor = dlep_neighbor_allocate(p2peer, mac_address); + } + + if (!p2neighbor) { + printf("Error: new neighbor instaniation failed \n"); + return; + } + + /* don't send the layer 3 addresses, force router to ARP/ND */ + ipv4_zero_address(&p2neighbor->ipv4_address); + ipv6_zero_address(&p2neighbor->ipv6_address); + + /* set the neighbor metrics */ + p2neighbor->rlq_rx = 100; + p2neighbor->rlq_tx = 100; + p2neighbor->resources = 100; + p2neighbor->latency = 250; + p2neighbor->cdr_rx = 100000000; + p2neighbor->cdr_tx = 100000000; + p2neighbor->mdr_rx = 100000000; + p2neighbor->mdr_tx = 100000000; + p2neighbor->mtu = 1500; + + if (p2neighbor->CREDIT_NOT_SUPPORTED) { + p2neighbor->mrw = 0; + } else { + p2neighbor->mrw = 65534; + } + p2neighbor->rrw = 0; + + + send_dlep_neighbor_up(p2peer, p2neighbor); + + /* + * start the ack timer + */ + (void)stw_system_timer_start(&p2neighbor->neighbor_init_ack_tmr, + p2peer->neighbor_up_ack_tmo, + p2peer->neighbor_up_ack_tmo, + &dlep_neighbor_init_ack_tmr, + (void *)p2neighbor); + + return; +} + + +static void +cli_test_neighbor_metric_up (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + ipv6_address_t ipv6_address; + dlep_config_t *p2config; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + uint8_t rlq_tx; + uint8_t rlq_rx; + uint8_t resources; + uint64_t latency; + uint64_t cdr_tx; + uint64_t cdr_rx; + uint64_t mdr_tx; + uint64_t mdr_rx; + uint16_t mtu; + uint32_t temp; + + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_test_metric_up " + " - generate a " + "neighbor up w/ metrics \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" ipv6_address \n"); + printf(" - 0 - 100 \n"); + printf(" - 0 - 100 \n"); + printf(" - 64-bit millisecond value \n"); + printf(" - 64-bit bps value \n"); + printf(" - 64-bit bps value \n"); + printf(" - 16-bit \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + if (argv[2]) { + ipv6_ascii2digits(&ipv6_address, argv[2]); + ipv6_print_address(NULL, &ipv6_address); + } else { + printf("Input error: IPv6 is missing \n"); + return; + } + p2config = dlep_get_config_ptr(); + p2peer = dlep_get_peer_by_peer_id(1); + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + p2neighbor = dlep_neighbor_allocate(p2peer, mac_address); + } + + if (!p2neighbor) { + printf("Error: new neighbor instaniation failed \n"); + return; + } + + ipv6_copy_address(&p2neighbor->ipv6_address, &ipv6_address); + + if (argv[3]) { + temp = strtoul(argv[3], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + rlq_tx = RFC5444_100_PERCENT; + rlq_rx = RFC5444_100_PERCENT; + } else { + rlq_tx = temp; + rlq_rx = temp; + } + } else { + printf("Input error: rlq missing \n"); + return; + } + + if (argv[4]) { + temp = strtoul(argv[4], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + resources = RFC5444_100_PERCENT; + } else { + resources = temp; + } + } else { + printf("Input error: resources tx missing \n"); + return; + } + + latency =0; + if (argv[5]) { + latency = strtoull(argv[5], NULL, 10); + } else { + printf("Input error: latency missing \n"); + return; + } + + cdr_tx = 0; + cdr_rx = 0; + if (argv[6]) { + cdr_tx = strtoull(argv[6], NULL, 10); + cdr_rx = strtoull(argv[6], NULL, 10); + } else { + printf("Input error: cdr missing \n"); + return; + } + + + mdr_tx = 0; + mdr_rx = 0; + if (argv[7]) { + mdr_tx = strtoull(argv[7], NULL, 10); + mdr_rx = strtoull(argv[7], NULL, 10); + } else { + printf("Input error: mdr_tx missing \n"); + return; + } + + mtu = 0; + if (argv[8]) { + mtu = strtoul(argv[8], NULL, 10); + } else { + printf("Input error: mtu missing \n"); + return; + } + + if (argv[9]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + + /* set the neighbor metrics for the neighbor up */ + p2neighbor->rlq_tx = rlq_tx; + p2neighbor->rlq_rx = rlq_rx; + p2neighbor->resources = resources; + p2neighbor->latency = latency; + p2neighbor->cdr_tx = cdr_tx; + p2neighbor->cdr_rx = cdr_rx; + p2neighbor->mdr_tx = mdr_tx; + p2neighbor->mdr_rx = mdr_rx; + p2neighbor->mtu = mtu; + + printf(" sending reaching here\n"); + send_dlep_neighbor_up(p2peer, p2neighbor); + return; +} + + +static void +cli_test_neighbor_ipv4_req (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + ipv4_address_t ipv4_address; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_test_ipv4 " + " - generate " + " a neighbor address IPv4 update \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" - add | drop \n"); + printf(" - 210.123.234.102 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + if (argv[3]) { + ipv4_dot_decimal2digits(&ipv4_address, argv[3]); + printf("\n Going to print entered ip add"); + ipv4_print_address(NULL, &ipv4_address); + } else { + printf("Input error: IPv4 is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Input error: local peer not present \n"); + return; + } + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Input error: neighbor mac not known \n"); + return; + } + + if (strcmp("add", argv[2]) == 0) { + p2neighbor->update_ipv4_operation = RFC5444_EXISTING_ADD_ADDRESS; + ipv4_copy_address(&p2neighbor->update_ipv4_address, &ipv4_address); +// send_dlep_neighbor_address_request(p2peer, p2neighbor); + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + } else if (strcmp("drop", argv[2]) == 0) { + p2neighbor->update_ipv4_operation = RFC5444_DROP_ADDRESS; + ipv4_copy_address(&p2neighbor->update_ipv4_address, &ipv4_address); + // send_dlep_neighbor_address_request(p2peer, p2neighbor); + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + } else { + printf("Input error: invalid add-drop operation \n"); + return; + } + return; +} + + +static void +cli_test_neighbor_ipv6_req (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8] , subnet; + ipv6_address_t ipv6_address; + ipv6_address_t ipv6_subnet_address; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_test_ipv6 " + " - generate " + " a neighbor address IPv6 update \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" - add | drop \n"); + printf(" - 11223344:22334455:33445566:44556677 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + if (argv[3]) { + ipv6_ascii2digits(&ipv6_address, argv[3]); + ipv6_print_address(NULL, &ipv6_address); + } else { + printf("Input error: IPv6 is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Input error: local peer not present \n"); + return; + } + + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Input error: neighbor mac not known \n"); + return; + } + + if (argv[4]) { + ipv6_ascii2digits(&ipv6_subnet_address, argv[4]); + ipv6_print_address(NULL, &ipv6_subnet_address); + } else { + printf("Input error: IPv6 subnet is missing \n"); + return; + } + + + if(argv[5]) { + subnet = strtoul(argv[5], NULL, 10); + } else { + printf("Input error: subnet prefix is missing \n"); + return; + } + + if (strcmp("add", argv[2]) == 0) { + p2neighbor->update_ipv6_operation = RFC5444_EXISTING_ADD_ADDRESS; + ipv6_copy_address(&p2neighbor->update_ipv6_address, &ipv6_address); + ipv6_copy_address(&p2neighbor->update_ipv6_subnet_address, &ipv6_subnet_address); + p2neighbor->ipv6_subnet_prefix = subnet; + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + } else if (strcmp("drop", argv[2]) == 0) { + p2neighbor->update_ipv6_operation = RFC5444_DROP_ADDRESS; + ipv6_copy_address(&p2neighbor->update_ipv6_address, &ipv6_address); + ipv6_copy_address(&p2neighbor->update_ipv6_subnet_address, &ipv6_subnet_address); + p2neighbor->ipv6_subnet_prefix = subnet; + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + } else { + printf("Input error: invalid add-drop operation \n"); + return; + } + return; +} + + +static void +cli_test_neighbor_metrics (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + uint8_t rlq_tx,rlq_rx; + uint8_t resources_tx,resources_rx,resources; + uint64_t latency; + uint64_t cdr_tx,cdr_rx; + uint64_t mdr_tx,mdr_rx; + uint16_t mtu; + uint32_t temp; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_test_metrics " + " " + " - " + "generate a neighbor metrics update \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" - 0 - 100 \n"); + printf(" - 0 - 100 \n"); + printf(" - 0 - 100 \n"); + printf(" - 16-bit millisecond value \n"); + printf(" - 64-bit bps value \n"); + printf(" - 64-bit bps value \n"); + printf(" - 64-bit bps value \n"); + printf(" - 64-bit bps value \n"); + printf(" - 16-bit \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + if (argv[2]) { + temp = strtoul(argv[2], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + rlq_tx = RFC5444_100_PERCENT; + } else { + rlq_tx = temp; + } + } else { + printf("Input error: rlq tx missing \n"); + return; + } + + if (argv[3]) { + temp = strtoul(argv[3], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + rlq_rx = RFC5444_100_PERCENT; + } else { + rlq_rx = temp; + } + } else { + printf("Input error: rlq rx missing \n"); + return; + } + + if (argv[4]) { + temp = strtoul(argv[4], NULL, 10); + if (temp > RFC5444_100_PERCENT) { + resources = RFC5444_100_PERCENT; + } else { + resources = temp; + } + } else { + printf("Input error: resources tx missing \n"); + return; + } + + latency = 0; + + if (argv[5]) { + latency = strtoull(argv[5], NULL, 10); + } else { + printf("Input error: latency missing \n"); + return; + } + + cdr_tx = 0; + if (argv[6]) { + cdr_tx = strtoull(argv[6], NULL, 10); + } else { + printf("Input error: cdr tx missing \n"); + return; + } + + cdr_rx = 0; + if (argv[7]) { + cdr_rx = strtoull(argv[7], NULL, 10); + } else { + printf("Input error: cdr rx missing \n"); + return; + } + + + mdr_tx = 0; + if (argv[8]) { + mdr_tx = strtoull(argv[8], NULL, 10); + } else { + printf("Input error: mdr tx missing \n"); + return; + } + + mdr_rx = 0; + if (argv[9]) { + mdr_rx = strtoull(argv[9], NULL, 10); + } else { + printf("Input error: mdr rx missing \n"); + return; + } + + mtu = 0; + if (argv[10]) { + mtu = strtoull(argv[10], NULL, 10); + } else { + printf("Input error: mtu missing \n"); + return; + } + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->rlq_tx = rlq_tx; + p2neighbor->rlq_rx = rlq_rx; + p2neighbor->resources = resources; + p2neighbor->latency = latency; + p2neighbor->cdr_tx = cdr_tx; + p2neighbor->cdr_rx = cdr_rx; + p2neighbor->mdr_tx = mdr_tx; + p2neighbor->mdr_rx = mdr_rx; + p2neighbor->mtu = mtu; + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: RLQ TX=%u RLQ RX=%u \n" + "Resources =%u \n" + "Latency=%llu \n" + "CDR TX=%llu CDR RX=%llu \n" + "MDR TX=%llu MDR RX=%llu \n" + "MTU =%u", + rlq_tx, + rlq_rx, + resources, + latency, + cdr_tx, + cdr_rx, + mdr_tx, + mdr_rx, + mtu); + return; +} + + +static void +cli_test_neighbor_rlq (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + uint8_t rlq_tx, rlq_rx; + uint32_t temp; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_test_rlq - " + "generate a neighbor metrics update with a new RLQ \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" - 0 - 100 \n"); + printf(" - 0 - 100 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + if (argv[2]) { + temp = strtoul(argv[2], NULL, 10); + if (temp > 100) { + rlq_tx =100; + } else { + rlq_tx = temp; + } + } else { + printf("Input error: rlq tx missing \n"); + return; + } + + if (argv[3]) { + temp = strtoul(argv[3], NULL, 10); + if (temp > 100) { + rlq_rx =100; + } else { + rlq_rx = temp; + } + } else { + printf("Input error: rlq rx missing \n"); + return; + } + + if (argv[4]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->rlq_tx = rlq_tx; + p2neighbor->rlq_rx = rlq_rx; + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: RLQ TX=%u \n", + rlq_tx); + printf(" metrics updated: RLQ RX=%u \n", + rlq_rx); + return; +} + + +static void +cli_test_neighbor_resources (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + uint8_t resources; + uint8_t temp; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_test_resources - " + "" + "generate a neighbor metrics update with a new resource \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" - 0 - 100 \n"); + printf(" - 0 - 100 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + if (argv[2]) { + temp = strtoul(argv[2], NULL, 10); + if (temp > 100) { + resources = 100; + } else { + resources = temp; + } + } else { + printf("Input error: resources missing \n"); + return; + } + + if (argv[3]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->resources = resources; + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: Resources=%u \n", + resources); + return; +} + + +static void +cli_test_neighbor_latency (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + uint64_t latency; + uint64_t temp; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_test_latency -" + "generate a neighbor metrics update with a new latency \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" 64-bit millisecond value \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + latency = 0 ; + if (argv[2]) { + latency = strtoull(argv[2], NULL, 10); + } else { + printf("Input error: latency missing \n"); + return; + } + + if (argv[3]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->latency = latency; + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: Latency=%u \n", + latency); + return; +} + + +static void +cli_test_neighbor_cdr (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + uint64_t cdr_tx, cdr_rx; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_test_cdr - " + "generate a neighbor metrics update with a new CDR\n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" 64-bit bps value \n"); + printf(" 64-bit bps value \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + cdr_tx = 0; + if (argv[2]) { + cdr_tx = strtoull(argv[2], NULL, 10); + } else { + printf("Input error: cdr_tx missing \n"); + return; + } + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->cdr_tx = cdr_tx; + + cdr_rx = 0; + if (argv[3]) { + cdr_rx = strtoull(argv[3], NULL, 10); + } else { + printf("Input error: cdr_rx missing \n"); + return; + } + + if (argv[4]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->cdr_rx = cdr_rx; + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: CDR TX=%llu \n", + cdr_tx); + printf(" metrics updated: CDR RX=%llu \n", + cdr_rx); + return; +} + + +static void +cli_test_neighbor_mdr (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + uint64_t mdr_tx, mdr_rx; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_test_mdr - " + "generate a neighbor metrics update with a new MDR\n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" 64-bit bps value \n"); + printf(" 64-bit bps value \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + mdr_tx = 0; + if (argv[2]) { + mdr_tx = strtoull(argv[2], NULL, 10); + } else { + printf("Input error: mdr_tx missing \n"); + return; + } + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->mdr_tx = mdr_tx; + + mdr_rx = 0; + if (argv[3]) { + mdr_rx = strtoull(argv[3], NULL, 10); + } else { + printf("Input error: mdr_rx missing \n"); + return; + } + + if (argv[4]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->mdr_rx = mdr_rx; + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: MDR TX=%llu \n", + mdr_tx); + printf(" metrics updated: MDR RX=%llu \n", + mdr_rx); + return; +} + +static void +cli_test_neighbor_mtu (uint16_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + uint16_t mtu; + uint16_t temp; + + if (argv[1] && *argv[1] == '?') { + printf("neighbor_test_mdr - " + "generate a neighbor metrics update with a new MDR\n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf(" 64-bit bps value \n"); + printf(" 64-bit bps value \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + return; + } + + if (argv[2]) { + temp = strtoull(argv[2], NULL, 10); + if ((temp >= 64) && (temp <= 1500)) { + mtu = temp; + } else { + mtu = 1500; + } + } else { + printf("Input error: mtu missing \n"); + return; + } + + if (argv[3]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + + /* set the neighbor data to be picked up at the next interval */ + p2neighbor->mtu = mtu; + + send_dlep_neighbor_metrics(p2peer, p2neighbor); + + printf(" metrics updated: MTU=%u \n", + mtu); + return; +} + + +static void +cli_test_neighbor_down (uint32_t argc, char *argv[]) +{ + uint8_t mac_address[8]; + dlep_context_peer_t *p2peer; + dlep_context_neighbor_t *p2neighbor; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("neighbor_test_down - generate a " + "neighbor down \n"); + printf("where \n"); + printf(" - 11:22:33:44:55:66 \n"); + printf("\n"); + return; + } + + if (argv[1]) { + mac_ascii2digits(mac_address, argv[1]); + //mac_print_address(NULL, mac_address); + } else { + printf("Input error: mac is missing \n"); + return; + } + + if (argv[2]) { + printf(" Input error: extra argument is passed \n"); + return; + } + + p2peer = dlep_get_peer_by_peer_id(1); + if (!p2peer) { + printf("Error: peer not known \n"); + } + p2neighbor = dlep_get_neighbor_by_mac_address(p2peer, mac_address); + if (!p2neighbor) { + printf("Error: neighbor not known \n"); + //return; + } + + dlep_client_neighbor_fsm_engine(neighbor_term_user_req_e, + p2peer, p2neighbor); + return; +} + +static void +peer_test_peer_offer (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + if (p2peer) { + dlep_client_fsm_engine(peer_offer_e, p2peer, NULL); + + } else { + printf("Input error: local peer id %u not known \n", nid); + } + return; +} +static void +peer_test_init_ack (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + printf("reaching here\n"); + send_dlep_peer_init_ack(p2peer); + return; +} +static void +peer_test_update_res (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + send_dlep_peer_update_response(p2peer); + return; +} +static void +peer_test_term_res (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + + send_dlep_peer_termination_ack(p2peer); + return; +} +static void +peer_test_heartbeat (uint32_t argc, char *argv[]) +{ + uint32_t nid; + dlep_context_peer_t *p2peer; + + nid = 1; + p2peer = dlep_get_peer_by_peer_id(nid); + + send_dlep_peer_heartbeat(p2peer); + return; +} +static void +test_session_init (uint32_t argc, char *argv[]) +{ + int temp; + + if (!argv[1] || (argv[1] && *argv[1] == '?')) { + printf("session init enter 0 or 1 \n"); + printf("\n"); + return; + } + + temp = strtoul(argv[1], NULL, 10); + if(temp ==0 || temp ==1) { + init = strtoul(argv[1], NULL, 10); + } + else { + printf("Input error : Invalid option should be 0 or 1 \n"); + } + + return; +} + +/** + * NAME + * dlep_cli_engine + * + * SYNOPSIS + * void + * dlep_cli_engine() + * + * DESCRIPTION + * Drives the Radio Test Tool CLI. + * + * INPUT PARAMETERS + * input_string This is a string containing user input. + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_cli_engine (char *input_string) +{ + cli_engine(input_string); + return; +} + + +/** + * NAME + * dlep_cli_init + * + * SYNOPSIS + * void + * dlep_cli_init() + * + * DESCRIPTION + * Registers the dlep test tool commands with the cli + * facility. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +dlep_cli_init (void) +{ + cli_init_data_t init_data; + RC_CLI_t rc; + + strcpy(init_data.prefix, "Radio Test Tool"); + cli_init(&init_data); + + dlep_debug_cli_init(); + //dlep_source_cli_init(); + fuzz_dlep_cli_init(); + + + /* + * Create directory and commands + */ + + rc = cli_mkdir("system", &cli_show_dir, &show_system_dir); + rc = cli_mkdir("peer", &cli_show_dir, &show_peer_dir); + rc = cli_mkdir("neighbor", &cli_show_dir, &show_neighbor_dir); + +// rc = cli_mkdir("peer", &cli_clear_dir, &clear_peer_dir); +// rc = cli_mkdir("neighbor", &cli_clear_dir, &clear_neighbor_dir); + + rc = cli_mkdir("peer", &cli_test_dir, &test_peer_dir); + rc = cli_mkdir("neighbor", &cli_test_dir, &test_neighbor_dir); + + + /* + * root commands + */ + rc = cli_mkcmd("start", system_start, + NULL, &system_start_cmd); + rc = cli_mkcmd("stop", system_stop, + NULL, &system_stop_cmd); + + /* + * show system + */ + rc = cli_mkcmd("system_show_timer", system_show_timer, + &show_system_dir, &show_timer_stats_cmd); + + /* + * show peer + */ + rc = cli_mkcmd("peer_show_all", peer_show_peer_all, + &show_peer_dir, &show_peer_all_cmd); + rc = cli_mkcmd("peer_show_fsm_history", peer_show_fsm_history, + &show_peer_dir, &show_peer_fsm_history_cmd); + rc = cli_mkcmd("peer_show_fsm_table", peer_show_fsm_table, + &show_peer_dir, &show_peer_fsm_table_cmd); + + /* + * show neighbor + */ + rc = cli_mkcmd("neighbor_show_mac", neighbor_show_neighbor_mac, + &show_neighbor_dir, &show_neighbor_mac_cmd); + rc = cli_mkcmd("neighbor_show_all", neighbor_show_all_neighbors, + &show_neighbor_dir, &show_neighbors_on_peer_cmd); + rc = cli_mkcmd("neighbor_show_fsm_history", neighbor_show_fsm_history, + &show_neighbor_dir, &show_neighbor_fsm_history_cmd); + rc = cli_mkcmd("neighbor_show_fsm_table", neighbor_show_fsm_table, + &show_neighbor_dir, &show_neighbor_fsm_table_cmd); + + /* + * test peer + */ + + rc = cli_mkcmd("test_session_init", test_session_init, + &test_peer_dir, &test_session_init_cmd); + + rc = cli_mkcmd("peer_test_terminate", peer_test_peer_term, + &test_peer_dir, &test_peer_term_cmd); + + rc = cli_mkcmd("peer_test_update", peer_test_peer_update, + &test_peer_dir, &test_peer_update_cmd); + + /* added for testing purpose */ + rc= cli_mkcmd("peer_test_offer", peer_test_peer_offer, + &test_peer_dir, &test_peer_offer_cmd); + + rc=cli_mkcmd("peer_test_init_ack", peer_test_init_ack, + &test_peer_dir, &test_peer_init_ack_cmd); + rc=cli_mkcmd("peer_test_update_res", peer_test_update_res, + &test_peer_dir, &test_peer_update_res_cmd); + rc=cli_mkcmd("peer_test_term_res", peer_test_term_res, + &test_peer_dir, &test_peer_term_res_cmd); + rc=cli_mkcmd("peer_test_heartbeat", peer_test_heartbeat, + &test_peer_dir, &test_peer_heartbeat_cmd); + + /* + * test neighbor + */ + rc = cli_mkcmd("neighbor_test_up", cli_test_neighbor_up, + &test_neighbor_dir, &test_neighbor_up_cmd); + /* rc = cli_mkcmd("neighbor_test_l3_up", cli_test_neighbor_l3_up, + &test_neighbor_dir, &test_neighbor_l3_up_cmd); */ + rc = cli_mkcmd("neighbor_test_credit_up", cli_test_neighbor_credit_up, + &test_neighbor_dir, &test_neighbor_credit_up_cmd); + rc = cli_mkcmd("neighbor_test_metric_up", cli_test_neighbor_metric_up, + &test_neighbor_dir, &test_neighbor_metric_up_cmd); + + rc = cli_mkcmd("neighbor_test_ipv4", cli_test_neighbor_ipv4_req, + &test_neighbor_dir, &test_neighbor_ipv4_req_cmd); + rc = cli_mkcmd("neighbor_test_ipv6", cli_test_neighbor_ipv6_req, + &test_neighbor_dir, &test_neighbor_ipv6_req_cmd); + + rc = cli_mkcmd("neighbor_test_down", cli_test_neighbor_down, + &test_neighbor_dir, &test_neighbor_down_cmd); + rc = cli_mkcmd("neighbor_test_metrics", cli_test_neighbor_metrics, + &test_neighbor_dir, &test_neighbor_metrics_cmd); + + rc = cli_mkcmd("neighbor_test_rlq", cli_test_neighbor_rlq, + &test_neighbor_dir, &test_neighbor_rlq_cmd); + rc = cli_mkcmd("neighbor_test_resources", cli_test_neighbor_resources, + &test_neighbor_dir, &test_neighbor_resources_cmd); + rc = cli_mkcmd("neighbor_test_latency", cli_test_neighbor_latency, + &test_neighbor_dir, &test_neighbor_latency_cmd); + rc = cli_mkcmd("neighbor_test_cdr", cli_test_neighbor_cdr, + &test_neighbor_dir, &test_neighbor_cdr_cmd); + rc = cli_mkcmd("neighbor_test_mdr", cli_test_neighbor_mdr, + &test_neighbor_dir, &test_neighbor_mdr_cmd); + rc = cli_mkcmd("neighbor_test_mtu", cli_test_neighbor_mtu, + &test_neighbor_dir, &test_neighbor_mtu_cmd); + rc = cli_mkcmd("neighbor_test_update_msg", cli_test_neighbor_update_msg, + &test_neighbor_dir, &test_neighbor_update_cmd); + + return; +} + diff --git a/dlep_radio_ipv6/sim_dlep_radio_cli.h b/dlep_radio_ipv6/sim_dlep_radio_cli.h new file mode 100644 index 0000000..c8f08b4 --- /dev/null +++ b/dlep_radio_ipv6/sim_dlep_radio_cli.h @@ -0,0 +1,43 @@ +/*------------------------------------------------------------------ + * sim_radio_cli.h -- Radio simulator CLI support + * + * August 2010, Bo Berry + * + * Copyright (c) 2010 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __SIM_RADIO_CLI_H__ +#define __SIM_RADIO_CLI_H__ + + +extern +void dlep_cli_engine(char *input_string); + +extern +void dlep_cli_init(void); + +#endif + diff --git a/dlep_radio_ipv6/stw_system_timer.c b/dlep_radio_ipv6/stw_system_timer.c new file mode 100644 index 0000000..56f74e6 --- /dev/null +++ b/dlep_radio_ipv6/stw_system_timer.c @@ -0,0 +1,339 @@ +/*----------------------------------------------------------------- + * stw_system_timer.c -- System Timer Wheel APIs + * + * February 2005, Bo Berry + * + * Copyright (c) 2005-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include "stw_system_timer.h" + + +static stw_t *stw_system_handle = 0; + + +/** + * NAME + * stw_system_timer_prepare + * + * SYNOPSIS + * #include "stw_system_timer.h" + * void + * stw_system_timer_prepare(stw_tmr_t *tmr) + * + * DESCRIPTION + * Utility routine to initialize the links of timer elements. + * + * INPUT PARAMETERS + * tmr - pointer to the timer + * + * OUTPUT PARAMETERS + * tmr - updated + * + * RETURN VALUE + * none + * + */ +void +stw_system_timer_prepare (stw_tmr_t *tmr) +{ + stw_timer_prepare(tmr); + return; +} + + +/** + * NAME + * stw_system_timer_stats + * + * SYNOPSIS + * #include "stw_system_timer.h" + * void + * stw_system_timer_stats(void) + * + * DESCRIPTION + * Displays the stats for the system timer wheel. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +stw_system_timer_stats (void) +{ + stw_timer_stats(stw_system_handle); + return; +} + + +/** + * NAME + * stw_system_timer_running + * + * SYNOPSIS + * #include "stw_system_timer.h" + * boolean_t + * stw_system_timer_running(stw_tmr_t *tmr) + * + * DESCRIPTION + * Returns TRUE if the timer is active + * + * INPUT PARAMETERS + * tmr - pointer to the timer + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE==tmer is active + * False==timer is not active + * + */ +boolean_t +stw_system_timer_running (stw_tmr_t *tmr) +{ + return (stw_timer_running(tmr)); +} + + +/** + * NAME + * stw_system_timer_start + * + * SYNOPSIS + * #include "stw_system_timer.h" + * RC_STW_t + * stw_system_timer_start(stw_tmr_t *tmr, + * uint32_t delay, + * uint32_t periodic_delay, + * stw_call_back user_cb, + * void *parm) + * + * DESCRIPTION + * Start (or restart) a system timer to expire + * in the future. If the timer is currently active, + * it will be stopped first then restarted with + * time delay requested. + * + * INPUT PARAMETERS + * tmr - pointer to the timer element + * + * delay - specified delay in milliseconds + * + * periodic_delay - periodic delay in milliseconds + * + * user_cb - application function call-back to be + * invoked when the timer expires. This + * call-back must not block. + * + * parm - persistent parameter passed to the application + * call-back upon expiration + * + * OUTPUT PARAMETERS + * tmr - updated with the user_cb and the parm, and + * put on the tiemr wheel of fortune. + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_system_timer_start (stw_tmr_t *tmr, + uint32_t delay, + uint32_t periodic_delay, + stw_call_back user_cb, + void *parm) +{ + return (stw_timer_start(stw_system_handle, + tmr, + delay, + periodic_delay, + user_cb, + parm)); +} + + +/** + * NAME + * stw_system_timer_stop + * + * SYNOPSIS + * #include "stw_system_timer.h" + * RC_STW_t + * stw_system_timer_stop(stw_tmr_t *tmr) + * + * DESCRIPTION + * Stop the timer by removing it from the timer wheel. + * Note that it is safe to call this function with a + * timer that has already been stopped in order to + * avoid making all callers check for an active timer + * first. + * + * INPUT PARAMETERS + * tmr - pointer to the timer element + * + * OUTPUT PARAMETERS + * tmr - updated, taken off the wheel + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_system_timer_stop (stw_tmr_t *tmr) +{ + return (stw_timer_stop(stw_system_handle, tmr)); +} + + +/** + * NAME + * stw_system_timer_tick + * + * SYNOPSIS + * #include "stw_system_timer.h" + * void + * stw_system_timer_tick(void) + * + * DESCRIPTION + * Expire timers on the current spoke and move + * the wheel cursor forward to the next spoke. + * + * Application call-backs must be non-blocking + * + * INPUT PARAMETERS + * stw - pointer to the timer wheel + * + * OUTPUT PARAMETERS + * stw is updated, timers at the current tick are + * expired. + * + * RETURN VALUE + * none + * + */ +void +stw_system_timer_tick (void) +{ + /* + * protect from the possibility of not having initialized the stw yet + */ + if (stw_system_handle) { + stw_timer_tick(stw_system_handle); + } + return; +} + + +/** + * NAME + * stw_system_timer_destroy + * + * SYNOPSIS + * #include "stw_system_timer.h" + * RC_STW_t + * stw_system_timer_destroy(void) + * + * DESCRIPTION + * Destroys the timer wheel. All timers are stopped + * and resources released. + * + * INPUT PARAMETERS + * none + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_system_timer_destroy (void) +{ + return (stw_timer_destroy(stw_system_handle)); +} + + +/** + * NAME + * stw_system_timer_create + * + * SYNOPSIS + * #include "stw_system_timer.h" + * RC_STW_t + * stw_system_timer_create(uint32_t wheel_size, + * uint32_t granularity, + * const char *p2name ) + * + * DESCRIPTION + * This function is used to create and initialize the system timer + * wheel. Timers must not be started before this routine is called. + * + * INPUT PARAMETERS + * wheel_size - number of spokes in the wheel. The number + * of spoks should be engineered such that + * wheel_size >= (longest duration / granularity ) + * Depending upon the number of concurrent timers, the + * distribution of those timers, it may be beneficial to + * further increase the wheel size. Objective is to + * minimize frequency of 'long' timers requiring wheel + * revolutions. + * + * granularity - milliseconds between ticks + * + * *p2name - pointer to the name of identify wheel. + * Limited to STW_NAME_LENGTH + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_system_timer_create (uint32_t wheel_size, + uint32_t granularity, + const char *p2name) +{ + return (stw_timer_create(wheel_size, + granularity, + p2name, + &stw_system_handle)); +} + + diff --git a/dlep_radio_ipv6/stw_system_timer.h b/dlep_radio_ipv6/stw_system_timer.h new file mode 100644 index 0000000..ed6019e --- /dev/null +++ b/dlep_radio_ipv6/stw_system_timer.h @@ -0,0 +1,102 @@ +/*------------------------------------------------------------------ + * stw_system_timer.h -- System Timer Wheel Definitions + * + * July 2009 - Bo Berry + * + * Copyright (c) 2005-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __STW_SYSTEM_TIMER_H__ +#define __STW_SYSTEM_TIMER_H__ + +#include "safe_types.h" +#include "stw_timer.h" + + +/* + * Utility routine to initialize the links of timer elements. + */ +extern void +stw_system_timer_prepare(stw_tmr_t *tmr); + + +/* + * Displays timer wheel stats and counters to stdout. + */ +extern void +stw_system_timer_stats(void); + + +/* + * Returns the active status of a timer. + */ +extern boolean_t +stw_system_timer_running(stw_tmr_t *tmr); + + +/* + * Starts a new timer. If the timer is currently + * running, it is stopped and restarted anew. + */ +extern RC_STW_t +stw_system_timer_start(stw_tmr_t *tmr, + uint32_t delay, + uint32_t periodic_delay, + stw_call_back user_cb, + void *parm); + +/* + * Stops a currently running timer + */ +extern RC_STW_t +stw_system_timer_stop(stw_tmr_t *); + + +/* + * System Timer Wheel tick handler + */ +extern void +stw_system_timer_tick(void); + + +/* + * destroy the R2CP timer wheel + */ +extern RC_STW_t +stw_system_timer_destroy(void); + + +/* + * Creates and initializes the R2CP timer wheel + */ +extern RC_STW_t +stw_system_timer_create(uint32_t wheel_size, + uint32_t granularity, + const char *name); + + +#endif /* __STW_SYSTEM_TIMER_H__ */ + diff --git a/dlep_radio_ipv6/stw_timer.c b/dlep_radio_ipv6/stw_timer.c new file mode 100644 index 0000000..c175245 --- /dev/null +++ b/dlep_radio_ipv6/stw_timer.c @@ -0,0 +1,762 @@ +/*------------------------------------------------------------------ + * stw_timer.c -- Single Timer Wheel Timer + * + * February 2005, Bo Berry + * + * Copyright (c) 2002-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#include +#include +#include + +#include "runtime_environment.h" +#include "safe_types.h" + +#include "stw_timer.h" + + +/* + * used to verify wheel pointers. Nothing special about + * the value, other than to help identify a valid stw pointer + */ +#define MAGIC_TAG ( 0x0FEDCA3BA ) + + +/* + * NAME + * tmr_enqueue + * + * SYNOPSIS + * #include "stw_timer.h" + * static void + * tmr_enqueue(stw_t *stw, stw_tmr_t *tmr, uint32_t delay) + * + * DESCRIPTION + * Enqueues the timer to the proper spoke per delay. + * + * INPUT PARAMETERS + * *stw - pointer to the timer wheel that the timer + * will run on + * + * *tmr - pointer to the timer element + * + * delay - delay in milliseconds + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + */ +static void +tmr_enqueue (stw_t *stw, stw_tmr_t *tmr, uint32_t delay) +{ +printf("tmr_enqueue\n"); + stw_links_t *prev, *spoke; + + uint32_t cursor; + uint32_t ticks; + uint32_t td; + + /* + * BEGIN CRITICAL REGION + */ + LOCK_INTERRUPTS(); + + if (delay < stw->granularity) { + /* + * must delay at least one tick, can not delay in past... + */ + ticks = 1; + + } else { + /* + * compute number ticks reqquired to expire the duration + */ + ticks = (delay / stw->granularity); + } + + /* + * tick displacement from current cursor + */ + td = (ticks % stw->wheel_size); + + /* + * times around the wheel required to expire duration + */ + tmr->rotation_count = (ticks / stw->wheel_size); + + /* + * calculate cursor to place the timer + */ + cursor = ((stw->spoke_index + td) % stw->wheel_size); + + spoke = &stw->spokes[cursor]; + /* + * We have a timer and now we have a spoke. All that is left is to + * link the timer to the spoke's list of timers. With a doubly linked + * list, there is no need to check for an empty list. We simply link + * it to the end of the list. This is the same price as putting it + * on the front of the list but feels more 'right'. + */ + prev = spoke->stw_prev; + tmr->links.stw_next = spoke; /* append to end of spoke */ + tmr->links.stw_prev = prev; + + prev->stw_next = (stw_links_t *)tmr; + spoke->stw_prev = (stw_links_t *)tmr; + + UNLOCK_INTERRUPTS(); + /* + * END CRITICAL REGION + */ + + return; +} + + + +/** + * NAME + * stw_timer_stats + * + * SYNOPSIS + * #include "stw_timer.h" + * void + * stw_timer_stats(const stw_t *stw) + * + * DESCRIPTION + * Displays the stats for the specified timer wheel. + * + * INPUT PARAMETERS + * *stw - pointer to the timer wheel + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +stw_timer_stats (const stw_t *stw) +{ + /* + * protect against a bad wheel + */ + if ((stw == NULL) || (stw->magic_tag != MAGIC_TAG)) { + return; + } + + printf("\n%s \n", stw->wheel_name ); + printf(" Granularity=%u\n", stw->granularity); + printf(" Wheel Size=%u\n", stw->wheel_size); + printf(" Tick Count=%u\n", stw->ticks); + printf(" Spoke Index=%u\n", stw->spoke_index); + + printf(" Active timers=%u\n", stw->timer_active); + printf(" Expired timers=%u\n", stw->timer_expired); + printf(" Hiwater mark=%u\n", stw->timer_hiwater_mark); + printf(" Started timers=%u\n", stw->timer_starts); + printf(" Cancelled timers=%u\n", stw->timer_cancelled); + return; +} + + +/** + * NAME + * stw_timer_running + * + * SYNOPSIS + * #include "stw_timer.h" + * boolean_t + * stw_timer_running(stw_tmr_t *tmr) + * + * DESCRIPTION + * RETURN VALUE TRUE if the timer structure is active + * + * INPUT PARAMETERS + * *tmr - pointer to the timer + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * TRUE==timer is active + * FALSE==timer is not active + * + */ +boolean_t +stw_timer_running (stw_tmr_t *tmr) +{ + if (tmr == NULL) { + return (FALSE); + } + + /* + * if the timer is linked, its active + */ + if (tmr->links.stw_next != NULL) { + return (TRUE); + } + + return (FALSE); +} + + +/** + * NAME + * stw_timer_prepare + * + * SYNOPSIS + * #include "stw_timer.h" + * void + * stw_timer_prepare(stw_tmr_t *tmr) + * + * Descriiption + * Utility routine to initialize the links of timer elements. + * + * INPUT PARAMETERS + * *tmr - pointer to the timer + * + * OUTPUT PARAMETERS + * *tmr - The timer links are initialized. + * + * RETURN VALUE + * none + * + */ +void +stw_timer_prepare (stw_tmr_t *tmr) +{ + if (tmr) { + tmr->links.stw_next = NULL; + tmr->links.stw_prev = NULL; + } +} + + +/** + * NAME + * stw_timer_start + * + * SYNOPSIS + * #include "stw_timer.h" + * RC_STW_t + * stw_timer_start(stw_t *stw, + * stw_tmr_t *tmr, + * uint32_t delay, + * uint32_t periodic_delay, + * stw_call_back user_cb, + * void *parm) + * + * DESCRIPTION + * Start (or restart) a timer to expire in the future. If the timer is + * currently linked to a timer wheel spoke, it will be removed + * first. A new timer spoke will be determined based on the millisecond + * time delay requested and linked into the appropriate + * timer wheel spoke. + * + * INPUT PARAMETERS + * *stw - pointer to the timer wheel + * + * *tmr - pointer to the timer element + * + * delay - initial delay in milliseconds + * + * periodic_delay - periodic delay in milliseconds + * + * user_cb - application function call-back to be + * invoked when the timer expires. This call-back + * must run-to-completion and not block. + * + * parm - persistent parameter passed to the application + * call-back upon expiration + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_timer_start (stw_t *stw, + stw_tmr_t *tmr, + uint32_t delay, + uint32_t periodic_delay, + stw_call_back user_cb, + void *parm) +{ + stw_links_t *next, *prev; + + + if (stw == NULL) { + return (RC_STW_NULL_WHEEL); + } + + if (tmr == NULL) { + return (RC_STW_NULL_TMR); + } + + if (stw->magic_tag != MAGIC_TAG) { + return (RC_STW_INVALID_WHEEL); + } + + + /* + * BEGIN CRITICAL REGION + */ + LOCK_INTERRUPTS(); + + /* + * First check to see if it is already running. If so, remove + * it from the wheel. We don't bother cleaning up the fields + * because we will be setting them below. + */ + next = tmr->links.stw_next; + if (next) { + prev = tmr->links.stw_prev; + next->stw_prev = prev; + prev->stw_next = next; + + /* + * stats book keeping + */ + stw->timer_active--; + } + + UNLOCK_INTERRUPTS(); + /* + * END CRITICAL REGION + */ + + + /* + * set user call_back and parameter + */ + tmr->func_ptr = user_cb; + tmr->parm = parm; + tmr->delay = delay; + tmr->periodic_delay = periodic_delay; + + tmr_enqueue(stw, tmr, delay); + + + stw->timer_starts++; + stw->timer_active++; + if (stw->timer_active > stw->timer_hiwater_mark) { + stw->timer_hiwater_mark = stw->timer_active; + } + + return (RC_STW_OK); +} + + +/** + * NAME + * stw_timer_stop + * + * SYNOPSIS + * #include "stw_timer.h" + * RC_STW_t + * stw_timer_stop(stw_t *stw, stw_tmr_t *tmr) + * + * DESCRIPTION + * Stop the timer by removing it from whatever timer wheel spoke list + * it is currently attached to (if any). Note that it is safe to call + * this function with a timer that has already been stopped in order to + * avoid making all callers check for a running timer first. + * + * INPUT PARAMETERS + * *stw - pointer to the timer wheel + * + * *tmr - pointer to the timer element + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_timer_stop (stw_t *stw, stw_tmr_t *tmr) +{ + stw_links_t *next, *prev; + + if (stw == NULL) { + return (RC_STW_NULL_WHEEL); + } + + if (tmr == NULL) { + return (RC_STW_NULL_TMR); + } + + if (stw->magic_tag != MAGIC_TAG ) { + return (RC_STW_INVALID_WHEEL); + } + + /* + * BEGIN CRITICAL REGION + */ + LOCK_INTERRUPTS(); + + next = tmr->links.stw_next; + if (next) { + prev = tmr->links.stw_prev; + next->stw_prev = prev; + prev->stw_next = next; + tmr->links.stw_next = NULL; /* NULL == tmr is free */ + tmr->links.stw_prev = NULL; + + /* + * stats bookkeeping + */ + stw->timer_active--; + stw->timer_cancelled++; + } + + UNLOCK_INTERRUPTS(); + /* + * END CRITICAL REGION + */ + + return (RC_STW_OK); +} + + +/** + * NAME + * stw_timer_tick + * + * SYNOPSIS + * #include "stw_timer.h" + * void + * stw_timer_tick(stw_t *stw) + * + * DESCRIPTION + * This function moves the wheel cursor forward to the + * next spoke and expire the timers. + * + * Application call-backs must be non-blocking + * + * INPUT PARAMETERS + * *stw - pointer to the timer wheel + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * none + * + */ +void +stw_timer_tick (stw_t *stw) +{ + stw_links_t *spoke, *next, *prev; + stw_tmr_t *tmr; + + stw_call_back user_call_back; + + if ((stw == NULL) || (stw->magic_tag != MAGIC_TAG)) { + return; + } + + /* + * keep track of rolling the wheel + */ + stw->ticks++; + + /* + * advance the index to the next spoke + */ + stw->spoke_index = ( stw->spoke_index + 1 ) % + stw->wheel_size; + + /* + * Process the spoke, removing timers that have expired. + * If the timer rotation count is positive + * decrement and catch the timer on the next wheel revolution. + */ + spoke = &stw->spokes[stw->spoke_index]; + tmr = (stw_tmr_t *)spoke->stw_next; + + while( (stw_links_t *)tmr != spoke) { + + next = (stw_links_t *)tmr->links.stw_next; + prev = (stw_links_t *)tmr->links.stw_prev; + + /* + * if the timer is a long one and requires one or more rotations + * decrement rotation count and leave for next turn. + */ + if (tmr->rotation_count != 0) { + tmr->rotation_count--; + } else { + + /* + ** BEGIN CRITICAL REGION + */ + LOCK_INTERRUPTS(); + + prev->stw_next = next; + next->stw_prev = prev; + + tmr->links.stw_next = NULL; + tmr->links.stw_prev = NULL; + + /* book keeping */ + stw->timer_active--; + stw->timer_expired++; + + UNLOCK_INTERRUPTS(); + /* + ** END CRITICAL REGION + */ + + /* + * automatically restart the timer if periodic_delay > 0 + */ + if (tmr->periodic_delay > 0) { + tmr_enqueue(stw, tmr, tmr->periodic_delay); + stw->timer_active++; + } + + /* + * Invoke the user expiration handler to do the actual work. + */ + user_call_back = tmr->func_ptr; + (*user_call_back)(tmr, tmr->parm); + + } + + tmr = (stw_tmr_t *)next; + } + return; +} + + +/** + * NAME + * stw_timer_destroy + * + * SYNOPSIS + * #include "stw_timer.h" + * + * DESCRIPTION + * Destroys the specified timer wheel. All + * timers are stopped and resources released. + * + * INPUT PARAMETERS + * stw - pointer to the timer wheel + * + * OUTPUT PARAMETERS + * none + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_timer_destroy (stw_t *stw) +{ + uint32_t j; + stw_links_t *spoke; + + stw_tmr_t *tmr; + + + if (stw == NULL) { + return (RC_STW_NULL_WHEEL); + } + + if (stw->magic_tag != MAGIC_TAG ) { + return (RC_STW_INVALID_WHEEL); + } + + + /* + * Drive around the wheel and stop all timers + */ + + for (j = 0; j < stw->wheel_size; j++) { + spoke = &stw->spokes[j]; + + tmr = (stw_tmr_t *)spoke->stw_next; + + while ( (stw_links_t *)tmr != spoke) { + stw_timer_stop(stw, tmr); + + tmr = (stw_tmr_t *)spoke->stw_next; + } /* end while */ + + } /* end for */ + + /* + * clear the magic so we do not mistakenly access this wheel + */ + stw->magic_tag = 0; + + /* + * now free the wheel structures + */ + free(stw->spokes); + free(stw); + + return (RC_STW_OK); +} + + +/** + * NAME + * stw_timer_create + * + * SYNOPSIS + * #include "stw_timer.h" + * RC_STW_t + * stw_timer_create(uint32_t wheel_size, + * uint32_t granularity, + * const char *p2name, + * stw_t **stw) + * + * DESCRIPTION + * This function creates and initializes the timer wheel. Timers + * must not be started before this routine is called. + * + * Parmeters + * wheel_size - number of spokes in the wheel. The number + * of spokes should be engineered such that + * wheel_size >= (longest duration / granularity) + * Depending upon the number of concurrent timers, the + * distribution of those timers, it may be beneficial to + * further increase the wheel size. Objective is to + * minimize frequency of 'long' timers requiring wheel + * revolutions. + * + * granularity - milliseconds between ticks + * + * *p2name - pointer to the name of identify wheel. Limited + * to STW_NAME_LENGTH + * + * **stw - returned pointer to the created timer wheel + * + * RETURN VALUE + * RC_STW_OK + * error otherwise + * + */ +RC_STW_t +stw_timer_create (uint32_t wheel_size, + uint32_t granularity, + const char *p2name, + stw_t **stw) +{ + uint32_t j; + stw_links_t *spoke; + + stw_t *p2stw; + + + if (stw == NULL) { + return (RC_STW_NULL_WHEEL); + } + *stw = NULL; + + /* + * we need to put some bounds to protect against extremely + * large numbers + */ + if (wheel_size < STW_MIN_WHEEL_SIZE || wheel_size > STW_MAX_WHEEL_SIZE) { + return (RC_STW_INVALID_WHEEL_SIZE); + } + + if (granularity < STW_MIN_GRANULARITY || + granularity > STW_MAX_GRANULARITY) { + return (RC_STW_INVALID_GRANULARITY); + } + + /* + * allocate memory for wheel control structure + */ + p2stw = (stw_t *)malloc( sizeof(stw_t)); + if (p2stw == NULL) { + return (RC_STW_NO_RESOURCES); + } + + /* + * allocate memory for wheel spokes + */ + p2stw->spokes = (stw_links_t *)malloc(wheel_size * sizeof(stw_links_t)); + if (p2stw->spokes == NULL) { + free(p2stw); + return (RC_STW_NO_RESOURCES); + } + + + /* + * Initialize the internal tick count at zero, should use + * safe string lib! + */ + strncpy(p2stw->wheel_name, p2name, STW_NAME_LENGTH-1); + p2stw->wheel_name[STW_NAME_LENGTH-1] = '\0'; + + p2stw->magic_tag = MAGIC_TAG; + + p2stw->ticks = 0; + + p2stw->spoke_index = 0; + p2stw->granularity = granularity; + p2stw->wheel_size = wheel_size; + + /* + * timer stats to tune wheel + */ + p2stw->timer_hiwater_mark = 0; + p2stw->timer_active = 0; + p2stw->timer_cancelled=0; + p2stw->timer_expired=0; + p2stw->timer_starts=0; + + /* + * Set all spokes to empty + */ + spoke = &p2stw->spokes[0]; + for (j = 0; j < wheel_size; j++) { + spoke->stw_next = spoke; /* empty spoke points to itself */ + spoke->stw_prev = spoke; + spoke++; + } + + *stw = p2stw; + return (RC_STW_OK); +} + + diff --git a/dlep_radio_ipv6/stw_timer.h b/dlep_radio_ipv6/stw_timer.h new file mode 100644 index 0000000..60219c6 --- /dev/null +++ b/dlep_radio_ipv6/stw_timer.h @@ -0,0 +1,234 @@ +/*------------------------------------------------------------------ + * stw_timer.h -- Definitions for Single Timer Wheel + * + * Februrary 2002, Bo Berry + * + * Copyright (c) 2005-2009 by Cisco Systems, Inc. + * All rights reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + *------------------------------------------------------------------ + */ + +#ifndef __STW_TIMER_H__ +#define __STW_TIMER_H__ + +#include "safe_types.h" + + +/* + * This file provides the public definitions for external users of the + * Timer Wheel Timer facility. + * + * The Single Timer Wheel Timer facility is optimized to support embedded + * timer structures, ie where the timer structure is integrated into the + * structure it is associated with. + * + * Definitions + * + * Spoke - A queue of timers set to expire. A timer wheel consists of + * multiple spokes. + * + * Granularity - The amount of time between the processing of each + * spoke. Granularity is measured in time units between ticks. + * + * Rotation - one complete turn around the wheel + * + * Timer Duration given 32 bits + * Time per Tick Duration + * ------------------------------------ + * 10ms 497.1 days + * 20ms 994.2 + * 50ms 2485.5 + * + * milliseconds per day [1000 * 60 * 60 * 24] + * + */ + + +typedef enum { + RC_STW_OK = 0, + RC_STW_NULL_NAME, + RC_STW_NULL_FV, + RC_STW_NULL_WHEEL, + RC_STW_NULL_TMR, + RC_STW_INVALID_WHEEL, + RC_STW_INVALID_WHEEL_SIZE, + RC_STW_INVALID_GRANULARITY, + RC_STW_NO_RESOURCES, +} RC_STW_t; + + + +/* + * we need to put some bounds to protect against extremely + * large numbers. Ranges selected from pratical experience. + */ + +/* + * range of valid wheel sizes + */ +#define STW_MIN_WHEEL_SIZE ( 32 ) +#define STW_MAX_WHEEL_SIZE ( 4096 ) + +/* + * Granularity of a timer tick in milliseconds + */ +#define STW_MIN_GRANULARITY ( 1 ) +#define STW_MAX_GRANULARITY ( 100 ) + + +/* + * stw_links + * Definition of the pointers used to link a timer into + * a spoke. Double-linked list for efficiency. + */ +typedef struct stw_links_t_ { + struct stw_links_t_ *stw_next; + struct stw_links_t_ *stw_prev; +} stw_links_t; + + + +/* + * Timer Wheel Structure used to manage the timer wheel + * and keep stats to help understand performance + */ +#define STW_NAME_LENGTH ( 32 ) + +typedef struct { + char wheel_name[ STW_NAME_LENGTH ]; + uint32_t magic_tag; /* for sanity check */ + uint32_t wheel_size; + uint32_t spoke_index; /* mod index around wheel */ + uint32_t ticks; /* absolute ticks */ + uint32_t granularity; /* millisecond per tick */ + + /* + * few book keeping parameters to help engineer the wheel + */ + uint32_t timer_hiwater_mark; + uint32_t timer_active; + uint32_t timer_cancelled; + uint32_t timer_expired; + uint32_t timer_starts; + + stw_links_t *spokes; +} stw_t; + + +/* + * stw_tmr_t + * Definition of a timer element. + * This can be malloc'ed or embedded into an existing + * application structure. + */ +typedef struct { + stw_links_t links; + uint32_t rotation_count; + uint32_t delay; /* initial delay */ + uint32_t periodic_delay; /* auto-restart if > 0 */ + void *func_ptr; + void *parm; +} stw_tmr_t; + + +/* + * Application call-back type to be invoked at timer + * expiration. The call-back must be short-n-sweet, + * non-blocking. + */ +typedef void (*stw_call_back)(stw_tmr_t *tmr, void *parm); + + + +/* + * stw_timer_running + * RETURN VALUEs TRUE if the timer is active + */ +extern boolean_t +stw_timer_running(stw_tmr_t *tmr); + + +/* + * stw_timer_prepare + * Utility routine to initialize the links of timer elements. + */ +extern void +stw_timer_prepare(stw_tmr_t *tmr); + + +/* + * Displays timer wheel stats and counters to stdout. + */ +extern void +stw_timer_stats(const stw_t *stw); + + +/* + * Starts a new timer. If the timer is currently running, + * it is stopped and restarted anew + */ +extern RC_STW_t +stw_timer_start(stw_t *stw, + stw_tmr_t *tmr, + uint32_t delay, + uint32_t periodic_delay, + stw_call_back user_cb, + void *parm); + + +/* + * stops a currently running timer + */ +extern RC_STW_t +stw_timer_stop(stw_t *stw, stw_tmr_t *tmr); + + +/* + * Timer Wheel tick handler which drives time for the + * specified wheel + */ +extern void +stw_timer_tick(stw_t *stw); + + +/* + * Destroys a timer wheel + */ +extern RC_STW_t +stw_timer_destroy(stw_t *stw); + + +/* + * creates and initializes a single timer wheel + */ +extern RC_STW_t +stw_timer_create(uint32_t wheel_size, + uint32_t granularity, + const char *name, + stw_t **stw); + + +#endif /* __STW_TIMER_H__ */ + + diff --git a/dlep_radio_ipv6/tags b/dlep_radio_ipv6/tags new file mode 100644 index 0000000..ec9404f --- /dev/null +++ b/dlep_radio_ipv6/tags @@ -0,0 +1,450 @@ +DEBUG_PRINTF cli.c /^#define DEBUG_PRINTF(myargs...) printf(myargs) $/ +DEBUG_PRINTF cli.c /^#define DEBUG_PRINTF(myargs...) ((void)0)$/ +GETSHORT dlep_porter.c /^#define GETSHORT(ptr) ((unsigned char *)ptr)[0] < (UINT32_MAX / 1000 / 1000)) { + nanoseconds = 0; + } else { + nanoseconds = (milliseconds * 1000 * 1000); + } + + return (nanoseconds); +} + + +/* + * Converts milliseconds to microseconds. + * RETURN VALUEs 0 if there is an overflow. + */ +static inline uint32_t milli_to_microseconds (uint32_t milliseconds) +{ + uint32_t microseconds; + + if (milliseconds > (UINT32_MAX / 1000)) { + microseconds = 0; + } else { + microseconds = (milliseconds * 1000); + } + return (microseconds); +} + + +/* + * Converts milliseconds to seconds. + * Can return 0. + */ +static inline uint32_t milli_to_seconds (uint32_t milliseconds) +{ + return (milliseconds / 1000); +} + + +/* + * Converts seconds to nanoseconds. + * RETURN VALUEs 0 if there is an overflow. + */ +static inline uint32_t secs_to_nanoseconds (uint32_t seconds) +{ + uint32_t nanoseconds; + + if (seconds > (UINT32_MAX / 1000 / 1000 / 1000)) { + nanoseconds = 0; + } else { + nanoseconds = (seconds * 1000 * 1000 * 1000); + } + return (nanoseconds); +} + + +/* + * Converts seconds to microseconds. + * RETURN VALUEs 0 if there is an overflow. + */ +static inline uint32_t secs_to_microseconds (uint32_t seconds) +{ + uint32_t microseconds; + + if (seconds > (UINT32_MAX / 1000 / 1000)) { + microseconds = 0; + } else { + microseconds = (seconds * 1000 * 1000); + } + return (microseconds); +} + + +/* + * Converts seconds to milliseconds. + * RETURN VALUEs 0 if there is an overflow. + */ +static inline uint32_t secs_to_milliseconds (uint32_t seconds) +{ + uint32_t milliseconds; + + if (seconds > (UINT32_MAX / 1000)) { + milliseconds = 0; + } else { + milliseconds = (seconds * 1000); + } + return (milliseconds); +} + + +#endif + From e78bc0f491c388d8159a20b3f3b9fb4bdc5fbc31 Mon Sep 17 00:00:00 2001 From: Adriano Marto Reis Date: Fri, 19 Nov 2021 10:07:08 +1000 Subject: [PATCH 2/3] Preventing null pointer assignment when there is no configuration --- dlep_radio_ipv4/dlep_porter.c | 4 ++-- dlep_radio_ipv6/dlep_porter.c | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/dlep_radio_ipv4/dlep_porter.c b/dlep_radio_ipv4/dlep_porter.c index faa1fa1..6a71587 100644 --- a/dlep_radio_ipv4/dlep_porter.c +++ b/dlep_radio_ipv4/dlep_porter.c @@ -268,11 +268,11 @@ void dlep_porter_open (dlep_config_t *p2config) { int status; - p2config->reuse = 1; if (!p2config) { return; - } + } + p2config->reuse = 1; // if (p2config->start_on_discovery) { if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { diff --git a/dlep_radio_ipv6/dlep_porter.c b/dlep_radio_ipv6/dlep_porter.c index da2c4bb..90472c1 100644 --- a/dlep_radio_ipv6/dlep_porter.c +++ b/dlep_radio_ipv6/dlep_porter.c @@ -286,11 +286,10 @@ dlep_porter_open (dlep_config_t *p2config) int status; struct addrinfo *resmulti; - p2config->reuse = 1; - if (!p2config) { return; } + p2config->reuse = 1; // if (p2config->start_on_discovery) { if (dlep_debug_flags & DLEP_UDP_TRACE_FLAG) { From 8e44262be479086b1d95680a2703e6ee102aebfb Mon Sep 17 00:00:00 2001 From: Adriano Marto Reis Date: Fri, 26 Nov 2021 13:28:24 +1000 Subject: [PATCH 3/3] Removing Eclipse project files --- .cproject | 82 ------------------------------------------------------- .project | 27 ------------------ 2 files changed, 109 deletions(-) delete mode 100644 .cproject delete mode 100644 .project diff --git a/.cproject b/.cproject deleted file mode 100644 index 4c20654..0000000 --- a/.cproject +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.project b/.project deleted file mode 100644 index 47a285a..0000000 --- a/.project +++ /dev/null @@ -1,27 +0,0 @@ - - - Cisco-DLEP-Radio-Simulator - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - -

      apXz(1JC5WyKk(AZ%tzPVfdiR9$r&5pv! z9xYI6s5sOQ%8Po_ipWQz7&Qr0txQmaXY7bUFtty&^?Vvoo217-1v?rs)i|S)vjUAV zP?d2&xg5F?RO7&yDigLr)RJIN|MXY$OgD*EW7%ePgxC|P&Jb~mURcrsyok5dY)9K# z9x(!7aB{3W3$5*{dU3wOIr}=)E>P!5{1=KBKGz+9V8;oZ6QCr_gK`oe7MK_Hj7{nj zp+gc&axPp>M1}Y7*xv8o@P|rXxLBuoAIL&%g2P94rY?Vb9 zVwpVL<|Lq24UMqY;WYq}lTxmCQhnH>gBn&}?{H7}dVdU5u-wm!%Bb}ZeXh9vH8P;Y zbqJ@;*S`#?h3yh_B_K+V4T{7QpOr}kL=DuWLQ1vBd16rv5e^I*5UsL>0a?}%4$&2Z z^N1nB!Spp9z6l3j5{V*0P9Z3pM5(Q+Y!E6Uq&^1JBHvQMa2+85X*jVyhU}zr= zjetEus}h`}1Ac6z)z{Y8LI^a8wT2JH6}~z+x8#_H+xd`riDRs9X)+DyBrst- z^%35)i3NbxRcBfXfEWWt>`jGWvL5%F(P>v+dCb9s@yMy4^gUek!Mudm&z4TYJ!7D% z>!g4t391eu-l}TXbv#{<;5zAAj=BdS!^Xy@p};WnCl6nAQq8iCLelbo))wSgb5!W6 zRR)R^^U04q%E<|28YTuQfWl5mzG*OO5U>lEWY*aiEYF~69gL+Nd*|;fO*eEQ;oHFLQ9H!wD>u@gRqzU?Bw|*999&7kl zP2Wn+L8|`S-ny|~HhkU7w!BAX{@CVNSoP5ku11UTH6iO zlYopX&c9ree%oqj&i<;&W1_ZjN@tJA} zGk~EI6?K&s;hNOF{hiIhPUjT=y|cS>GUyx~cku82-r-JX?{ILkv$_2=KMZh>>hNbz zc-69}K`4z4!8^bRP>1u25E`Be_>csVa1_a#lqf_i;99sx$tQ1Z79w@DHU>tKrvTu( z$EgDqKPLN1T96zLUyHff>Vlz7Wu!+iUPk-qG?U|+#OuqSFnqX6ivzev3#-+@Os5St zR(aZ_bGt3rgZ)%G?@0QCU}^1-(@k)4CT1pC4>r<}j?>${I07nlo;v9pQP<)`y zICVMsFmaqoWC8;hD(f}x{mN}$Ui;Mxz`}icQZ$_VG?r7SQ5=<#G+>`-y&5Y)WV1WJ z%1Iz@^TIFFp5b`?Ddov}%m;bp0?(@Pql0)Ire$JMG-K32AK_HtxQw;+jLBTfiW@l{ zW(B&8$MV9G$?ac9mk#V6j*e=*#jAAV_ZWP6f^xVaXJ?vC45NTY1P<=Z`l%Gf9Ro`A zzPwx{k4sKfq)->e#h=-sGCnPPFkR zXv@y*^GGgJE2pr<+&RW3Qn-ezSNSjg3ZI0kt#MvHDX0WNc-R2gE4R~+kbvXPQhltn zblS(tE;2!2m;b@2B~bu_W|$}tYLi$v<>t5ylrVy2xoNr5ylt z5j`-IO!OG5M9K4r2!w-t0t`|}ff=D%P!9$<-?I)L73!?&XzlUXC{+q9LO)f^qNFM- z2beX)YS*_H5GghkA)X2&WV{)&M>`TOj&KZB+NYzE!1Jhfel{f`#N=g&z<#=8a zT-GX>V-Q^j(L&zH7Po`r(q^{7mR{o;A6L6zuE7$pu)bTgjDEDH`t>s{3z=tzK?|{? z#4zF@%A3gq(_PlolAL;@Hh$YxnP9NM^dgJDAXH>@7ZWtMuFPa1GN)jQSz|pW193H_ zj~fGHt0{dRpy@^-Nl-?sDSg^}Nw=xG!mNd3qnk*NK5nUvL^%)`QX|3Gq)MH@5D~2e zrnc2*8Uj^6(|IO4Ymi`@`Z7|ybfO+3>4@6$5xE4jv9M!MRy3Hvo1>{x9zG)h+lSAt zGUI!wCew#)H%tr(2BaHox{;bpALmsPt!vxCqiHgIoL`xcNI21bg5zs6L>l~`+%#bt zN=j!(ZqUak}y&*Q>?G&5(mBPm9d|%DKHiI+F4Gcd-w6|5mPJ+%o&47~>zy~ZUHK!a(;t(g}>ga~?#Gg)RR3?_9SMwjwHa)E?EX65<_F#2e` zKEm(xPLXAZ>oe2~D8Yg2!)J+)%mLBHt%3rpgpF;q;@YP%q;9L$kZ@d#J@^<>)?rIS zz*usz$*zhaA21jpNs!8S60fbSF5c7^rkaIID=*qBD#=wey>}+>G-}rDWhB`9SGdp^ z9tp!XLEk>!PEx>dK=pg}A{({|mQg}6v4&Qdx-@66ULmd`Q_A%UD-~*Kwp{)2D+kB~ z+p!nEB-lF}svP~i%t7_==mz9XyZ{!Je294>v0QDPe*HKF*SJ?%BT))3(t#n@mSQtd z6O*nPw-W;UV{VcwH;V~oH%{zqlKdlrnl%l!f54k{{$yGUL+tO}ZpkjRymZCW3kk8C znM~BVTTZc}PTe%AP)sUv_NPDChAupD_NPbNqObE1MA9wRv#6wD`q{)_8*GPN?K^b* zl8uL~9q1-K(e~AG`*oN^h z-m%K^FDujfY#H7!?pkH}mzAN%v{q*K6@&LD>=zo)5!>2;C};!wg$C`6Lot$OzTCK) z@Qj66zw8`B{-N99sD|~=Txihj_MtkPHIMEBnj`*a_g}8 z{Xh~m*dp0UBBBRgp#uySLhz*zcD9ZVw}16`_w-=r@C2zc|Jlyw{=H4)(mXgFoOEvQ z{I|%fxpUmPd24wYr#-(aXFBBNQRXl?7#)SvekIiK(PE^DHEiRg`KaopswRF8WW@!) zTI2dJcyggy#--kk_38x#s$m0jX}>zZ@q%q#P#C$TN7EN$^iDpBhX=hT@du{HeY`U`+6Pa|Arw?e+wTJ)HJi@`BpiJykf1Kqf$&_5@ky#5#5*E?_%AmP zcB*4rqSS)qj8^!rnR!yvWj5}I{QKY9&(0e?%lkhIGZ^`7#0zZy){(vrI zILNY0f?FaIXb*v#@Vg*FUbnUs^pfhL(6a`44edEumWVux;WZJ1X77+oJVr>6A{li3 z`G^3QnDJgojV2G}Ls*OVP6mfE5xH0D^bVfGu++Aa)V4kSB(6qD+DVKvEIcR9m?PqH zgBIIZ3FL#qT7zPXs;#bRog#pQzuy==C5wmyj|VVL z8fRF9!4X6~I_WMh(erf~7Q4d=3#<%>tR5qxa3jPbHShoM=-_th9~M8=eIy<+0nVS? zsuOln0s@}+GaLIHP6i0P$k*DPttVmPVt@2>FbkDbPj@ngHw}^U;5A7&mGYXxFt=y9 zH%tz)pHQoo%oJ1?Zd^hBFS9LN^%bXkqOhfPAim?Dou}Rfme8?lkZ^&aAkT9r>ceN` z)_1WzSW99Cc+@cXis2L#?(5V^237Fj z_Sw<>Ess5zaIVSy%iCwvl;na&IgaIbk-&x(Fy9H2$yF@*`wJM)_F1M?VF1j{lA=>& zH%Cwyj&0y#9D%0zRZ5zdqd8qilakdslKYcP2{SfkiGb(R&7-grKg%%euq1~QQTG8S zjO_!w6q3vRgWH1>&TS_4x2b)d-nj$aYjD66=f`#?L5E>igM^x44TcYEn5Gx@0Vmtg zadXAnkP}VJrUMU3*9OdW!RsN7-2#kQ*esZ{X4q~4z7vS?0!T_b*(}K6M3N}+U$QQ6 zkk<^smLW=r2s|sVRoP0BmB>svx_zKsWAiAqA?UE~6J+96(uNRd6(xbJsxm^sH|WrV zbSOZkkl>XP)8KdqB;|gHiThh;*koKxh}4h96d?kDrsk1pZdsr<;Whh$w2tTD1u+5Z zB1NYtCLBQ*6R@r8r(}*Mq@i)+2sCqtA-M>=VI8TMU}RI|-Io0_l1`>qNY#vUGVEwX zkA)q>n8pzkP8b&xytP3@gL()Fal*MBPfYxj@Jd_wQ9Frkr5b z{(Qu;s^PdES5Cl48AndQ_3ayLoIACj3X2Ck5mzL(xxtCb1apszEGfwZK|V%BCG#{~ z3bb_>wE;tV>yuH+AK}_Wt16@#zmcpX>0y3tZQ`eY8sGg{YstV+uO)bN;P-;YM(er; z#ESb;EYbE^A67gi#bSn+il?PmjHpuaj1)r;E%!Yu#iC=CT3?ppa9~w}AttuY!P)VH z-Cotb{fEbRxridiL>J@FLWIzTN$8w-i1~snmDeWtvMzFg*-Npp6s?g|jISe6DDla) ze3yA){>4S#CuBE6Oz787uvhTGHCDAZjaSze*A{;c`T#B;Gmsia^$;mftC@pQU_hD% zhFBTUCne(?tY&o&!|pm9?7gj*oJFUo$8oa>+!V~Whhy#TjJEGdA~DI^h%9_v{m3M7 zqL@g>RhRmU^=;iwX~r=4065NSS8~y2=vl>SCQ4H!r;ZSE+6qEjk^t~$|M8`t)!t_` zMV&-0;erM8H{uQm4#{O$zx0(OpaT~NNP!`JqJy6ydm&6{$z-Mki&$&jnB5Q8a+FDY zfMI+Okzg|Ed0>epVIW@=7CC)za+$8Niw`lSaNWEMRP@_J%uK*W`J{_`IB7p1Q|L%h zk`cpl&U@AIGQT10TX{3?bk9;gV%|RVcj*p49fVJ_DoIW~EhGZQJ}+nfrxG|oJT)yJ zY+bgrA>gM(7Q_+Yy=qdF9V3G4zn=Wi`yNV~PMu3VSUu(Qxd5_fumR$tyz6=iE}TnU zYb|S7yXUN>+=+-OKA(FEQ4L|Dorzy#Jjgl(>3j^x8Wc4aWHmv@##!T|95N<@jEbot zUnDfq0Ww4iLmq`SM6=L?aZs$Tl-5c5&=U$-YpAK`HHOZG-dP#hx6cLd*vGzyLl!wd zKICjv!y(IQ-uRG>DU@C#<^qcHxC3Omu`#C2Nk^M#Ow#d8=sb|K0S+Y{&wkDUS?{Vl zBb8WN;-bF;P` zk5Lg(FYyf;yEr%gr+>vL#M{1E5S86*xFm_hQoFvSaozjT>v`N19(!0=tlaKrTnO!9 z^%}GRU@d`4|Pet7v6x)~Aj7?G0qPn2Es&HE(iu{qV)7J5R*_Cv824u z?&1$l^h@xw(^&7Rp4vn}uTnGOuZ{?yLsE7HG|n5Iz~8^SbqO{o(39V=>BH}-h;w$<0!22O!E{a&W7Dp$m8i{ zU70dhAX8;J5Rv_BHrkOIllYnBc5u`lRW;9{jcppS>r@ww<0MN6X6G5FtCYDWM_!o{ zV4B!<gw16Cd-nVqB5MEN5T)7exd)b;x&V(JJS2}}`V-k~_k zWHPyyh?>UdjD)7F!5l*oS^>53X46p1TnHu9%-FE26m2dEMNPA|8r347QN(bVxMwSv zkAS5!0Bw2bFg5+^NSf&|HOWtNI;V_jC3DYcM}q+C!@GzZARiW2)+qRutx$Twj3Y4=n?;Dyr9;s07;7L^2?I(;6G znplsFPZ*=ezV|ryNIhz2)W;_=oVq^KOEH3`Jr+h&h7nZlN1=gX1go-)QHzF!ld(uV z58FvJ5P?>ou4zYg`f*U@u~m_Ht*F`}PRGbhN#pSPtc?*y#iMf;B9V%yjvix+j2JRTooCoE#U5ue8er=fhX$9O z2A3a)20YR%aNbB7v>84lY0zf)(7qAQlGlA6PW~>frCBA6`fmD+pK?h%hD8wS#*;?T zn)~Yhu8V*^HDtLE?0v*`qCNN3wOwyFt?gvPub0hene6ZNvRN&Yt-W4$85+DR>Qrob zAvg>t9Xd)Vj9YDyU~Pzf!K=UlOdK7|HhlfvE!r7{;=UCtfz(8)BRpkwXnGVtOk1(i zO0AYUh#9K`nw3DzTCtLihD>vsE?b?He5_}t2JiaP4ih7#ueMDc3#G;2J<$pKyxr04 zMhP-_uP=Isq@Qi<|4NX-d!mo?%5VXWQf2Vow8BZaJI;+#W$@mN))9TIj6RaW|{&%C8F$ZVCB(E5l)OJ&g8Dl5ei^3aY32yc~@^lFf_Kn8PKWt{^! zyWd}s^sdsv?MTwmNG9#z-gfO4f%vU{;IrecyK*rNn){E78~uO24=)8jb}U=~P zi)M{z10M177?+Rg`I&kjVFox9;0gS!Zpo+vntL{1T zZP)$0Q}mrT{k&5ad69r&Y!2|TIE%#ZEFn59>7{<&DQJI5c#ipBI4XfMRaYLS^g#jl z`H1#F!Oq&MTX|99^`gUDDyTEuB1uXW%sa(>wJx)hNF8yDO=-SO{bPHx7->>o)~0_A&56#*0UBp-juW zUt>6S&7n692lpdmISr-v5wUFXztYi@lYJVh?^t9v@7*+f?T;~_7GK&Z&($=qs+Q(! zl;>)i`S8c#Ds#+D!hmCl}5mnRBo%yN~7^M*#%KJRi(4F;Yya8NX7}HRf&+EULhD-F3{WsHy*~nrv zsZTS+Ow8zxgmuD8nmJtHzL|#F4j&DjG~CZLNNWPWV>4LtSu1z%OnVeDY%G~$-GBuY&g8ZmKUj>UhD^>tn+!V93>3&#yZ`z;Qy z=@Fb6*V%0z!I@Fc?xDN~CAf&!NU}o=8`edScm!wZ4{u66@d(Z`xVu><9>H1Y^@TF=2+l&OFO-Q#aF*`s zCQR`N&Zd@`zgI8=4g-ZOi@mvv0r0j7GEKg1xi7^Uj1k zSYnb}TtOZ>ISUu8k{3-H6Qnpn&25tRbGYY=MMEzHmXEg7q$snDTA=z_a{mn_K3uX5 z;(wBQfcYO%!b8UuC*avJ5J&&!5D`DAq7AJUK0PD@@@Pu)jmls`B%-&Y3axjLW_fuI zA$dA258q`8errXWCULrAkV0u2J?ey3%yZ;31wFUT5iLsudTsj*sDIEL-JI6a5-|_0 zAk#93&`q0j_-L~PwRP-Sa#yX-Qglk|96=eiMWM48%hN?6-q|744y2YGUTurwc zYd5Q;vn4aBBIUBA+i0W37&b?NB|fUe*CB_8+J(|+0vCQLqz08 z#{DBD0Zt*>X);<8zj4ugrR?$wA(UJhsAfss_*r*hR*_6>_q(nfph%^`}2@pd< zNx*P)5xbJeF_AQQU`J*JhbB#h=yRQ)x)(knaP=Kfq#$~}BTO9o<%5$7P>v29n;Z?R0jDq;#tZC<5U$j-4;Xqi zgtQe*yjm;h2^T(%q{phJSWVhb!DwvV;3Le4@)4Z-4L;KRC?FvP zVsXjfa%F(6^p+)a2|2Y%V??G4jlt9HLQ#G1VOD`EdsK-x2ji{O@f^&yQpe6ubFkoI z&n^5kr!I8w83@nOsxkzGXPV+~4mMP&XBT91aGl4VTli{D-RD`)D)>2c<()a$HN~Mb zw%X@2p}DiyoW_p`?1a7M;1wR?`=f%0@w?jnZT_8$F>`y(LHBNQUt%*PcVYx zbRuzyl3V7Wms9RXBL`|q!CPdNr}SCyGDur0b5OW*kkGbDAPpvUCidU3P9CbRB4oi; z%`T$4kaJVKd}guCL5q~wuAx^@x4r=tdRUa@9F)uUX*yK zhsRsLu=7Ksvxc$c*3%pmK3GpY)HuGx`uJC55B|k{Hklvjcr8;Xz}pP%+sv>m?cFL2xxA=MY6>T4}IPNzmpH;h2ZU&1HhoKn})rEGtHdp?MBj z#cymYlF&Gn4b0XyvO&Rgm?B$SVDfemiC2Tkd)31KV6JZ*R$DQ%yWnU&OU`ydThxG- zE_h~&R=rvm#=W8`vkQPQ%19SJsn!)u_+&%N=mH6p++m+XoKTKDPFPBiwFh5&$WUP> zLHlIE=(nkbYCF1ibP&uzr5(oOnrgbn<4|!&@i^j&TDWs;9!Ew%;c+4Qd3g_!NG0Aw z%+aIs9!`Do=_~Rclxy$e{JaM}Jnv#C??F8uoA;os=a9$ZJ*e_-T{Z+nU^yHOwO2}5 zO>=qJVT%Wj`Vj^tWxAw;{ebTjykdTe?8RB!oMt|30mX8j)yYkqC?wh;vO&M|lPM~$ zQe2YWraFIL(D*d|S4uvE2QnqL2!a;)eOf>BD{Bav1UlXM=tsSY0J19ws#LH>xN|V4 zS5{kwlu$=FqHQeLY5)~SKu#_Q5q7K^e+zJyGx#jhYg8X8c(#Vl+e$nr_U9!Yp3eeM zao07;ZUn}_SZTIKVI1ek5pJL`jRZZlonx50M|y;dTPfbgf3h-$Qy8X0q;Od>PjV^0T$xUkfwr6IB>U|VK!_+>28K#~eqdohDNian3L%AK!v%YQ6n_K_S zAF2X_VhJ_MH${AfeW;q>rfGhgrul7}=7&0dAm2FE5%_I-+ve8R&OKHA07K3uT6Wiw zx*ysH{l@i)M6_qaRMiGEjsZ0{V6E!P-)64-p&KeYlan8QNCM)pOH zR8{{rbM+5T<_69643m?qf51|7GSmucD@fnohw6Wux&DXNi66VJ|0PrFeW^N|o03kO zTmb~=M13XbbQ4ZMivkGLy$jo5MBe2MWdXVs_JP5Nes8a1b2*+Td%>X5w_ zIC%(Wlo#zFWe{`i+iCX_jtCn2>2uWj6ej|JNtLO6_+lAETr0sBssOh0Y3lP9<&2|K zQP--Jv1d{I0Cu)Ry@X#>^TQ`OD`|l)=u$%x-7hd&8-ci=CGgoA7E7z{htmEKYC-&C zFHd!dKuFQ<(0r;+N!S{heup|>0H>s8yJ;C~q-3kYl~5AKN*rk%wQ6{H=sby1Zg4Q^ z5-pIh#>S&+)|WsUVw#|zf_fduIF!Nydxld0j>)vV(B4!zSSdAzMkHHp8fd=wG%&Dh z#N&cz|I_W`&yLdNU^=w>@B{$IAUSy6!5A9XnHjc(a((MYdn{;kyq%C;zZ6jhyJ6%8 z$EyY+NFPI+gHiGrp1kfQSR%F=nKq|{EsPUZiEl`cpw7W&$+l7n9=v&LdD)c|m?aMW z5%fA7faJrF43^P57IiyVJKoPD=youNeD5Zqa_3&6ftlt7D~O$qrQE^xsKFjfyMsoI zJ`y&vrIF2GRPUg#jZr<>Y_S8Xhff$IgDRUgc8CK1L#~eGe+Zw)=6@_t;VW)h=jTeW zzqAfUMx86Wu=Jc;&d-%yk7bu?v&&9NgH2^*BB^ikYZt zo^twl+z9JX^}K={agQJ9Vu5Q#UQL-#Bg|?$vR)QX*58nw5fYp)dB(k%9u|BmxmW;~ zMebc0uY(k{G@tGKeF-3#NPK)3tLncK-=1m+^nGNXRA1@Bl#-1Suayd@IqZ@K>pAro zV!B0Waw7H6aqpLQsuKuN?7`BA7q@LA?dtW6A=Dc~lj*_;iqy-r3++#i=9_(hlDzOC znqk5~L#8V2hQo&iD)r}NXDm&Kj# zIC2@Oz#N|)x8&UAD}u9BJ-RrI(Zdzgot(J4`TE)B)@OMt_??~Y@7l)Mm7t^gt<+>c zNDhLfS(}sSaA#+Gf5+q!Y!GhO`NpNaN?2BMECn>hOitMmP8-M80hVNs14NKP4$v&* zAU7SD#9X68Y%Xo6d4Dcpgw7G2Ks-I~0xXM|J8Q3Kk3M#BUNUl8|Mcjy6()A5ld%i4 zrd=^r2%LVHFBXZS-)!^!`aNNR*M8kO07i}Kk%>#OMX^NNw)r3I+%ww2B*I#$Q5Y>X zBJZh~RU0VEV}Zr0^+|1J3k%p_#K+nc zOR$EM-Zj(<81TSd==#J($_VLJ#2XHF@OKjqrbn*C)9@V^AmA@Y z8=|Olc)}S?BGH}d1T%MS588T>+#n{CFsY+*@$)bLjF;h3RBKA{Dab#3<}(wy@e zh7JYWb|99;9mrlH)dn&VLMgc5ljH2 zQ#W2GDR}7+K^ASR019O5G(y8`n?^XXlX*#|QI)UyG{V)KR3AQ#+)wkVRa1>mf0m}! zbsw8Vs5phGg!9}*_Pe^i-nkNuBJTjGa@6O{$~iU{2>@$ z^#aprrTPw7u8<~xl{m3*XsVR}YpTNA+ecf~?{8P{{pHaX ziVd5~o&R#;$zT5D+4lb4?T_7^cpmNe(&Z4H#GvyLOe!VHe1cc90bwanIl;U3RkiWL z+R97va@IG$w0HaTi-t-it17;id3H=7R8n*=k*6|cD@pW|7UN}DaDr@1d{?t+wxX+s z&B_-wQ4=;R`W9MIGw^pgItVPD)IToRlP#c^#Qx>ik$Dp@yBmv9A*+GJ>7vD)>H4y_ zAo^9ilR0AKX2lE48u#DrL+vT9K^+)09aPs%Dgv^XW5T8+5ym-G*?m>=Dy!Qb-j{2! zLU^4L;6p+=2lt_z6g2Mj7niQ)%5GRInF=glUtU>Vyjd;2ys>!m>Y^;BKHP)q(Qq#C zRivyn2;C!4qn$gy&D!K)C>Mb{<)cv5E;l)MVz*B6EP~?FQufK=ObZpm>~Dc>nzcpK zqx132?$Ml!sEaWMl*1^BBhVByg693jU2F99@o2q1P z(Wf}=3o8gT3=yo?KxvNUpDv-M%%22cM=SRrr@`UmNS&8)~@KdFA{D@T%*0kz_LCe@GjPrtE$IzU@+iy@<#T<|5Jhc5?5 zukNrGY-B}Qpz;eSrC%h?1wLR`^$(II2Oehsps88F1mT0$m@QEo^J>-57jkQ{Gx%%` zwtm25X7i-_09042c6;mlY{%);cDF$Xe(>|)Z&%;Czxn#0da(asXQG2=^d|JN$eSB4 zkb+NsM5)2|r^%CN$9q4N{nK)Fn6>}mi&jR)WgZlyriP0@S)E*G;0kEB&~D;A9LZUY zJi}XeaZt|9CcxEfDzZc%8>Pk30H8H$h{Il{_|DUkSd)?vSaNHCFt!=`8yh!?C74#Z}Axrl$*k3YA zisw|XjuufDhKZpyHz}kld2fpMNND zW7dZV1xIh~tK?j9pT->s1lS5Bq z@Y6)Q;9muRf_1(t$*0Dy1g-_nP-aq`(Gct$OSoaQ)BY?gLQ&dYnu2B#`S z*EHmfK*7WJGC`r{p)8V9li{6oVNgaV{&DKy0F0(=IKA-nnol8{iZB*$_Cq$+~K8f$`*@(8Omnv=bQ9T^5)f|^6GqN|SIaTWj^ zW0>ldrH%D!W9i1Ck5T*&>DLa{-jmqRuu@sJu)MPHsr71gajjZkT$tz}h>-u;w@M9X zqZoq_Qu8<0m#RtwP=b>&I&FHN0$#9)#A|r_w+GLjy#7Z63<8crSie916I2*MnXR|) zU}E3Lg@whW_eZ>$)!Nz&rcwC_@4W%769E)3=OeAq2uG?tgEa=BM&9*7yfM^u)xIC&*e1 zN%kg@!ZQCLUtH0TgS+25k*|Gx^^Xtq(-b~oC1}O{w|Ax9Z0Cc6z1{C@^9-HBMx|E=id?Wr)3n_NIq!wfAMq^LY1_}!Cu6_O1?wTjyC{xY@`El ztP*IAK}OV*PO+GO0!yN*AnQNfYc_+pSOpjyS*T8Rvrfl>&yUPJ++Jj#+TN)mDZ_`!VXIqJ&{l( zb#+*sxa3u9Mcw)KQ$aWp~;l%@oYV}a^rjT2IZ#<1SBG$Ujz7DBM+j8Z-g z@F-jBtT;@Bp1!bopiu-ZI{?uRWeL*4By1SS_CX^Q1b)~FsM263uswpN57;d>5t?0H ze6hlIDa%VfZ123PGDd=%v-&`03DXp6?_xdgnM9(glS9XKqk8S#SX)F(f=h)vVkAKYu_~ zPwHEqgoI~Tu3gJ(AKkg*wZ+oP&`0e$`lui9XQXwF@~d@P-V3zEK3A`OZM|Oo&LGwo zNu1$h+F?3c(`;q9&8b~mUb>Nw_s{kYe7w!MW%c@i(I5`EFvB%Yi|98eS9IQNu1r-U z_O$kD#Dq1quyXS%43TuiL5Gu8%_&|lH;cNTv};b?)%mMe*Yd8mH@CNsjat^E_0}AgH>>w&4P%eZWpHi%+R}1kbaw`KekTsEIa}VU*&*A7{%|N!pMmuz{Rav4 z5iRsVG;ztJ8ryypTsVVZxhW`!Hxi95VO<<6d=TCjets`9v>qm8?3pSl6Hj8_c<}3A zviZc(KppLxh1!WHiN&FgBh)3EsHATj;RR83xHn&IAb= zByoroqr*mI2FDFzqWk-A{>881_vB9&wl??oceXqC_fGD1Ztv~x?i~N~ox|Oe zyZ`j==3$4hJ4bgqKLseV;u=0nqbSfYJW!KP!;g>*;Ec)yN0G7!KD{}^~7mNAW1z3nH`=v@w^HD(m`wHgwcx?4FxQ@WFj z1RR2OCvz$zId7NY$cT`FYq@kQ8^B{Br&!e&{P?~p+*(M0$!Iy^dXXXG$j&=gn;4k zF;NAjPK`2qsHAcp#Cp}>h=QcLcP>!{ooD0#mGfNa@*dmR#Ae=(bax)U1};EMGgv|v zoA$~$Ku!43HdKsYT)7NKsry*Piw;d@v4S15zPLeW+k{3$k0ZCKiaq%eGVR#JFhW2F zh$|6;(|GHGlq?8yy@WP~FxSi-l&;P(BP44wFUhtdyNbwlC}w-_{I8gpQF0yk*=!rJ zp2v~vq4yYJVmk|ZU8p()&GCD;Oy;($8NBr|8oqfK&Mv`7pJ zqaqXH+RzHq40RH9$CzeBkVInJdU?!=Mkva76O9o0df(@qYJ|iW=pj?hEE^g0bIvx? zZTMj6jpY0-$1g@T_6gT~d*6c*!g1+!Pwdp{>z;IemyhOHCj3;0Ph@aN?VM!0zN zi5|Kn=OlhWJu*hVrGlKtGBZWCqpC@^564@Wi5TJ$<4OPI1fhL!C*Yj977RcEm@5Sg z*kV;|t__QZ-$lZC)I4YO@a@CXzXZ=t;>rXMc7tihD3=UdRCZO*11m&DC;p~wF$9Jd z$FNa^(DM-dRU8Gi8ffhRuJQg{wL{UB<9%O}TDcY7L@i@_jFBkgmD)VSw}>(cPphp# zcv(j}7@2A8?cz{wACTgonV9=~ho5a#XJ}fQU%0t_4eQ1UhURn=vuX&MG4c;54=4jJ z;9PR=6uJ-=rYj+XML2ii`Ay`S8Vqbw*y$KFGfb=nkYTe)2rMYevI$7>2N#Eq5jq5V zPsA9^Jr!f9lbEIvMOvne&@mYkJBu>xTphxa%RvQsRRklkPqf-hM8RCjwyyaN?psh) znOh@Uwn4~zvu-4gSg5!*IWE`Ja7w0I9Vo;_oY_TjgCr^aOx(ae%J3c{ZoV1h4eX?7 zaf}!b%%X9|Lra4RK1}+2Q^XJbzu7WsqCb5O^i%l*J81kNj6Wr`j2cst2qNVMGBv%_ z?PJrjh9ufNDaay`Lh6bhA%!yX0a3#g*ho^2rWE=nR$?$MM@%&Arm-fPgIBvr#;-B~ zu-hb(M$)$`-!7405M?Xd*Bv0co>g4pZK6rjeW3MF(WC+PoJSQ+(rc7W!+QoH;4N=b zK{YG*!D|BwvT7(;ky*5n#SFQ zO4L_i8wvQL;Lr|TO@Vc!5xp(lQu&Y;sl$i)Oh$E(E^OFKLpy1Vje-ZZ6UG|JBLfzt zt>EO?-8lgnbs-*)_C5DtIstfdX_`TUi9oETDOy1bP&y1B3OC0d0{zF`+?n!Z*yb*C zuRsIuMViR&ZZn7AH06_odE>Uu{3pc8YPD|c%yD8Y9=eHZXS}YWait)_8p)e;Q815* zEs7qjqQW&@2E(?P66t+hW*~`6YWRxsO}U4t6cEJMPbT@h>5j}CB*XX}-N|7~!Wz16 z?r(FQG8sv}uSDot5H^*2`#YP1oz5x#Yb?EYI5@$v%G19(;1}>X^xK~15^S<>VF-4G zefu}xdhd(d3}C~EWdR9~%SD59kJ)_#IH%(v{;<}@=4Y5@fq%j@pii57Vpvx>d$7^c zHl$_XY~d0bYbrW>Fq)tofz!oD$g@0z?w%bd8r@$UP+GRgQYyX}5s$C}5F%%XdCCi9 zOf{lHKSfchJ&P#SJ-OaB;Xr>%dg9gykt!`EjGwto(g6+WC=sbWSXZJ2)O)OVCW9@R zz@h*}(s7z`WF~AHxN+;~@D8ri7WA9Kksj|`?j3HP>>V8nk7}$F<|PB|Lx z(vT!KCT8;$1re?kF084JlytU^P7hDyu>AgA*cKG`8dBR>N(evf@$4vDLyn7C3GHK& z1q9ouA=x>*1vf-bbL6xt{nC@&hUIT$PPjxa$9Yl^?iqK1ks@~N6jV;P2VR;HwYvvH zD%D*scK$0_k;;${t?3u&1IeJCYb6Y>gP)N~WjV+m4ODlI|SM5x=k1a+>s=x}Ug zte+A`R*f5~K^a$W%hw(Xm7NfruS-vAwVDn6covm(7?;|)I_={Ubq)Klp_Kt~;W59H zEj%VqDwq;$i;Fim*5+?+6buT#ur+-NH!FpS1qa)=!aES#|v7$j%mnr`X)TOVf7SW6DK^9ntk zcgexhszVvJuw)A_HzGr->9^y1DYgJT53FSH=GeTz-G) z78TqDWT^D40C1N|!TQF^>T3F3@6Nuo`0~;QKik!Rcs->$ZcS}0-MqyTM0!6-fuZ+2 z(J@g(@`Bg!cC7rz$~|>EYCsks`vB|Upe3#2cV1tb$7@+Ap2~~;s_RR*w{(*U5?;HU zRcNE>;AHdU^l^yl*Jyl^bMx7Lx^_3WF-`S%b{hw#V4p8+~|?p(U`@cHLEmq8FA zieHd@X=8Ei#`@Crq*Z7%d&g@B5^*-t+OpKL&e__V1+pw%v*`-BX~WRD^!ePo^t%u} z%VdE|%1gK?c>U)5GA7j8NoW9C?A?>t0mOO6)*Bd#0)8O8vR##7!Z zr_@8>0U(YFGdD;|;+G!(cEiS7uS$J zfr+b^mo_#K;ElYtOY=9;7P|^_FW}n#{pyRy2OQnUX9;2|e&71u&i3iSy@`)^Suh<7 z-a6UBW!s65U*>nYHd5^K%F^}NA)I8P!?ZnQefXYr2;m+IQVb!inT&v#Z~iuMfAGzn zZH^uX@8gah(aZt%+4qs>K!$>gZpl|62}cO`PaE89gz)ebneeZg~+jNrQ1kldAQt=y{{q^+m$DQuCwMm81O?dpr5!v_Ym zciZ)_ZX(Neruw}+bx~EVUR`yL?!YALS!+w+!n8wisX{7;3l`UwSLQb)qlqm_2yNd} z8f7F@vVOG>7-c01VJV05)lC5T7lWY!F&!hjibJ+)D*w{4qFVB&Ra2RlU|K{RmKQCW zY)EC11lvnRB(p0>VwP%kerXLd`-LSQ8Z56&JX~I(g?E8pm^8(5NTfK3w9Cc>YiuOk z7nT$*`j~()7g7^xcX&Y9CW#n$SM>fLm_+t`H4P-{Qvl2oT``SBO%uy0*Bs_;Zl%2b;gZ z9sS^ey|)0Tx1?Wmn6S#aGq6js17{FB&%cX$Y)vCfs^CvRv3;`}w5qoL9$GfWE*#bQ zfWRZw`pT`f1$ZRjmf>p(2=94nGJ0;1=t352sFu8$8Oj#YQUQVkm2j~N)pTKcPdNx+ zoi=y6q7_-yi#S!mqK=H>Laa;0NR4n(&s(uk`D*Y}8gcQN?v^z%Q?ZM<8X-^GCJ+bu5s4G!K~)=mA`Z0Z zWv9FdBxp^jk+cWi%mBAgy|}oxzO-`F1akdj=lSP4NK-p^sk=;3*);_#Q*t7b5>=6O za$Y27Ye?3y5z^N`8j4d`yNaTF;b?*hm8QdP#K?Qn5g{_|TqcC7t?p;w;ABVBm+-H$ zS`TVb3MLmtDI=Kh4{QcPhL=q9R>li_#x&n!8Vop@A&BRHfY&F99$}mRvLWGAwlUPd zmK=0U@G}bDw&pr`@CkHH6QDh6VtEGAF*^}K%J)uXHPkzSl!lTPI7L;nSq z80A`Z>Bj2v(!$cl@+*-ysAgqR3tH7h2iRhwK9f)@WMTP!n@tMTm>z72TGz2Z1df#Y z3v5C@t96L}df8=%jHc*MGfkQzCiuf1cdkNM2${b*3g>Q3NDbohvCtacmaIAe!@6d7(*4Y7p6184qmrw*1 z`K*yj5|wo58-e3B08K5W2TxtBWX54Y56(F!ZBSBtYhnkc6g0{r0H{;K8)ZCICLt1H zSS6Jy;arDv*_;CejK^VkF^$fEiff%BNUTOu+MreMQ+e~6aT%Et+Ggy!&YaLUor2PF zWKQ$;6?fwvR6|$hQ_98p1NCtb6#La$;SIwuYUphas4+``VQw`=B24%{5!)VuGEe^wrYP zlA*LRxonx)d<>V3-JvLHQzupQR%Dx#9`jf0^VfLYo-wl#VA8~9fT61S47i`ecVO;^ z`8UKHU!s27hq{2$ghQ&8RpcpU)=_=>p-Mim7260`J>{+f^D%TLr=G?`s4S_Rg69vcbL?xA7Ud2H8VUuRKHr=3B z$LAo^A8K{XzU>FyKo$pM?aD>J{ozIfvb5LYIU_(v^bnAF16#cTS41_K!-76Om5Ji7%FSr+s@Trjz~ z(dCzAvm;Gnm{myX!$pgLiYU#(t`%{0&x}9~<;jl2AUq;q!X=0wBz%~CI7FC{4Y21D zvncO4F+t)Ceq=Tepuy)fxtjCe!BuNOo zdwBZn+39VgZ|#5u5sOFn^o=8Umh5q$>x&4JVK^IhDGJ-<$)MdgzJJ2cwsu3!AY_Di z2?d0VxnMB7e)#$y>4~ejqOA`NN5v57b+T`e9}9RvM_kR4%Qc9V@HzEBKb#D4RCWC% zya+4wZO$;`!-7Q+BV$kQ9v|Ju`6){2gbd=zk(G}`*du=8!?V29h(Ofu|HiRA&Vnc% zgwlThW*rfK8DH{U)cX?+N zEqR!NK%m{bn}h02>6E7@?_-U>*|fj=QUkFXQeU@)!y{BbJ^1no;`el%d@_%ue(M)c z{{>$2@lxAPc!iZ7=RCXVW`4NdgBVs@cmSj zIK(43-#@|Y;20l-CTb|{i9em-xn$S zt*WHL$gXCZUDbf9s8Mp}z>Q1bl8&>S2`27P| zM_2{IFL<>MsGR3c-`~5vcf?34obEZ9@gyB~cYB!5Vu!2jBV`ogresH`t~2?<-mZyX zljW!m&e1EY*Q>vlpE||v+d&QejN#O3_+gXO@O+R`NB%H4wrv4UycBTVe_I_>QduXf zWPeyKvz<^Yq!_+#KedKypIReg~ihW@k~W{{!A z-qzcEoJFeGZ>tk&EJ~DzjBC~WleI9_3sALqqq6rJ(l+sS*-#b40{)rs!^3Lz#ztP?hL_cMMIyL) zLIW>>r1Yh|I=?o5gCPMBhcamUFgfwZ|0i+)qH|nxSe^LakMS4QIM+F(oVV7)BqGh= zB?v670rkQO2*=>HB~0IcgE;Jsd1&rYg@gv_aExNBYp_nPRo6&Ni$9{6;dXd+V`V-l zpNPD*mWwObP}ky!_(x~*8Jh9LQvz{C$+>w87Ypz~j)9`$D;nB$+MU>dv1P*xGbv9_ zh)Rgh&v(@DGF7fZAYw1o?V@@29D@JZr7kP!53q0#|MV|CzML^Zd+!9@m8Gu8v87I; zwZz-y7hKKsAYUtrpTiPfhjxya9|L*9TVqQr>($Dw4JmWg$^9`bo8Le@Y`En?bo`OJMEobM7bPw@4^cI@z*a#mO<5Zy*I+k*Og>iJ)wQwE?&5tH@Vi9~GwEzn z_|h8g*q}6wH408JGG04f1Su}P)(ryvKPMVc--V_GHNHS$`KxTr;UZ^SFqi6jOS1rqYU zkwb|@mbvHavxbdVNw$98%UJJKH*U;>M9v|8y#}0U<+%E^Fn@CaQCope<&~e-bdL0OX$2KtcVHx|W51_AqYH9T) z@a82SlyA8xTVA}zsdSF_Fl>~pEnRkCU@Y3zL*Si)d_=7UbIExjyjj~xUEaaCaF+)x%4uc&ts z7lWwe20gTos~}tb(nqKiiFjpYWqE#i^#$y$GLV1>qJ%y$!OiyQz98H$3!{Ce=_XTLJh`5Zsa8q)gdBCq{?=QV3^*~$cezGih$ z4R}|R(4Z>F?Iu_#`u9}l!xLXWsm|WoJm5E6J+oh(iEm6i{G41U`UZ0(Ki3)D`$XsS zgfXpc^x*`Uefq;H6ACKJw@;+aBj^j0&-5-BEMDPhw1;PgLWvKd%Hz~TGRXC;{)G=}W+pZw|9_N4&o zLRRpV!uda%!_|n1)^LTJiT9P4@OAKrII@kH| zq%c6hd3)#V829y1`G73tl{*(@=uks`3_P3-yaNdF)Amtybc%<-3lQK_kj#u6+QIF! zZ%W#xi}F=HG3fI?-e#s5q@Vj@`Zqq~u@?9x($5#^)DlRXn~06fOasBw!@=FX|EnEG zW~j<>bm((qK!4B*82UyXFh~M#fjT}gh;&RG4znYsMCpJ&n|Ls>b5Z95IYZu8pTMK) z%a|XqdT9=17U5?owEEWl&DRH&@>+Y-nNrj5@&U7Ae=?-{bR!l;N9>+Qtp#>7=YwK- zxzyFc=4;3g*w&pigkB;7J9r6XEp1m1DA6RVB00NWO0Jc1ee#@D?(gAc)a`F>a;fm4 z>%g3xMU*3da`lJ$x*hzm#o{lE1DdG}i^aD$zb>7^%5Rk4KmP5VDpY_-sCO?FtbeE_ z<#I!S&fI!?$jt~J2_#D8-W+1MUi^EnCg>HYb9-~^v#0lB4+Rnsg!KT80_!%21*0&8 zgwRKGXw*yp;~8%7T7|xCYC&KTg8#vJg)<=xfn{`cbLaSUmoIhqaGph;%(i;n8-)vA z{f*n-6-?lTbwR58=jYHEF~PEH!tpQLCNuK6est$|b}IRf@yWlczx3c;ed40XgPfD# zO3l9;f#7V&zdLI{FNg&h)4&x`D=}_?qqJ6Fogh*q7Nq}FejVH38*6Cc|+k3w(WgADK{lnomdMi%eQXu1~^UiK7wCA^mm2DPLZ|n2d4*z z3UV4b&UU}E-Fbp#WSSHnXvNPt=Shk(N)yxRlhGb&Ub8>JCN*9p>~dQ7xrC(|K#L8}05*CCfnfEqq)Axil2zv%-YSlqp-7gBEf!fOS-P~^IAQTp#i&S@d8tc0 z4lqDx#u+J-ky^G})!oiiDo$E~+JIs87_s_-z|#o^2Kr@Q+JdD{;yA8HKeomf&G)U# zzWo3G&p9k(fQcQ~;lFQdt-bczYpuQZ+Fibf!%Co|`F}Bz>U<<4bcTGaVU-r97E=U# z9V>18FX`OZeUR13qNV7TN+gkEM^zE<{mnml`#_wsQUMxk{7R`HUm^5@YuuaggO*NN zo8C7!+WH0Bl=Olx%3;{>!|B-wl_9j6~e(AP^v4C7HabmmwL|xu3i~lc0Obr4}ADy@%El5GJg$h$eQ@FzPI<{ zKf@s(#WeopdZ31O7}*qG?bTN@3bwyux3U=(`qe?;BhN-)M^tw!!-!GW#a8wp#J7Tb zck{(wL$|3IQs`-K;=EGY-muO79UW>uXSp{{($D+5XG*Dwrq`FCDbNe&PU{!o>F=T)JbrNDwLJJ4K( z*I+AanM21y{?<|ocA{zEun<3421kyS+4wBOPc3Upjt=ouC|%Hp!o+h=X)f?%whHCs zfx>5L7DbZQunlbt&ioHOB-#6bnaq1s$`Wf9A(s;TmUTw^( zBeE%sc_=0z!lN9$qd$lKh3q)kQGTFTZIRT3XJWrjn9+~y87O+}Q!=$?3G$k4?+58e zsL7{zHwlMoV=(4_4ZMwG#4zhW7`gW=t&^i4{e_eFDh;8jfBfSCy66o3#^#G<@bKWl z&k3GJ!wGx|D*!~K29XoRUu)qXMP;%T;1&|)bO>-q+Fv_5%-~+fONE%~KwUlu*hF0s zP9R85Uiq5R7ix~tH{rJ*U>MN%9%d3lYS`u&G@oD5uP1ee4SXNy;~$5I(pxw(IF`82 z)#een!dy2pGC2M?&}hIvDz=ygJ^CawK?!3>YXm>k%cnx73%VFMGfY&eDhP>e;l`=( zW*8-JhvC(hse7zoEcf~z-EZ*8mNcfMQYNfhD>h+JqjzH z_~T&JLIw~cj=YiSUVwm-WaXiMpHN&M^F`rb>85cJ!Vo^yQvMdOP!Y+2$+3l6ZMC;# zKN?s+Q0K4qZxPvn4Y=W|`T}UvbE`2Af-%}D^7l+a=hOr<+9vAZ(rD!PflXY*!Lh}w z$NGgrDr4Vx$jrouK9YAMRP|Bf@nxh-G7kJ<#~vqkl#T>9nX3*&xj+Qh6S7v(_vhdX zboUJYBqk^ho7ad(o5@V(RpRmH&%V41H|yJ%VRPJh^N>Jpy>AjV3>nWkliCpZs64y( zI)a;23xc&`>+AZ~!3Vq56-m`h9~*|_eh&|C!G3G?ddM4exWB!ANG%$nm9o+;T+9MR zwUH=!aOC+AKiI#0SRJA;LS+EP=7Pa&0PWMQ>uA`r$~QOkohhZ9`8v2mKQcO~c0{@78 z5C~j*cS-R#{{#+q@w>nI<;v*yQc*fC7vJv3b{NOSxQc=gfbcF_?^}eH;g~C5H{dff~y=?%|0-1V2n-=BRgz-ZnS`C0D8FhE(B99FM~@{2`uc z=&tQm$uIC6j@rwmVskGi6|Bwr-nedBQow+>%2e89+@1`-I#L+8PDG?0U4_{#6vcZG-UOi#&OW#rh@zqzZ zChT8Ze|#4?@GqeeuHvDEuGQrWGl&sioz-0Ep7J66>cM%KT!G>HZyddCH`Y8{ug73= z+Y3!Eu$b*T8;E04IQ1EfC+D6*Xe46R78p1Ulawb>|Mtg!#y{+oZ@*{vrC?OxqSo&?_7F~enA*pp!5Te-hKHRdQt1)&f2YaUmeLMx=hFekG{IW z!Qi*fOR-h_;)s-BJiL4JZ`UvJeKF;KEJ*P?_XM!Kp&V>f8Y*lGivG^q$T3ISrUVf; z8e;|?;aQ$MHK`H^dpuIWQp{mI1+v-zy0FzFFJbm@(Tjur`}^Epq6UL1c(M~38BWf< zHLHsF$`HVr02ZGEAs7l6+)EYT=JDau||GJgHu1~JeAgyi@l?%h6|>K*nhWKh<(SRvK#4?s|3i9Z+)oDZcTml1Ay zKKS48gyZ&Md%{m5^vvV-VYlNxcntZMpvbexcg{Pr*leGWV00b~engwgfi8N497RoB zj@>tg#>{cS?NL;#*26uMjJUn;tlh!Pkidu*aRT$J z?q@_!Xp5icl5>GZoVr>m9Mla2N) z;NoceO_bj4ye`)&a>qyHVvAJ#<&Ah*M5i&#W1jLPY>7 zRh)q2b4_qCPit71v7%_anY3(ErbZEyRLw6#alZT{F^lWf3uX(*>9UIJIy1{l)VSJE zs+th<=m_3800Ygy-dZ2I_g@})1PS5MROZ4%A$k|Pzr%%#mKiZF&VD1dHPaR0he19#6?ezO?4;6(s~NC;$`*3 zEYmL_#~EacL+HZk?!?si*yQB+)al6+$vEnRLu~*$jSCi|?ari`MxMSDg@jW|1{7f`W1g`=p+F&w~mCr_UlAIBVyp9t*(inuH@y;7WWY)Qlf zkZ7I8na3WLRqQ|iyoQ-}izRR$Tws~A0&q_2gcr=68>$3?XB=Va=0mMO^*UeJea}#p zkP8b9&m9O*aqb9&S1yb^Vpl~ulacUJDdQAN)fKA+$P4^}-8>&RhkZz{LG-3i-Ps1F z(JQ2ol{MY9ZTCls7F$PlDy;W~xZW*Gm^X{e)wdb1hNQ5@(c-*@F*@+Mrj_Fu#mc(& z9H9H+UnWvbN363ilchH7AiU0!HV%wkqKK{dj@^!Rr~|X~Yh%}9y-gS=QpI~WhpE>L zy%%cMsdv0J)Ir8EVlRwuY*<-Boo0>66Q73G0jZL_ytv>9LYc}24Hyn+maIExdI7e+ zMmv;)^RIMTg1lh%!W1tXWH({h6bu##`#FP z)}sc34O zmI+BBjIq+OtROrUh({R?l!YA`Vz64K@m>WT z1B$Xs2wfL7%c>J~m}(6-g?RnM7hDzQuBjDVc{QM!v(y_#sKu~jqAVJAOkUcs7I|~U zTUS5}7GKxYhPdzpf|@@>#(*=TX^gm|QgUUfo<*XKz>_lBs3|IV12wj5vJF@?`>>@Hser?XGrmgp#^<4{v?L z4py*b1*h-b@4Rmg-?8`+9^AWjnw%Ww;0y+zQ(uc8=+sMu67U*faat=ZR7TQE4|K|e z2VQu(bGVJiuqh|0R2G1)8XO`8NL?J&OSN6 zN_PqKXL_3Rvq%lX(>ORJl5dg-MGj5KcSsp&ZCj&Lt&=zdy2raUaikL_+XXNO6Ww;GtJ*Vu`G>EGD` zv5`q&p$a%OoJY=A#vzuP zYFWLpQX7r`;oS0)v`rzEk8Bjd6jykDu*;lBI3tAY0(5dNh}l-OIVEzfLPNYrFT}!2 zG2D|(aG=vxsl#~5PzfPp#Y&qufBf}OiN}}}E08ypzW9}wqZqg%FOsDvt)8Wxj%SH7 zxORLjaHF9NV2TCY+T}_q7C1m;K#pQUG24L3DS|sLbwN;<;+4wyEaFb^#?B)NyZW7O za?`tYu(P(lzsH>k=_G<|mJROt71gJ7>(l*Ncf_P5?0&X2q`M!T(RRwMfliYBEhaLi zVnPl{Pqwf*eu$@ik0Pra_J!*Z;lIJqUh$Rp_=TZTu;S1z1OjWQOx6ufvGZ7em#h~Y=BtxF0S7U|00Iz6bQz(;^x%Y5|Hd$cPgYIn8KxXnqcrPFeDux3&=7|% zIn=Zk@ndK}CCjjE+!@J?fZys#l43$3hqH`0T3kH`IQ!EQz+w;odlJ7a)NRRo?Ja%2 zed`3@^aiRY7@-8bS=#O3&7an9@p<bZedXP?M2{xfj9kSZ=05BX! z05J3@1XqYk0JS4Pgon8g6du@&ec|B|FEs{KszbC^nCN7Z3E!j>ZinD2fcNwkhVgA6 zBX)2eYd{fUxv(?up!BSzP!qRNm?*u&dS|NjWEljqOHE7!@rBA__*#NQSu%Wg>bmSf zm6e3g7=XHxnU@5iP+MjssjNowj*%tH{0y%`9K^{6C{DF@ZrfM|jr#~O!-tzUMdwaV z6e)Wy^7VJHzKR~pqE{&hlBfPqHH5F|o)C$DVS!W-wLu-dkw#jiIy&mFzw?qngh);Z zrzV5O&!R8CeOZqPp{G*~SbS=E4oTWNxTPj4IMrFLgDE=1FDmdOFN|nCs#+o%l29Pc zZj2=feGPr}mhmbMF4sfEm_x=tj@S@WmIak6%_l;``(U=|902U#vcUS^bFblg~;01Ydmd`tE;WFqF}MR_fc! zh6;bEk238a7KGP_Lk9T5bO_udJ|1Zq{5x_jTe)*a>nHf)i@}3m)_=rzMew!TB+@Is zIDH&n+#7Lt=Cyu;FTPlP{IdQ7zH?_62*3H5*gwB$eg4w=Fc_@=nU$wj&aOz4h_Zdu zR`!QA3=@q+lhP_8&M!6)ep&s1`0DcXg~cUl66e}JYAgH08U_j=yN8&C#41w3ziLze z%i0EN%q(+-nJbLM;0HrXipcD+LnL1atKtmh}FK2rIc8_Y8GLYMXU{BrE}=FX1v+lC(sd!7e!aTdO`$<+7S zxo6o&9uC67Tt4gx_(&UgzF=IS&H4?wtuE$7UUJ|inBlzSuWm>viblWyfY902yISCo z!3n0L?Eecb5FNt9#W?)_#x*U$?B>Yq++6=dEfQ5S#dGK8Pl7k1jk6@&MUNC`uf01X zFH8yPaE#=oN;oOTPo(&m&>Bt>`1=%CqkTsvNn&ce3n3#+g$E9QVA~I;hxUPQN9-QI zB?Pxkjod4;0KcuE-TLT92xsr@yZhHSk>jLg@Io2?JgOe<$leKnH~`~l$N)$3k@E;| zl?0CMAX~It^^$7D)#?yP7GAwAJ{!i;jNHNH6+;mv{7ZUgKus8qV4_g})?%4{Ft2R4 zR*pa29mMC2bNUEk#I?7xxubn_6)OeKu)?+~u}8Y669EgEv5mitH_o}J_;m1~ouBU@ z1pA1pzHa?|*Z|OQxjuy~n!5LUB#eKR4GYCK8q;BE6BTBBvA_j5zUY$253dfE*6K*J z3&GMhy;0<)S4WXor+zO0A!n~tS5=VJnZ;Lt!4I!a(^IO?>F(Lae&o>blQ!TlYk}>_ zTj>7Twr~~&D6|M0C?DPR7P^DB&1EGm!WKFgwooSC^cK1YF}G%bDr`b?_~lRqwC8l! zn(Jz_J?w% zMcAz8!e)&VBX1Emp|-`Juu=0a#9X32nC^E>BpOIi*znreqr8P~-EE6K5%9v^Js0-w zHnt~gF{9jN=QC`8FG@1}Fd8GI#0Sv5zHJ^j8KAJ)x3R%li;J9HGO%SMXA}9RgUC-G zCSbn8p_yjX@x}+OFC|><4CIKL9i#|a@HyOuJ(Q2#RyR=wS0r8N*2hOI_Y?x?tNS9csfp<3K=c<5i;arjQEj`H4y3vMRI)NenLj9N^H zS=)O$4A;!|o(|nJf?%@u@GaA(y{E$sro8t^!pP>mrz5wHqK^)A!3PkN|Cg^ zbnofloJFuo_nwjgt?!XkZD-u5lf$aiY?g2REM_y0`3yrmsY0l&coB2=F9JA%DSad$ zz*q*sJ~R?9RXy-1+`jaZ(MhKMX}iYqizC~6*WJ~rKlP&K`rgr>(RT)m7;SDG?UP-x zz2@E0$9jML(k&GGjaS{p&BjM3FxVLonEZppPsZ1OuIW%v5`F@au2*QN{ z0E6`>%8mTu0ZRlBA^Z7I*X|Q@42E5(|6tg3f+mu@rG&jEg8?qZPzt}CAaAcK4V+?_ zFMR!q`IIotyw&TMmLXdl{}TX~+ZB5T!4q;|zv>5y5$71dFeBs;z+jrR?+Q4o(dhI$ zxVm+ix#iOpn_F@6unCpE^eH^-GjcULT}DQVV=p9bbJ%B!WKQVXW^Sr%-3D~;Ye-l& z1Bb*p1M2iSnYf8$6>C>{!knH-JclO-rm-GHw%KV!{1#*zG<4ZWkw5c;@AU5MAH9!- zi>(AQS3fZeq?j7|H;zNwVzMI4i-$4TnNNyD#yfevOO!z{Wmu4WK74QQ#%offPi3V= zdq@9Ti_Sh_`w0LlqMy%5?d|G2QX}!n zFMC|72da&zYRigzZwjBBJc;OzVjgM+l^Z?r&u)4`;m8jzhRrBu;T+nfT?EzzU@;t8 zB6rm7yM<3AmrB8#5iU>mYqd2@HJ+#p4VXGn3@}Mtq&*_kQg*fEa-KbE5MIg(R}8HM zBvq8*oMonGpw=bp&H)zHDJCY?ogGu7PkOPsi|62a2tDcfSg|LtwCD)hlQbo-+QI-Ph$+f zCGOY7t=y&w<@OGi{%fTwe$o2Q8xYJ;)%cH=VRhXf%R=uE2EY-(b%-A7G?FK_#}B>R zTYIVm_twSv1cy5%O1VrNI9hh+i;^*1nZOdzBFcqR2ZljrhfBASg9tMRAH2_}r6T7? zNCjSf1g6ntg`}63BowbkAb$?CU^00C-)qvp&duZZ2{|01BO>(R?xMjxtRy|alY>)5 z0U~jn4eld_f)}V_ANL1GU4)mR!BzViH-OGVsywiOX7 zJUg9s5V(CYdvPta58U4WS+pF3_^4OtC-Akvkv*SdK72><{PJA-xQ;nYyj0HEXO}MG zSuv!C34}1ezSn|Lpc*dnTg5s#u}}vu6v=Z&^NVMbt^!F=!#jFrZh2*X34MiR&@_)d z4HWWcVIWzrz23X8h7}7{*QmdMx0{}}3RjUbCsqlBAx*5t&d$FI70lxg%+4Ydl-jz6 z#f&gntp?(3-Be+LQ&(1DR%_^?jLJbBfJsp8evcDqCBE~A_4@0++gJ~Hg9bf?=K;No zKp2!Gz6$SH;T09@K47{yeSQuPGV?XOi;J@$+sx83E?l3sdI8;MT}a8 zxSF&06p!`o{UOsf0r15YW++=dcX9D)I4Hb0Y++ePc+?kf?2NP?#v6f$y@z#ByR3t* z3Uzz)v$6}Iy2)AiP;xoj@17zXSqLop$8&`%m>>Kj&kbUFPJ}=Fy|+R&f26OX4y_&R zJbu7bZhDZcLL46-yZq{F+v`&Fipuj!!%N$T2aj*=ZfvjZQq^R5m_{Zt+uQV_D4MoS z^`3kl&xYY%JRb&!*k71mUB%MUibjx9@9>B4(H>3b0iRG90xL#dDN=2g9;!#tEAxVg zg(VpYD9yRFEcX`pi;4vUJDMtL1}!pT{&cBe8UtJ_4ucTMiUI84obL_gr{tP4$yWeK z;5k{5yvF~qSBr4A&~R=JO-B_vi$4PmaBsEs@SVMb&l(p(t!b$8M_$8(H6!an5ZhNZ z?;<=uH0w4_tA)u#?96C`qX&EiPjHJA3SNKj4ZOp^4fEljZG7?{fAN#8hgl_ui!G;+ z$MNAO)*se5l+#R#`S267_9xOdN%v=1X$>Dwv-mWAFfLSs*rW!OlE)Cb2f^mG0F(50|5|GEpy894$$$E*0;je?z-lGH^^>iSe;l3bP-I(hV+u5$SKbHI(&cBg zPv&SEPoYO_OMqSj7$s(s{tu`xd54HMeZjslKDRZxapE(r|KUgWN#7~NH=~Q4>&rZ9 zROK;y{-q!NR#VprUwYi7cP`X`3PN2h2VbToM*y+FKmkcQwQ4{i$*oyjy^wHg8yowS zRETA9QN>7RWFnt=dU|$tS%r!1Kh+Z760im>7sMa;ez^0MTY9nu8&~Hf^fj||{yetw z(UCvyy|uZueKRaDe6V({Q1-|pBm8EP5R0bRSx>`_xj0~D`=nt7NbMCMB3VbmE0;w& zASX+B1}&ASimyDz%(n@Z7S?sWEKnm6cywMT53Gr>g;W-wHq&P!3~lT7X7BCwqy2;J z>r5Z?ApKa7&{B#eg{h(JlW-pB%d|;*0?hIpo^o87$8JB5$Lr>&7l0^(1XLi#C){qo z{`*(AfAcj8sbQK^Wnq-kmk?Zt27n|@+6htm2%ZpQU$PHLuL$=)kRK5ZlrHg~1vO;8EH$Ic`RXmeju+|ZRS2I(rv%&B=iL2Aw9i62NcC%Xqv z!+ZuR4H#y~Ld{BtA0fXgeuGuueOwmqWJ2%L;ADK3{$m1HF$D_1^mhOAKAz6A777VB zgGNZ&N%yEGZXe?ey+KkPL~@a$zYSy~)&6-DQRp8Pu~&Lc)nsu>PX*+G!=SF9TpdKv zRz9X**&W^=#ex+6#bVT5RUlbg|LoB}-;{N&Xd1m?q;o7#uTE^doOh4U6U&-FjhM_8 zZfUkcAGYbj0Sf7lI-U>~6z1xcVh*E_$<>FF zTs^#XZId1&jRcR1s))|j=P%G&p}?}OXA6Qa7D1X>ak}|PD=Tt&3u&cW!|dEMz11G8 zKpG*``O_Ei?yUT&L!&MMYMcasC>PHDxJBB;L8qH+%EN)1%kx-R6DTFD`W zrm7RPjNCHm_!mp#``+DS?HqvGjD{O$PcA$?gUgx;U5mJdduUoe@4bc|e02)<*_C?# zW!Qc0yhT1j9e$s~vn%kLR4^!y;8W=>294mena|M0$_)8L;sI;uIfKX;F3hdYpU+sd zNOTKllDh|p!N!%Wr2h&auq~A2E7(eEmCN1xI-C`KHR-#;h7fYr_p_MJ6o_)aK9^6= zJ)c$1NoQBWdwlzQ=INZuRRDbMNH#p0Y7z)f!ib~D6Y0D6CscqeD?{kB2A@zAXa_GJ zz2DOGwz$ajLgzE`^eol7V9KmeDbBjDN{r;TVZ77VKHY&woIRDKy&l^mtc4rp$C8UF z5@V0810JSytL&Wxzrz8=9U%HiWCOS;wPk0J8B0F8(D!tRd2oSA8n(wp-T9?w;I#@s zi|hS?1C0;B);yulq~ULWK#~#f;fUjb9hQ7Y9^EV9i$jJrHJvIun_grWyi!}iKL-q) zZ{vk{WU7ky{*mXuZM!#iNaft*j{In>X|;+#?(KU9NO4AG7lv+5P4pl>B-5e~5b`wA z4a%wZRp420Ed6vBQNQL8bguRqBe=~|WE0%yc>Lh-=#uCIO?M~MDO9-;&kilwB|Eu; zJ|63K)B^{_jJ8Up1;Mw2$J7ElN7f|$K6?|du zk3cVmb0j;tO536M#K_kAp`3(O$PqH&m7wgLl8aR~6?Q3*Kpqk#pkWY&?TS~u6r!#7 zOZ9vKE4sF_d}+nT0ba`s($gDwT0h9-v=cvOlFMdJ6GPhWVp)(B6aLDIMx2mJ6GV`G z8>Wu_qeZSQh%a-brT<8ggOns9E&qZPdz$v z6A_cQM(*8gF;gI>2u>c0Q6)nzpPeLfTGMWaUwLbLl%)@-uo@?2HMbmH+zBw;NF0<3dR^(Hh1)-oj zUQp=6du}=QK6oj}CAFL;C)eU%?j~Ad?VGELw(X<_zzK1(?8m{1Cu$2Ft;c zMgc5WYpP(eRs}5WK7%X-gOsRc(BpA}ChB;N!L%_Mz?&D%r10*V@%9>nvGxIzZJ_rg z-VK_ao9$g#LIx9@`H3v&#cl=Z(jH~{2Bf#l8nh<;ezaRHaU{OJfBkDmyd)zHJock^ z31KLsBY1I3MXo+Puy^SapknJees2^sCGVZ+3GHz!}%9eL(YLV)IcTt)Q_5w zj(UtlMHCH{>! zF(*GWRtC{_4lb)hstx^>x#@qMOHWeHXWN^d1)%wDAcqRt@`Uq6u$*ta`4_*lkN(+l zWs9u!fjWrlu;~u=G<>{GAZq&j{ve`x5kP0l5(Vz1m;3KKO&)8#@EN0vWdHWG1Frh;vW-rtS3e!7YK`Ui+ApQdt6EYvh5`ZdZ=tP&gC+i{$U5I?XW9{@LLtF;K#SVyT`N6 zul+tY`M=ot-`@J}e-bsz&N@fskLi{3+%Ld{kDy*)pfu{&H7p?GuUv&#UsG4e=lOuT znh`T0+mFJ+4LsEohXTY|&Cwe)B7DKJ>I8eLaN%&bi157tld*{1r0n&aGNU8^&zc@* zpey?bqX}MFbCXN_g@#RlBkPwmr8UcSo58);hcnQ zE_4ii@-!21Wmf1+(+Po{mDV!%dE<+3fACTx+MzU#Uco%nu+i;^rMktdE!GL~2?qPt_jcasy~%x$ z_C#fu^JDW^sWo~tY;&F9k!R8q7wvk+R2^$tsTByF*>pa8|RX4>m9j% z2`OMTxpk{h5%^>$?;)&Qn__{ZZHtWq>4MDfHmcrwOa?4bO$hM_MMUljTJ$&Kn9Pt>&0S7;LL~6(X7_luHgGL6=>AXrK~I1 z9bC!J73@a!+P4-c&!${=koo$)m1`!kOd6M!Yi6?~-z6HC;34jSvR;xZ{IlCf51o#^JC&;>FKp<9Q@^|1c?R}((%25q4@5blQ@bD%H*!St7ob@_y8 z)TP*k>0c61M!3|DS`GpuHsQa7_eHM&Qu=OBI#zSM5eY(gPVU&_r`lC+ea`eQZWrK&?W7~Y_L zcw6cLPB+ejLFH1zGgNuH;RIMy58B+|__H)OPz~>aGMQ|JBzOv}kFJ8wAzd+~k;^0R zm(WzL%x*Zg3=JI&WsyYWiL^V0k=gZUz!eS!Dg!AT8CC~JdWVDt*tqHD0Gh$)d|4v6 zj{bc6#V_50mVvCSnd@lt<~Nw>aTMR>9dyGf_@=e_)uCGZFpuJ|}mTLbF@`gEJvP`qHwv2ZO?pPuKu(4`_@;l?1Xvy)YL&mjc89vgH0*jRpilxaXDHfIiPzBYVDT*DHoTbKvZywJJBA&@3>dFkRRe7i_qC~Z{e zq3p@!rRmujJb5(Iny@nUv!ZNeaTd4JMp~0rpiGZ~<(X%sV9E*{OKSmpeFkHB%m}=F z28g!vVuwGF;_11$3kZ6D25l`vmc49)A(xh(RHF~1vioo5>_Z_o;F)uCGf$(;=!i@+ zHYV;*E-lZmK94e^BVv=R3`XQrysL$LlIrV-WLcSY@qtv4S{UdeQ*!|)VrXdu72l%7 zm;js$(<>`8U{Z(}^D3qvTWuq>-E(5u+}yG>Xtj;jrfs7PG+S7DRx}4Aw`tWV!vuMm z5zJ2av>k)ea2K;<^s+NO(Q;=ooP=A_Zln5UzlpM<&URQP(_{ zD>I0Bjin=5Wn~t#4Nx*YGc$K#6@e1C@Y=PRuu~}m08~MdO@!G7ECLs4kue~Stc;Ff z@I~B<>l$6`>?#9}dcGqZakuE5kT{=I_mv_2GXn)cM?El=SdrQwSW7n7w&!4XWe_UL79>?T( z)uT1$;0Iyy+wR(ppHarsY^2_!B3B8*-5O7sDS0bE?1f9?zj$y6y0!u}1r*o4j5 zfe7EAg+lBw>6eaS1@EqX_Q+01icR#jg?M8qfl5dD)2kbLpDHQgSa=*aj3r?{2bu?4%9TIi6QesDWT6@#`fJR?=4>7LkL`y!8{MFnNxfK${FcH7Y!IMuP)5?yJ>0|yAeOAIx&Xreq4-^ ziIXc#&_sA6MAikETlA>fV>c$lcGhlP+U$M61I@D+7iV~YDk&lG?;KKqs7D4Cy!u zR0~5GS0_vD_UjlR?kbEWRnlfXcjyaBbPu$`#l>IpmY5v9wt1>`+G!ReOH8)c2mn__dp}hTP(sx}z(+rnT4ZX7(G`Ks|iItIoL;aoGN*vq#{(*!%EFkoStLi6TPJzg;%wJ=k# zV}>2HX|5bo_sUnv8dplg@-!MYOjo$~8CGaDGla`O*?OeS?mmzvA0`BP~ z5_W*^r9h}EJ7~lDytvR0_mR?xDUIf;nAFQPk!%AWIADD`LQOPfmBi3hZ-2exK(R`O&4q; zodh%pW|=L65I8O~H=swH_x9;AHS{9rK2D}|zVl zfY$_4{S56Ys+l||5L6+SQz6Z|h7K@V?c9_c1ZMwT^j~R!Y$t^|I00W8RYsUdSg|>< z2wsuQ8g1A_mCjCpEFCM%Qgr!?0XCVHbRnZ7vrBM1fGlTcul}%+E>K((H>1cmt0gQ4GnfkJ_m z4xV&Cg;zl!(FwXxUw~H<@hJqefBDQoqK_pMkmN2x0AYg;?2!T_s!eB*yo=bE?`@I^ zQaH3HA0N3@l__JWx-h?vUme;lgp3FXO{)=Mh@oLegrT$TM~5aIu`V=)&zp9Oh)*dD zHQgQD)sI_ACWA8)aS%%Ult36#=81!f%4`G*G4%<7uDuHwH*apPAHAdu$)_EL8Tj4G zu%Q#$i^_4Z9GpPma+?fI@90my{1Qe+{syj!S)9)-Uz}ORp{KG4T;_!hFI7jp4{~Oq zms7acW@yrWY=nMDIZR zAAn=*z=w=oBxX5Zwnz|sW9xg=_;GvX!ZebMq6z<96uC2VZhm3bXbcs8!1&S=hwj%` z3Wz?2kzc^&>lU~^)+l4jvJXBU7d<#8!9gI>E#cEXUi!Vg2?UsV2|4dOnkfRYth`O< zVHQw$IynC0rL{-%al^76YE+T9c&=7fN8UY-@bDyZ$!t%23*4UxwVLk$3MYH`lefL= zE(otkM+9x$4s_4@5W&808b+Gp?62N5XuAEI;t_}%VrJ3wZ-{BGHFQO;e@nbcP;Kch zm!zS3YDgxh5DpMa4NEktH-;KnYHSXirg6!0&=#3;^Tpdp?Z}D3TT~&|COcc};1D1i zBRamYs8o)}lNjM|IfCP(MZB$1;T5e~zyv{NDgCU=DjA9+DFX7ocVuR(X?9|NP^AN? zk|hX&tvE~~PvBJX5RD>#-VcOX=q>$TvfBPMiZbDeN*t0(4j!^BD4C$RhpD`(ebPRl4;Py+%(n?l^pZr7k7NT4ALsv9n6=N|nrYB&*N_F&4O1 zPd=)FQwa#Vj8}8`vPYW2>?wFCp7G3*GQ(@^T%1trgAV@ zls;L4GY$y@iqFdgD}+@olbLn`+Q$CveH1IPx6YGCa>AJb68|qQJ-gV$@!r@3q9&)8 zVIGb8vnuya-`v{T+AzZes=mBGqR1{GO3dCEr}>X8>H2*UL0yZ_P<&I5PruJTDPMUK zl+->ycV0e2=*G`;=Pw}SaDMT^MHn2CgDNRJdvRf*hxk=5q|F~XoL^X&dun}hlSXpI3ENrE=UM1=yUV* z>CLH>M-c>wAg-g%!M$DZr@{t$Z#L2$N+c5k-k$%7W zpOFTpCkb1m5ucg~9liV~2i^*L=Yt={9?9S=8H8E3Mp4)Q#-Oc}r`S4v(dTGR0uOma z6$N5`eDoJiq9*>>+dVjJ;V)LebCU8I?LE~VDt#FLn!abpAZgLL-Mmnuia8i zV|7eqm{rUr!G(vh3Katr>iy}Ih;5Btlrw(eB(XrE#>$M4$T}-(i%TVYT3nga8JDd= zL}OW-9R6)Tr6oX2Dg^p?weUeIgUU%|g~Ds9Mobg;(I@jV9hHViEKeT8w-P z@iqO>ZAqQK+1ruC>QZS;za8$yPvS4|wa)IrG*UNGG%P+Ahd-oJq^eFWYv?a2j&zJP zjP%1MO_+CX_po6>J^@r28t>-G_qChVg7Lfo?$>Y_d!u6~)c5b|UBT10TSxL#Z5v0$ z*^I%rlTC<-GV}=74&)SIgEI*3X&D9Qs>!$S;{kh)jettR8lE4=ol5?F`}*DohuiNY z^MPP!DR}8yU+W#+m9{u@Bl?#Bp!;#|ydhG(4N;#K;Wr=f<$&-=l$i`1Clw%L?Y%;o zRX#I@X0-KP;-a_RJ72Wgq(Edy;kr;JERaM?B{fy(qoq84h<`Ov5h27mlD|eM5D4#A zH78F7s);;Dc$rn>mnEw@wgP);VESKQ-6kauU@^f*jsM;KF8)U%!tn3m6*%uv@DskJ zrWx4*fqP?-DYOTp^|fzb#YFrO$iT3y5bl$d9^Ag_r5*y1l>XkId!e5@vvB>2OuBXI zZdsQ6@OReMsfEgDeq_Odt-OsN{!7uuD@h|)2U&9YcW!xKt_t$=)%7cQqRmU(JG08Cxn$^YOiHu?N$PM)D!h34I@ZNKBmohb9+}!cLf@L&Svy5mJnq=_WH185~ z25$!Mi1dkJG8{ZckoDz-n9rvA*_k# z&ejkYdB=u_6(lyPJLZb=?q zO=au7i%vp#MZoIBBP$C#u#`6O8{v>!zYjvQlFeVFX}Iyl47BQ-!jso36WVZB1=`Qf%`DI--iCA! z9~p_X!mP)V*qDVh_72S?2yXX!wFV+{S&p(j>6;!K*LvXbv3s?k0K);Xe(+O9I42)H zSqtHX=XnHHZyRUE_)E`P&8a5(v*u7?*&nWtWQV$K2=VGre=yWgBDDq#1v@`g@fC3) zyXMa%8$(=I0XX;ohsc9)<;AgM;>rW;gn}gN9}G2Aa)jMT))KC;y#Qmx)y}9no$EW- zh+_$ZgZ79xH1Ht1jP?cEeFq((9(JwJBY#;wIL#zUa>9h;ITKO4k0DA(sO9GgPfJ5K zF9pf{XDNijO6@$&OPFo!Z3gMV2Y2rS)|`*w>2tjAt2Ztm7^*qHR)#Rm>n5MAHz9&V zei;(ItH+&H4$K5Lh@wNcG`r*r?~^ z<+*PpzsS6se5kaA}pOMUspzMW?;!rSY}`*sZEf-uL0?=>f znd`Pd7acC8jED^Gb zmun0U&n7%;JmPj6zrrtB~aOX+&b!<5+A=_+B79N(Y+5i>QizbBM+JqBnbd$ zxz4Zl9z!C-0*X3+2byMW8LwaY797w``bS~0;DS*?kpip0O@IpJZGy>?t0HXutIU{) zCUwcJ%S1{N1?X+O?I7!x2cU7i6hMJySRL)SgRQOq`0F~D>@Izlh`1JPgBU2apbt8$ z=1b(Om-Z2XQ<7RvA(dX#1S4#sf;()P0AqjU)q;~<2cb@Tt`-NSUTUj_em0qc`pgB; zay4~G(5Sjrr1?N#c<`6$$q|G>GneY7180t5m*xHDPHnrnvUcmv8g3xU4l6{8lLrsh zcZ9K^{U%(TQRv`KgQR2lrU6l(9oc*on0jHa7l6X_;ZWV#Dxr6eXIly!kImx}8xpv> z_yZzMYdnBco4^RfAW=x&JAt1BxU*MVM$z`g<_qLi*RJz!the!{?H#R32N7JPau&v= z7wgE&GfpC^Hpt&l5jubLY7_FzZ|-eL=$e)R9~V9sg**=DGa)YyW0+GNsN$huAUiW| zv&_yEz7;_f=L$eI@iU!i5vQDG&}Uf~AyUA>sPn8aw1HDE%{iLk1Eo5Fnbb-s%F2Ug z@DMo~89?1I!vNIG(=aCzD%EFR^M;r04d(N%u-G3++TkMR)HG9tA7|014850WzX!n3 z$0032qn;Fa5SuZ4)aN&>Ba(4vbElvaX3Ft;1%8Dcfu;%UDVJ%NMK)vPse@5xk_?=B zF+4A+Is~vlLf)RLI<^>+dOxt${BMys!$4C4B-0BDOok9qHC#DVvmYu-J2kZ#Fk0lb zq+;FFCdj2@KriGVG!?Cf3V9lT`mgAeGIbNu6uUKoHV z<3uo^jQydDkdXQ?cWZvmDzjClH|`tKXQM5^9OGd(h_*ntZVLd}YeNuP_5XgmW&<7I z%FgJ3Ko+i7?74;1RaM+(5_S`*( z8zMO61*}85cqin@dwt$_HH%j`H_*TUP-*MLj-#^d9 zUtPQOgJVQ4zMj?z%a)zolP-cg?QrjsBCSedg7k;k9rpAL-TIQI$BtM-&FhOb>hX9P zfc=+G{b*!iB;tKzy#>S<0_M;Mf%%7tGa5P42|oOuAuW88fbPqJV2KA%YfD9 zC8EfmG30T(3H;?Z-4Sn&Ywo{B8b*mE(HOE@iHr&UUM_H(V1p9-8V{RxPqo-4!B`Sj zH%aO-oK0tfVdv5xl3{ALLtJ?qazr_%aj_;1bDIihlex|cg%tvE3{SoEp-r|WjzK}p z;DYy$!jW)QM3un<-7stjE-OzC2N$)#<~ggt)o9U;x!+qJ2Cf{EjnUuioQ5gJrt=5f zbq3R!SK6@@dF>W4(fAo>qDJT49oebIsNW^Ro8%uJLxfOekm3OHPy13HcX=GbsAtt7 z<;@K2SP5La+{o}u^lxtVzJMN#OXxcub~X@Om1#$AM32F{YDYRZwl@y1Q2aVm5Y~Jn z9z*c19{`2wM)S~&2-WxboH_K^zN{0C@lyBS!OYXSfsBKrb(-NzoZSELvaA_+Tq6iM zQD5DtIxoi5rCQnq$8bEKkqY5J8e%f02k=#>y%0z3|CK?#H8j+`EAI5JFl`BHOcq|( z7Sg;oJZX6Qy97YYLRhegRN59ra>KgF(@2x@ox4~{O5bsHT%{8|j?2#(eTN2R912W-PzZotov1Chao(JECz$go z>U$paBtT>wyIhn5%`pO1RvhP^*LVH{sh}c_>%nQiFoJRVIZ_dE3|Q#P=nD%W&?_>e zmFS)QVR24>xAI(BE$5m+%y*!cu6psR+8lpK4rJy>}?odOO z6zu9yxy2=3_VM&=lB_0?+)$8M)puX*(ZPS`?X^63i(2TVqrctD ztUOVVw}10X_?nX!TX5!5-KoB+iuX1Mn7vT*-k^4P#?8yDB!!vwM;_Zvw_OTc=lgkjrl#mu2vL)I4r2 z<+oobpZs1I8J9PjTzmA_;BbOJfz-e<1M!VGD%LjPOi7mttGHTR=1ky7WcV59O4QVB z+j#Ts%$c5zBLLdU$^p@-RXB#6GZ{oyn+>9Ua12BU6_7Rl89azG5cc5XVXV8a0b_#+ zG*y{K^PR$_*UQN>cot~F4&~I42uw$TgHmW$DI_xdOz;TZ_C&HZ<6PT4RX9 z4mklw0!OK)&C+ja|mHn8ycNm(1Tr}q!g+1<)>9EPDgI5@Ol_x-&wh&V(9>q=; zk?Gg1AT_C0cfWedc(^LaOu9`-O+qO_VHDPrFyA4pGm-1IGiCCmz9@g6GIQBWb!1Rnb*Y`BsD~U^GCB#Hd@N84@FDH=a*?I2B9q`9~d%gl1Ci{&~&l~OVBWj zdID0?L$Z;zUm4igHQyeb%?6LGw9&f&!_h`W>OcsM&jmzTnF;eD*x!g%p=6^#S157* zf@v8FN2+N&I&gsY2tf)gaErzEm!mP{<*mDJ1jg-O+X^L;@D{3IR=L9?nOSvQSI zDzV`h8@Ar%S9mm>t6idO@c@5P?`V3g%CGmY43#hKnw77-iM}6_t{4`c4E%$mLmk+y zIDjliUidc}oe>fy%}tskb;GfmBR-|pT!0Jy2_0WRm4Fb3>m)5=;KI{L`SykUqzMIT zQOh~*q@Er`3@R$D_HTADX&{H3{TClcz+C7NK>wb(w&HHccv(nPdv$Hf<$5 zmbUUa?N5m*7_DhH!fW@_O%9E8lc8GRy(yg9Vr-AccHT=yAIyVO2*b+=RN%oWu550s z!h=coXxL9aDlbl{pSCYAPVscME{0S_O%<-M{M9y+YJqJc^8MU82=(RRI9J9LY{~&( zyI7w}%tyK9Ub#8`ySYnjN{z>SO*jV0wXwJ+rf~H{?%*fKBU9C&I)pY5S#{?gAKfI@ zu7OwqU544&gqG1I`Cta3Qa?ZNR6WfGQ8s@hbN zCrkU%`GmaFI|YwukYA|>giS0hsAr0K?CQp)tKLjFn6vMx6Q+1oww(N83g?Ack%zif zQZ=Pd+;8sh?=rv52<59L`bl4~M=nZaHa^FT528Hu%7vt7eBJ)B%lk&?OfbN0$3HY3I_iZG5=6{xd#3kdBDUrP!_mRJR_6NWF; zQ>neUG&{XIjqm=7y&=K((ec#~#)f6JSJ;OkjMGy4iWlhd*$}q3@G#Vb4>rViLl`b!>je?5V6+K;VqTN;Vo5xMk2b3~0+q@u%jb#Ygdqu~Sw16CE%EGv`o5KK8hBB-H zDVWELrvQJ-Fou>dpO^7&%=9uyG-U{5Ta^MZ*@gKFnBFNv7`HT~0J{#;_D&hXmiUSy z39($5_9?^I-em)yV}#jR+`#AXhBh{8=?t^5GXD=T${E8OTdowyRIffy0L~cd*kYv! z?6|xHF?s<|pE2~Yv&LpvAr~)Pz_x~RqXOKhQce(8({dvRyrxpVbb)xFHJTbhaD1s< zpH15tQQ+s4!s)EgNCT&)76SYEMbHhM8gb0Oi8V2coo99Wndx~*8YXI@$TPR*99H8j z5>$`0+NX^?_9iwX(?%EEmz09}6*gmm(FEp`wOI8MBM9^kDOovpF(76H zfkGignAh{ui_b65=~zY(dkuSz!fY1VuQ6KND1xAQX{fND1(k_e+eiX^L`u&=Xc{To zMiS^Fp(xU_Z6twxC#BO1d?@^Rc4-8G^(G}qp}oBH6v#!Qw2dfm%t|3x9y$B)-DrZ? zD*1kKW?^oc#A+K!VDL!+m;l-V3ydH*Bh~`r4J60asl-{Z6wI$^gN_jbp;+==#qvCM zC?w6bCPszXPhX@oYTGND@u!pL&OLi! z2~K}bT-OLxS2iEV$=8e9dk3m!ih3+6sA!3?>{FPN|Nil#gZ;<1ch|2TZEQY%Y5VZt zaabp7`>qpH>2W<()1HZLS_`(L1t5nJeS;YEXt?U8QtJvyE@6_0sxB^RQNU>&+UYyp zD9~`qb@ZrQs)#47(2bpYOC3@23w7YrlQ;-g($KR~rKFB{QA>4_(V#`$*I_QyELvI7 z{$WzQ=&i@m0yM7tY=AYIPi$Grc}mV~;d(%vaZ2`fLU%b{5oh_I!$Lv|&iv>L`vct$ zP3_%bj~UCG2ah{*el)c<*Jok$=njYeCr6ou3Gh>2Or$)R0RMEMmO;Wwm`R?B7ApC8 ztR*2OCEoz_ykKsIwE(GrSYonlndNzBFdsBhA7Sx`{Ra9PA5V^i2H1Gel-uJOmq0(v zxuhSD)Hp<*Txj4BcYzls$&0`v42)}R=x6o$|>)k;`}FHKZK$W_om9nDxpQ&{o@Kkv4}3veAdH{d7v0jeei%l$h~c%+|G zHY|Qz?hrADI$DW!G*m}vb#2QrXtw;;&FWAxY?+T_;0Lf zf<5$FW2qFItlP#Nl8&Z^-Lc}&1*Qxf{OK(jzS-R=dEay!?B|ayTu6pXk6UAUmk77I zvtuj9YbUNlvYJZ?zmOTg@% zZxr(-?Y{60bP|_o$z8EROTG^p=woX_Hb206@sYqwhKYgeysZnSP} zA71&NHg_){UTIz0zI=Ie|9`x)wk!9$T6$Xn3pX%K-IySgcL*m z<0zf;7A|BO3Hwrky~+#;p}ug^9PIo|z7JIWnASb|%HeGe7ccB0@|Kk*aH&_SD-KtPv(yU|!H46m+MZ`jSB1%B84K+kqDSI(v zRt67O5}80!QOGt{2{;F-%aY0I;p-n;X1@OW5{5@886XwH#1-!2$i8Q)L$=0Q;l36* zoI9APzKfhO>a|5Kv>G1S3Zh(q*hhz5(D3;TUeIv=B+MQt*1U@NEXpuT8XllyE@}9M z3ZM*F)bJS%1r8iV)y@YjYX;)!vQCenXcMTS2X9Zd=4`PeSxITF$8%g=Y;AiU@d`hKDZE z5a5X#03o=t|LJ#GLtubn3NgqT<%drtmL2aHlIt_^ac%uRbp*P!2FVY4x9S3fgzQU- zK!zqYfqt@VG37;s-)`ZECyN4w)!hj{6S+Y9~$&`D!i?^9JIQ^LB4Z;%S zyJy*WjS>P7)HQ|5`0TI7PqyfhJc?@`4&dPjOx8Sn!xc^+26@mmM?NlRqbOE0T*x}J z*>XPEJiISuz#eMos|~<;tRrSR|FP3+Q3HT4xwKSEDt#M{#UWNI%%o&-M8<={OAa$e zvm7nSf~o~_W7({21R+X3S73Cw_!^)?UfE4 zjHdy+C7_eNTb}h0($M=iK;>!h>SZFhZt;DA`D!R_# zyUIiGO>Qjp=Nq^keX^73x*xWI-Iey#%r(qTVq61jDVr>jHhAY|IJSZ1G>?-^ueHd-gF&PTAd2Jw;JavH!#l#k3|l0XPA6txQur`)9(?xM@34|u6=0h4YZ zh|m%Gn-sPdY070FCJqT*n5KgWk<91VrXfdx7FCe-gWdZ!DAYphuY%O`*a;c?6C%){ zD4jV&yh)y+FCrUP#)cNzFs_EsQV>7j%PJ5Ou-8_oxgOgHDJbk1b$z7+W2~UBB+{bN zhNlHlt#DYPzLM?^qCSa}yFnC|gzeyBn#qxl#@@%}AiEEe zF$^U~_>#*IEMJ*!@IdwPmcn+_VXEbHUo0=wpAuG+BOTaZ0~RTtfEfZ}LRj@0>L$fJ z6+%N8WW$1&$PqpmGY~|GhhgLh-G1kkO^$S6sSPVfIyf2|EJr#x4fEv{2-!!Dblh@N zWf7QheHYZl4&He=t{j0WSA}Ju9AUDfq2x$n)`ex&gs7|mIR_IhmQS^0%R#N54~jmC z%1mRi@qlY6mam*ymE=Y>BXn7Atm8?(AUAO6)t46uA((9-gsN)ru|FY?+I0Qbh97vv zwL!>!uC>AKln>Mly$q70F(C^jMQPq66E#^t9UPfCe+CNIx)S0@aES5_thGAt;2p!^ z_8`5sGgve1Fn%MG7d3I2*+U(@g&4QS21X*Fz5(G_Z4e_h9h${Op;}_6e10bHI|>15 z(G9S#J3RX0tR>tv_H;pn%3d?}kR*De%QDe) zVCkWLy!qYXD>3;sdCso{u<5cj=$$EHkTo%783&kSgCN{F1bWQ$M4V}x>6j|_U}A+h zC%oPL=H=cu@pup`f^P~e`(YNDgEerfb$DFR2kK5+0d$HBLS`BfG#hwzU53HRlS9(7eV2!4332PBezJt?WtT4RmNyPjd&F=A4LwQM(Q@ zXeR4Zmqc0S*aU^Q%HPJzLm)Rt5&(7TB^Tz=oQY8k!`$N_?DZRjqnSt<&GCm#r){ zngfbDfSO!62z^g1$cwC=>Vb)Kdp)fTNL?dWUhyoQ@ zlL%$NG#|{Tz$CunE)2bX0AT`a6! zLfRSIZo%%1W{2@t;%=LkEUaCgjDoDSgi8(HU~+`fKAHJM&I+Rn0tE*|Zf;oQdRNW9 zexd8M`7qynW9c;ejwW6tn(Pk3uu-XkPE|MDx_a7XrkBD?28FQ(#W2LxlU=fSb~ERz zrl7zR&U^wq(GffxOpwLG(flWYDa0^n#|^4p(tziZvgG+}Q!xBv-0K)jscap>!J>Uz zBB=Y32)q>0Dewhwsi=vdmc9IBa$$^?TEc9cJdZn1m!d;w@?i|NS-<5N;pMy39}E_)hCchsD;-kLV8ELS8+iZ zH)N8FGR?ANOdlYv?eG|0hls~V7+Uo<%923WzJwS`rtmGR0k)gphJk&Cn#YhSdlhVPuVht%i2wF9Z$xL>7BMZY(eYD5g#OLOK zj4o0T`B;6$tr=3t*(OL2G|EMv%}lh8F+EsoUO|Q#2;ujjg9CQ>M>vg?jD_q2Amsy2 zyO`#n*VBvw=buE%uf?8Zk?}MYd>$;jHJ?_(b>{dd9}Fz?gkfL+4Oq1F>Y}q!d)z0J zyKjv1JD~rDFNWEA$XE=GWwM-`*c+ZBgl3hg1A1RAxg(}*TIF@+Nb7@cm$7(FY)tNn z1uo0eLmd8~~-K^Eejt_Rzn+K-X_FxpH`rl{DF?1r&}+WMin3ZnJSg z1U!66z)))1z6={Z_!2)t12&Z#UxS|g;~~Zv&$JvEaeK*wXA#2z;HNt<4#EbZFmOV6 z;1x(W+=TFQb<#v8L<7kjFJTsPv>bXtKm`>a4@&OKbC=o9ym4^Yx^%R)wYlFq*x}Vy zxyTA-pZ8Ynt+cvqF&J0_G$q}FOmRS{X1O%3#D3sW&6HUaJzvj7$9R60pgC}I1>eFh z4sJ@%d3+m(;nZ&%$8aJO;`K1c$yXxIFbxL+Ok5O16%L?^+!F&;;#p=fJY)=(6s4H7 zPcFHtic0A710v#y12&UXDO7RO9t0V6s9_)r`*#>7h_gOJh*X2=<>mt4povpSspgNH zmN#*B4I~*qSaWCQTx6_*TVSz&pNHlxN;(J2Cfrq!YPbQGLJe}c@!))(;NemY=VaB5 z-m!_IATEhAHpdeQlxp(goD)@~+PD~F0mHIX^A?;2VIJuUg1MqqDGKAo_jXDs$b)xb z?4c%v58~A(#KU9tC0v(k@&X)9*p%7YvYW1%*2}03rn*= zp%S;R1VOYs~=tc}Cms_8kHlY&?qM>yjUVr?82mkAKZX*jW#$_)s>gG14J#*uxq zuLz?k9fyfk7;`wG)i7>6D+_20E1<^ZkWBm;eEzWD&ls1K(SeOs8`DROomkC#8}L=5 zs8N5(*uWk#9N7+%PY8r#w)Xb_}OX@Dw)4AHeQseu&sWbmg$Z z4<_X>!ViaQCWxG^d_C87I)zx3Gg0zr`C(S%7;dl%H4dAyuVkz%cjM87Ou=iGlZ_yP z_CsiSspN?X z;j%B-M6o-O8h75UNfQFpufa5rsJU?aR1+Iat54$zfQ@-a|OV0~PjV zDn6?4^($|$Z5-bEhWBWXUGVXQyNAEAb4^=7AB@j1d~buSX$4$nI}Yp&&{&=8{ez`> zB!5QkTdY~AM|1`^)o6`0l~}L|L}9J}*|}9Dq(*99p01X<4;5>Ue6^V;A181f0#iix*(?~J=M5I6+I|&A= zGz{1k+J-ViN_^Lq_7U?!2eHt5fIzR3Wp?iDG!pF>nj2D-?nRUBOp9*$3P5M4S5`S% zA5tL6S;YqQ9J(ke%r28|FM$2P-g0H3GNKii2Tj^ap3F+yWn@3cTNUV8ytl>Da>v#Z z4J)~7!yD7wR3ddQEYC0X7MB)fl`<-%QZ&DKZf<#AKoMVN07V)yGd|K|gZm)2HRki# zrR7=8vH!#q^0Wh-fa%g#{+nN%U!9*`KrVi~3xT+8NaD}oKc`Ps|Eu3xpXYycu_C^r zV5mc2r=vt3t&Jyi03jiJn;CSfsRqX6T`5MEC~pV}HQ{#}fjna9Dnp&-?T) z;N^t5Wq8H$&doAs10oA=3N+Vz7Q!T{neB&ppI&nbZ$#u|<7hEWxZd8ZLj zzzMx6lNpLqRW!BX0?c@;E~NM+3MeL!DzP>EdJQ774gXyMk`e_H=mPWe60$RHj&7+3 zOi}_XoN)@&lg~qCgY2e2eu9VX3-hb13v)f>L7&GH5+E0Ra6b=_l@%JOcs$VMmQNc# zywE$?qc!lM{To12>;bkyc^zitkfM?~g z>+G|2Os7v=%~}JB#SEW10o3sH)I0X_YR~@NyUt*?LI|z-XJDWR*wDVx-m6t&|J4#3 zA=l5m(#pAM9263IdwIu~XQe{D`_S?MxG&oF8jiQdqcgL;gmXtqf@$=jllP2slXVW| z?H5NLIOvI?*ZbL*caN_1aNPg>eF6!~|Dn;7n1o($fA8q<_9pJdp&J^pZ5%T{q(yID zW~6l+wmWX5qUr~`KmNaNeM7%ZqW41INcO;*Z*5+eYGM!v2G!?WAYj}`Y}=bM0bP0T z#VbTwpZsPL@*6Zp?B_moM$XtW_>C3?^Wsp zc!|QV8DOfkndSp`=a!cimo9QGbnIc83W2g(wSlryA1v2)lo&vyHA?Q0jNgiOuDdVc z{T<=Ik(NDo!!#_}UKdR!rawt3^5pdL@;tVFyypeYpO>8F<($Xduff!m{)UD>%h=)Z z+lNP#X@BzNmlzMBf7Beh-@b83ABN0Da_VN)-*~z10)FFVtvm?^2lpc|`pv_f|2ePN zn!*2Rq%qb3!|v=lC4TL`vwQR(Njuy@?TY`X!_%pUa4kiF-MslainW`=>t922`Xt|Y zdHd4QOSpuJmh9zwuN-}gS5mp`I?Qari{IM8Z|vR9P)GH{D=FO&^MNv7GBu0Iz(Q06NMewKhL{ z^tJlf;5Q^k|81rJ7knl<344%S5aLNs;KbYHh8kmn9jo9)#!{w$eV+G(oGANyl3hpn zB(gbrquip+9$A$r*ZS1SG_F7gmtPS|93<8t>fbW)}c$Aj_DSng1h!!dPPe;gUc6X#NJynOVg_%DaRk?Eb?3r}1_QyCn# zPSfCyEAN-*j`3Eii0X!*I$Z7W(o+cs}OkSHv6q&40hs4`;nl!4U*8 zm62UU!TjQgH1A3KTp;ojfzlfVWuO8raNRqH>+WF+SC!A=1rGy-xw?!g8$co?PzHJe zYV(qc5LMTwQR>=z+v~Enn$|#|71L}{oxB`^??L&~LL0grXp7Q>aQ17-!Hp-%aB)A|YE^mtSG06zoIM zM?({2y=A*WPA2J&Ffu-&3C19KsH|i#DNP)v>RcHkR^kEz7BXy~+0mr{gEdnQqr%?h zE#3?qCDCB=IOhOwoZdIG4>oY#(;bFNb;uqi)G?@vr|3J_OGQ`8#>zJAKwhLZAZ&SOJ#m$=q{)Dx;x3}ImMHHUXamY|QBYTB1 zdO8{YFaGh&iTyW_5Nr&8qE52lQgx9tU|+D2QuUHEBA;a0*z3J6)POz2zoiOiiBzz& zH;w2K>OzT_0Y<#88smKCo|~CNgwWC=UBKfoeu8X?$@#`1+kUoo@V}2dukr5}@aAiDy& z`F+}9tnF(}7QZg!aIWab5`H*<4R0Kl*)OH6lY#~5Bi+A!=X*3`?qRnA6^cV7%!lL5 zq!Zi+=F&*1b?xZj%E;)5O$6vnax+fHBDB-G!eJZ|YfBakXqY$DLk9*@*T#7lqio*X zTt9lr`J$(4KB<6ALSX!T=4+AliwLZ+EMhv6ahNobbo&zN=Fq^ z>6s=1S(|`dl8Wbxv{0u(&~M$M53i}O>J4-gxZ@&R_08ib8YiZ`8nqI1p6n4jvQf`cHGx}w27 z{~jKd_7!ARJGs&k)`u0-&Aa>E-qt_A)B6DDs|aEy8y#$4mXLI;&rz;(Q$~BghXr<0 z;}(Q23`RFoa3B4jn}Z<7hRls3-Sa1SEKzZOkb}o9e5#s zo~1*7WCC5Er2}&|TrV29bVSJ*VxA>TC@h9SONYm^kp<(@5go5#{UA|!Tt9dVN-SXK zqk0zuS!t5-LB(Y>SyEjZc7jP)NsL>P)g(G%8JS7wA=M={$)ngImeeE-eCk+Hlb(b@ z-?*$CjKKuatlovSHHkRlynnIuRWuIKulSU!{VKAVCYJ`(@EQeI^j}l$2@!UaJd!1m zD(!B3`9<+6pcOQa$`%93IO*r7*L5_$z%7X8s}@tI8K$D%S`HKIg5ra(x~gHD+y zb3dna^71X_0|XD7Bfr=)9SHqlh9zDl+A#h0J2IrJYZ8IEnaGdlVv|s5szXZ9Q}ej- zP>@*4#3A?=n90OdLZ18xc9IvddOeGPYCeB*U*aTGkt$r0Bys?aHA7fGzJNAT?fCL5 z@bdroE4QI!QQ4_7pt?qJ=}1s0pbsUba(eFlk)c!zDT5Tyg+fw=>hACEN2pY4rfgM! z17Tfs-T2^KQaBNTo>@x-#OU6^D1@0 zerrK59hXPe^;=d`CUL{7VZ`*DB_)(_DY4}Zu>R{WkK1BH2%j{f%|4mTzzOI7%ijCM zMw%q|VtW+d+j_Ih?j@Uln*DEfd*o`ex~DW`6}PH5Gp*6MT&yaRr6H?I zRmJ|ZtMUE8(qZ9e!&(Cd9@aV-5OjGme6V4`cn2SJ@YNRdY{4*$J?i=l=*hodL}Y&X z{i{DDXJ$uY?M}1m`!XXVBO@atBO@aSch(uD_Qj0cb~0i>@}yBL>m2O4at_OViXZ@T z`m@pG>`!5=&ShxV3Q!ke7qgO{**?LFpW+$=hweUs!&f009X~&DNkn44MWes?Bac+# zc}z~Q>=P&zvYl07zh!tg!We*e+f;Z)Rhz{hc`NIWUZ1~q2S47u`z-piTR=BxmI z!aPyEBQs%Or%2PlWVawSV}bTF1}6|%yb9I;hmRiv1U(HUKO5!g#Y}1UB<)HaYXwiT ziU^uK{n>bUeEBbDvq_B7Vx`J$_XoY$akZk;hI%Q%xwMQoZ<5{K8saif^Se4|s>dUxuT8%}; zC_Jxo+)GV0OvU^$*`I-oo7V zRBpTnhV(!*By}X$3*M8M-G1)qs_HarKnsj0J zZT@2FvC<{pzey4T%9LneXmZZ-^Azev(ErX~brU?y-v&DFA|7%ze5zKI&_IDVF+XYr zmXoEBpyn@!Pm`t=R!Z|dpBYa0Dm0yIXn6{4Bh^iuZvC%;uT~D!x!TB6My!j~cY-(` z|6kp|7p+tWC=cws1@CFnJ)9ukwCM_CHjDsfc2KBy#Oj|TR9ucqn$V2S7qrP{_drkK z$B^ol%Jqej;8Dz6B*;PxPd3|D_Y?;(DB=Zw24&|}`xI+)66=&a2H9ffG-1gDkl9OY zas^iyIUJdVJa6$ve3!)Pt)PpAaDe^_>dG!Z9#$1Qcn&AQA{mUgGrH^c7ATciAGFAoRTe ziAxc3t1sdNAVgy2uc0xWk|q+P)6}8p=YN7V!1MqwYX%D{CSbv2^Yg6!i04zNnBiT* z2=^yHPe}AX`MGR-On}NRz+CXv9EK$d5auJ0T&mGXdQ#*xB(Ska&z^FKN|azgz)o&f z3L(#*a!I=eAg9ktieNL5%S=Imz(@(H3D_xZvk>$=tLoNfa*;m%)A4^jP7JC($t=|J zm`gPvWOlB6`4|6uoLnKKsN1=&MgNpqL}z&Uzi`C>kOeSJ@Sft8=8Ockilc&`&vnW3 z5(Si48;fA;aY_D+7Oi`0GkHghfJmNDqj%4Y(7J}8;ym-o)+SCqg0;!P$sE;aAU(mzsy}5c4c&4Agljpoptu(?afNYVfFKjb zI{ntB`eV)wUAUCuHU?rgLhO zwitE_HBsQj$7MA9`F}PJ@QMU6oJkbe0JgU1!VoLKr$76zw^JUHZ!7Dv6Wu(r@e?6a6lKig;>OL}l5pRLc#R6aiY)*TBOUDbn#2WTl$wBNXfC zFBjS3E}4!ot^NZ~zb%UwCdAz4#Rd?Ho)zLbkMEH2zjoSUAhDK<>ynCx`=&E}H)1GR zhO%|HI6m2JzCwtp578yKVPs<7K8{1t;v6cDTkEQ~{&lb0>QCOheft&=Ky7+%As3ke zb>Vce?#l}){^sYrU8!z$ptH2e^bWub5p=PqHsGI>YcB{?J>=w9w7U8B#6FiG68(5_ zyzrZs19i1cV1v8b9!*6NdJ4n30;u_AwhVXo!r`l)n9s{EE7exDbWm;_mJpL?_vuqq z#cKK+|McGn<4@oG+jsv8J;7K=a8{#!raa@+iBC+c(s*hT|wYs9fx-MFnaDWp!7h?Z`@eiS{4ehb$tFe6sC zj`kHmA1OxoZF@(HKgM;DxB?uU3u`>l3QrOhz-0LqKKLNA3Qt+#pZqe$fgQU0OB4VO z_-KE`aS`#Y(CN$n{$J2TbrW-2wy^s2eE3ElZ}Bl^C4*t1@Sly&+AO`z$DEe>xZ6L) ze)?JTfRC|y+vB(H`3|2$8?onq(#GwyXVF7E)tIgV`_F$4*@nogd5(xfOIoN|%)9QdIjK5H4L*2+E?cyc<+Uv~*E~NB@?47gk#ZxQE-KG4C#Wr8wNmNiWIYu0_+eTE`K20SP@y9? zi%4PCLD=@x>Sua9OUoRZSsJ&VMGZh{p~mdOrmLc`vd-+%b{>z?I(#!ryYqCER%V}F z+HAilEj%={uyeFSVI9cXrDM>-$1@AN?Hxdibeml`hHTSmW^q|ng2S^)qo!-vmb(Is zR+Zal!r}4himi5-`TvYxspXmeC>O{7{NMbGXIF?v|=?9T!$NP9w=_s^d@OW zq|{cGCd1K`m~IYaUp|h0!yzZPT7N!$u&qizSM9$TOmx}aqIfK7AZ4G@Q|~PieYnDP z)TmTnrgQ_)&|q_xs(CSAhuGpC#ZSRs`)5cLxd6-3!75p4KF6qE6}7@Nl^9FWI`4$Y zws8 z-FAmfm<*JvR|Dc~SO5ZHdqo&#s{#zl;41=&*9eN{s{w&3?dVGOzao%W$Uu-^4Td`* z0!b*}uLvYY1Y-YcFr2Ljh+uAC5k`!MED~3P;w(47ge$}qfryyXZIW9!6jFBSz-o}4 zLJ*{keuy_}^1)tf+xdL}GeXXtjOlfy5P0Y^E5Jo?nQr6-bABUPbQ5|MLkp%v*;U8% z0gq*}@^o2JGF)LuO2!gQVJITIfTSsLi;chobvT_V_$*A|48ufwaQVFp8FLolA{_*2{7gQEhiy2nSrPwVs!dnMLdtx+k7dLd*nGs(e_kAFTLo zzCNqg%GKsdv~AmGeb_)snU&~)Z9(-}rP@T?_8onuH#^If+Di0LpQxdtT>X^K9_ces zm^=3JHumu=(PMk47u3sW_|x+4N`!@nD8is7WuKS!UaUm0HONEV@|Sl%tn4Fn@Ro%H zw#&=q(#uk%ipLh;7uS^qM74H+h~d$e^~r(+mrJ{d_l?KaEgWJ=Y0Ck#Wj(_Yl>uo! z-~R~3t$!BXqx}4+@d{6^hq&J(rOTgIkW3}ovOZ#4Adf%YD}Riq)m=4{ z*Wz9UB;Iy`kM)9Yxzfwyl$}Ez0BOr_JZ==C*ayY+L0QGLYNWOK1iLq;ZIW+_rAwfJ`1Y4l9Sm#JXu_ zuyVcj0;BN2I*EOY6h44$5!8NQorHt0JXR17tdFod%G13XhWCN>5UPbdte2`U(cA;; zVaom&PO}NmABVK(t;BPz6;2^+6+Wue8sQ8pd`~`AY+s;Cxmo)JEV=pi37pK7i52Na zrMBBRd|5|o1bJy)QshzdWmwa?rh~+qFN2!aK^-c-EHw{Gbr4VBI(AjYl)A_Sbl{qG zGgF5yevQa4THnStMZV+ybh0t&S)MLL3HP$;d8OGv!0qO59~>sqiY1>rp(CfafAifS z`IN89h&12zA!%IvaglL>A@)s}6AbJch)5`~;7GM3W>N%!DSt!kmi{*P%4bg)76=UZ z8?E;Lqt2UzLuy67N*P{OVkKf5QA^fcR?FRt)6&2A zqd#rK63E@R!%e>7&IcZu2dftKQG_i*UFcqpez;(vTKM#5QalfCCiWdmCUhMa+sshZ zV8fSx$*3$jc*>!k#QlX10r&EmcqiI%XTT0+`CHIVvZ5KDv|?_6HXP;3Zp6XXaYD?k zx99~?{`HLrgi=&xVE%#_J$}&xx`92#ZHrihlwPyl~pqZ z?AK(s-NPfwB~28D4urpz-C)uV3L-ep-(8ZA5OVI1&<+o>tWFEUarN&m*P{OrNV>3Z zh`iDnp(w;Zc^_K_2W)r0UIYxU76PW?gw0nP=tL1Xd07MyaVKbSm+m+ub+sj2q(!R< z*hFXfRN&3(sZM7C*{vNxc_d8|P~`DkFuL@`BzE+7kx6Hc#N=lblBpq3(Ikioo##Rf zha(qa%u0^bb78uI(JI(uEyALym|{3+KMRKg`!B~cM)=j0!ruF#(Gtn7!v)Yma>Snj z$`y%Lb793yQvUG~bW9yzq#;o3w>6HIWJ9qzBIWW1T)G?9)X4&u1Bb4wnnpLQ#Aqij z1_MXe)xm5`k}IraEyW{Ps_vmHaB@IUTXf~W?fhaY<@v?>L`Mcc@oR^kz@H$qflLqMr6{;gx6=)_hXO-FZ2mKYgU zb-znd?Vc~FL}D`$`=Z2q3EOPzgIW{GQL!~sX=Xcaef6U90;U$XVb%pe-_&VEuo@|M zSyhp2*R7?Wmzuk=wa0ee`l_-=TY_yVZKG{Xl%bZiYSq?@nr=OJ;ML8KHVadILNhz4 zG0+VPqQIY1$WkUa0>25n&iNruR9 z3dw|#Z01wPK~-*F=`2Bu53t%U7G7!yZhx*-4_-Vt*|BXQ;PUR*@C39 zks^tM3E>u@2^38Zfi*2yI%pwPwCMm#MbZ@wyA1*!HMQH?sw)(B8-*$~Zh?T>rYjV3 z2O%Nn7)x1mu2e`BlsZ(>DJ>kCEee`a1BI&4_W{XpGDwz0Pz%w-3S$pP3LhmF9EBKN zScRWT7o0%DvH^b^eW*KcY<`_5?>cz zG(fI6P|}r95*yIZ5y#Wq{r$h~(+LzUd5@w9RC)h?Vp|GF9@%qV4(NeT_^wu>m^<=t zavi%giDnqcem!muB{I}SSb{=BlNmRZ7_!@^R*As3--8-yzH!`)ivh-o=qOBwu9ELV zxkRKI0MB0OR2Kj>c}yKpqdkWsLhluJGBqIdUrD&}$$K5dEx9WarfYX-Bn@UQTeV^v z4%}R2{(%qG;2o`w9lh2(lRTHF~DF?uL)W#KW+$)*J?foBx>98b4B;d*g?qgpr`|%G3Sf z%H8!3Kw}t+CDh;+42Az5p!8W{^M_HZ^T`)@A7LE@cA<`lKh2Y8G1-dZg7V zkbJNm$4xuiOd48fn$a#iMT^A3%fQaX$O*xqbj;SjeD=3482c7X&sS&@zI-`T0k@9H z1$pC#hkrWe^#jzS0N}QyBs=m_b33jH3sbsgN>ubT3kMj0y35n=&cX7SLA{6tp;=Ht2tnT|3y4Fp>7Jhg{6u2M#go zQpibWgmVx`)Hj!7-mlqa6hF7Z^JGFhnB6A%b)zD)jjWxTAlO${f<584LZYa57%YSU;Aely~(6~+Jors zpW_{#YYqN;wjv-9g8HO4p5RsDr@ckN-eB5ta7OL%M8LS#b6%!vPT?`-!Fzc6G+B1g z>z|$-567+EYr;Ki5711En$;~TRRHT`a^d=x2EbRzTB9BaIJ5P<5;-uktxCmgi#+A$ zxP%1NXAbIcaMC~ZCG=PPZrXc0Z8?$zrIODJ%43T*0DD}3+C^2vA}J{BQM#Hu%PALv zah)9w1W6%GfQZ%Z_Kq)oxAjN(##mp-CU50|m2m7Dv%Qo{Kep1N;dmPN#D3X3aQkbp zgd=b(7{E#YqBR^%`@;b}l%#>l@N(Sgg{TEj&Q_Eu6hwLsCx4?X=Xi2TXC7IpbhkQM zIsMp5kC5rK$Ke)m_Umk=KYG2>Vun~q47^PIl(&zPZ{we5D;Mof@G|^$wle5V-welJ zw1#8KpR*Nhu+_c17@?W)*V)SWq=WoVKx5QzjXNmp9&~#m+E5|=BvZ!3U#grujmsKc z19kp2AGFW zT2AU^9%-rYwG)Pd=H)<93KzzW_IT9BDhZ}OORSh1 z?kaJjwD|6(OZEp-*TF<#0PP;93*#YMLzC$@h}bk}pJ$#A$6f&TVKkJsV@<O zoZ}=Ww=KS%Oxx4T%jB zliqo+lmF)31Zu%pe7O^op4DL1%AHB_E{hoMymi{=8TrzBi8w%_DyQTMJjx5Crw~4$ zfbvS{GJ_p+yDK#*t*K0E&^zo%8{QYCqH}*P)+2*?RnNL$u45>_XfY3dW5M(LB8kL2Vn( zCb0;1JcfV#@ZooGwR{sfcfP~ln-8}1FTOn5dhi__-912Ja@b`aeg|i)JDZQc6KyU6 z{JLc>A>qeS^qtpGF8b&FQ4ze};I!z~xB2?!v?+A&vl034us6QwPbN?`qy8j1>y3K=bUJQhQS7co zC*xi(8lFUy@27C2o(`k-;9Z0b=L8i9V|YAm_Xotk9d&>eOHa=LYBD^TzG;tpsL+j& z{CU{vw*fQi4m+2!S*3a_AWr({y-Bn>J?lkx8dmEL9Ouzkx7R+8`U61hMebGfrawIc zt)wnGL}MOdt)U=|mBhsrk!@sKS|SLe0svo5&>P}UoY$g@VYh$6zdh-uWRjkotwmkv zU*rDqlK7&^yivrH?*H-(yUr9J>K}VLNMNoAAk-v*CqQPxK6A zJGmTVM+DzL>HZL8l$L)Fx(%PO_{k8vqc`lPb^uBkdpJSrY8%uhO0|!NuY1xxWt72i z+VALS$oL3OI`H;ta)xbJblej#X87%r`h4tqI3^t+E3k9N(9mARrqex-`3s(jQKR;v z`3XG3qDmt=tk*uS?3MSTJEaDG-&u=3sWd;V9W^7A!0o)|tEl!ODpg-aA62S*I!5JB z;YiVFM74TUIXK*}l<~Y$-Q7RhLxhRwIqFtx&1k=JP-y~ivlg*Y16L_Gq(1<9P{xH- zv`~6p*{?KTtwk>?O@u0IMDWOqN)de5nw8z7{Zc(TJgOh!mLAa9lj#Wf)k^h69nF;w z;F)(nLi>0al|RO>2$|gW_odO&5&BXWOm}OCuj+6cY$}8gYx{d;ym?**qNV5iWo;Gx z+}$r#4%VW*(n0AZkOeN{&MCzVQR%@aAC~Fn$(Bp_|1LAJlUBPmae8a6q389cum4G< zQC^Em^$NpqC=M^`H8ez8qZ)}>W#wvFL2(?U6Mnc*gp`EW8cQn~1%xHPE4nw@CcSZ3MtJ>`X!X14(vg&w=Egm2Vh2BzvR`VI36_=4S+ts} zwf=#_g@)q0F^mrG=tuPzyJA;{3vsK|Y_<-|<$7xmp3b$8%k@|9`_3tHIF`LLyT%WzD_9X7BGSp{Lhd39GW(dVs4;4TM~-O;6qtrmZL#R;NY!g}9p!T5IE8!u9q zs73e8I?)dwLZ@p+z-$F=MQG=+)LA&WvA*8lo+Gcw+I`4N(6&gl* zyeS0?2$VQo(s|0t^}HRyum8~X8B1PmaIPRrOW^=* za5NrvaLPj!l!L&UmFgjuBrLxeNW>6@1E~yVNNhL^NGH)Z_Q_reTS2ECQLTkS0*wf7 zt-6kiD+$#JijD9>&@#%TMn)Ry`KOVNms4*XG&W()1OsGsM?P}9bSdvyCVuL~ZA;^f2tOkljAi%*}nMFVg zt$&~vQJDR@JwWs_`-t&F8rEQdE6RM&RW+6f*D2|WU=q|xE-ZlHDzZ@^o-OaV8D-s9 z6FJt;1ax1-CJ<^h>qlh=nKTjN>JhgXh~an036Bs4bzTT+$#sj?i~Z6|kd1^CoE$|} z`iBJN8#llO3;t?=BSbxG@bhKVJBMKUseizS2~dtYLH#0F0tAbQ;k$vU#?QTIFnkkr z$9?RaC}%jvkT&hk88_x8%-n>go@m|0JdD}McUm8LrNO*mICe%6X;fD2n1AMI3E@nK z!iA&LQ=qmg3RruJ*bFoQz-i!J3k#I;+gemT+TRZ-X=(#Iym1fxgiv+Mw5W5~qGKS>Y zjMOMH>ICt`M_{#H993m=lT;(LgcV`9>fG0kon*jbKJ;oAp}-p5zC54C>Q!Msz5r(p z4Eb-q69EfEoCY!#bbig|+AJF!G+wGsTd7u>EnIhqi7|^IsBW~zREs9l8GI3{xC!p_ z&3?%HW6#T_=3?!_;bA;I#tGH68a+DPD>ciD_x5tsg(SI={`#gHi*?vHJsH7J180l1 z*jbU0{vwC!{XESAFG zIMs|jw2t3lW9|KsR*llqh6$a5Kf#)XRX+w1h;36*T>I%&H7j|_nQ-M4RbOAg9E=v(}jo;SkI#TwC*Rd2QX^^18j{ zMb?r3n$XK{Z+Xe3vD;f--@aR3;=Uf=74lcS5|1>n#s`UK8oMTZrqM8vL@d6ZgliA? zdBrGxk`~Rp#kH}~K#co0ecZKupM^k{Eb^8 z{9#K#w-2XwS5<@Bz@gX{0fT_($nYPgt8u?0bv+=rj_8`v>RfaQj2B-}<(^ws!X<^c zI8bu8B?$tzZ0Xw1Oy3bM^mdRQNG?X<`|Hm>cOLpo0vX*q8KJS?gyu}w=Y!IxExD%A z+AmjM;+|l%8a+g4aNJ43M}YJPqswVaV+ehgF3*VBQj|_?(%RPNj7)ydeSh{W`u=Zy zKlEvH>TkLSKjL*^#`yUF_bv3LBPcGxjB%}&_6inCZNu&6QvTB@0oFlK`v-3e;EwYo zZsxehyC&MWyZB_A6@T|B*^bk1S;}scB|1oW#M#}D;_$qNi441Zq1(v_yVaB7s5fxr zTZ`_DonwW#2A+)a$mb3p#>3gr=oO_@|DsjOC?|I6yGRC7fn*wYlGb{|cmDy2?%L|9_nlHNhl&B2QoRj>ng6D2+(!^EBS)`}e!4crKey z*J%;RZ1)i?8f}yik0TS%#lyNrL>Ga6y@)OX;))Snr0#Vhx(I;lM061V*NEtX^;SUm zST%And+~@a)&U>Ug}>!l^ICg-0ddWUE-@lf`sJ%T*Ydm676E67~kV(R5`iI z%j>%$Pl27oO?*|5#41M0J#mWPDzg0C#cQ7ao`l_c{t6cY6II=lxm6p88PrVH^^dIb zYP9tzzuihTRn;E2R!XEj=nDi_?hc)w7s?Sc<0H3M>`3;rC^LUN$lztqwPv0u@0WHQHOOJ^B8gD?!^=( z>M`Q+GmrSw?d=B-9wV8^qbCn{9zTBgWHZqNtKs{A9>hS3`w*82TE|A(p(M?RePBQM z2}i*uW8^113_K(Q<}{!NJ@rt7p899Lr$)hmtrQ*KHx7@-a7Nz@blljHujLv$a>JFB z4ZJ3whj|Pt1qmoco@!qY=DxY)P{gZNOn7wiN$Y_0i#rfMbF_#>T9O#?1Ot!+n<|V@ z%*HY>7Y50l1`E#M~;x zbPXOFBC#OLg#sWj)@Qrp9vT!Bo7o!{SIlEv40O;TfikNJ$kgG zJtFc6e8Lw1WK0~6QbJ^)9oER{So|1GctBy-5`c(tTqQ;+`CR&zGqD5|Dv3tOh$<;P z*3{pnO%k^izD5cxV*isf0*mu_71U@k^Cq~Wu8axu9aN!(l<`622C@)G!XaJM0!Z$m!chJ5B6x~73p4m_`FAe8BN z8}j*^3i+&7LTFL3cYNzZq~vyXgzTHpdxy!xTmfkjRz9X5=!bc5X~)-$22ORIoeUY>65u67J*<%zdIma21$n)YA>$nR2y+Sl~WRT?-M%VHvHK>9}+P!%0+Fz>&kkDbZ&~KdlxW zcmjeY11_NuN?2UHOewbQ;qXVM1OuP>5)uV19vW?_SviPH@CRXV*X(8j& z7^11{%K*!0GgUFbFIzD{O-LPavNYI}k@Mfa?=36AH zy_-b#Xzwt;I2%9(x^X3IAh>=Fo6eUx)uaXtzR3#k5_t(@ZD9r2%u`KB#OXMCXwV5k zYHKsygulp?twfx*Ss{s(MSsfagfy{}X(Aic)T6~Fkm)+r?Y;7D4N?7zTG-kYq`VlC z__(ol*g^zl5ks+49s=P8!B*E|!FAD|d_k8G6KH8jopXdWydtdQ;SjY4N$J?12sEM? zV|OLg*hzRk#!!-doZG3Z)uq!_QIk1jwcYzSbopf2&B|^08>he``+pZ~*wl-qahSdT z-`;w>wUgfe!>E6||6iKWSEz6k`+sVADIVeW-|m=3!ZuVUSney|>9dh*cml}=>Uy3) z0^*9EKvMTQoz44tP%>`AwkL^8^ww*YpI6QMsNckifa! z=yOo7;|!$cifefTDTq1lKpd{?y8{7;BzAJXKrMF#zxnF040j-}!nazPSJ3ZWLZ~}V z(7JT(Ovx1M{|zYS)xAcmS;JA&{ytJ+$#1Ij@T9>)9Nm@jIIV$iIda*xaXTV99$xZl zCbw&+!(kU;FxuG9Y504${d4GId(=8C?S52l@=A>E6W}UCxS683Jd-WDwPRRhiUaZi zqD>+j*g~Ll%03J`NdD5S?%sV0seT!{o=P&aw{c8jv=2WlH5%m~SC0kGD<#dM=;Wp zHmc%*Y63K8P5DzpT0nD`nh)7A8td`8;C>ky_R92wT8v7pcW|`dthj1YZ$6b+Px99& zX|25kl~@Gbh>4_BqS+wCT3Yv@h&6dEx3{rLrlF~-0>;xDcMh-^Rgj&lS~3I7udRY- zc6N4m9zNU@2IdTENCIr!I_V-ehU8arX({yuhU>n_HmZ3v-1XpcXxU1f%xGwG7~E0W z)Z13>g_v}bkB~^=sN876(o{vhLsZ#LzSp=h61@R0x3-_;y>?+`q{P!?iAoiOtn9U5 zFDvo=gA`8wJ+P=$OOkDn#kP`QhzG4|%qqy&K=Vtl1qV5D#3XJDv$5DO%$C50x-qY(a$zgJ|g7ikdiTW-RFPbzrF~fn3ko!cFnO=-=-wj!zAR&T7 zx0K*=K!pbmO23VW|H#VLU}i;dU}#B8maJ5hCE;!*9TQRa$yrY`mU0TemMcpUyi~Ek zz%=YGfg-u;8(iP+b|d6^Vy-AM85Ks-gr?_C2dmLk2*byl(J`{gp)ccc8~3+F4J3S4 zBU2JK%k|-7`xc37#%-pDUB4Wm?B@DilQ%$}6R6i5PFJ%$Ox?8_|}_^^d{# z$xmkDuxz7QY957FQ>_DLOmZsARt`VjLC0Lq%a%BkMqu33?6R_ta?3u*!c}V~WN{kb zoord3umm@1;oXW^D3zW?53^+<6U%U6u2ox&qr*dZ2`fpSMUQZiOfIFlQ6t6&rQMc= zst)mZ7Cp{F7D{9bKZ{a=#8V=#Y)Yhf3M0>9Y4^kO9<2Ao$IW0&b3 zto|Rh4))-XD`EXxb#>td=$z3@7jF8(Im0J~ck>|Uj96DbVVuN^_WHGFXt&KW>0y#M1YHF8EUT{y-WLzp4-LGvi&ANL)z1Y?*eO<ApAl!OXonovUC%qZ?hKafzN3NSr? z9j^K>sL{%jZ(0<10*NuXfN_=XB8CFKLN??t{vtG>5;ZF?D!ZbSH7SGObAo=7gTho1{igWXq%t%+VA3dHwOzN|*F?GGPf z0noT05h8a0^XNxVGd3yJ^N118Gp;Tvtf-Yg;tqHIG)vc{MvpsGxoswpV(ayhWJuvws+a2i%FV&OF66imXC%V=}!ar#}Qo|}4c-No9A zr=6>rzm=je5BrDxUk1;-Em*o9mtWVCvYql^E_3mwU9xb%so3chFi76o9m6407F0B` zP|##CVXQ&X0pf-nuEhgk^_=-2)oyWn*HuRe-an|QoW zD0jJkco?k|^f|5U#dwCJ1Dq+dF6B$n%$;p+aL5S{nID!q)@(t6#lIZst+&Wb-7+|cl*QWK(i{V$tf^Hx#NZfOi{CJQP>Q{wkWYaB{rgb4O@ri zzul`ec5Bd$UZwWPEF?Nj?Zu07UA9sQAk=bf(?ye8Xg=+qI7VDGot=zQF7N zoEBMJH^Wj^@|4Z!^bdd0P=uVr zFr^6d=dcI>={4($ilL&m&3MLEyo%I;=ukuZZ&-ZJ) zNLp6I+3crKWW>db>PvD9>GWFKqLMXCfsz{7VEgS$^9(2Sc1RCv=w)Y0*D@mG?YGDb z&_0!0XnH2XC1QBO+0B!E_2F7~iwKWP(E8*)-pA+Z3fcTle5~hta_MA(?S#Aa#vb|C zbkpeBD?3)^yC=93a!<6q{U zN&H)B(fZyxJ|7~vJRKq|bBTkEyCumoc?jf}NVb%Q;}LQc5Nwl>e3>LDo`B6lIDYQ| zxJKCNoY#Q{YaxRjoGAsAeFKk2rV?5Q6yrjIlYvf9gJFV%8`{7_( zRhSKMRp|FG@wnI0SZk|71@=Tf>57JMgb{PFQ> z-j(Y`E-g;Rz22%Tk?0gBQmUVecOc1RI!FoHF4|<0w45>tCZ?$*xQ*qY=5`gL1lL}T ztp%m%iquUa6_2;;HL(gVY&k*3)@5!lJUR}bPQ|$l>$*R09FzEaqGs52!TFTLGQ+fs zVzoGT#p2~gIZJL^E2-g;h8wX+nQ#@Pu1Nti3C!OTF0%i>Kn`3o1WCFbq_ zH@CC#Uv@Tc_y0MhyzxhFVyOelxP@tPzw}v<~x=e_eVTd|KTj!wL1vP zKYG`K^yb;gYA#rWZ*T>WKh%C;nOJ&EJeXxV-5Dg=N-_uZ%Y%w>Rp!* zkdVX6ai=#?cJx1&#>dyZIgDh0Jlt;(qx0W4>YV@n@>rnqHJNn`5K4=0rhRU?FDH^= z8w?x#TACO^-RlyicQOSs_;+a}7*-Ee`Df|67vndmihq}`IhLCEcj=m)H`iXTJEvoy zjenPK9Je@O*kf|}YjW|~F{zG!XW>w&OLOb>`Y{%Fs(;wlt8F3rgJ;p|R`jDEK>Q@H_&ZQ+pYc-+0YVg#E;R;jc+h+0scx;V3Ga*WcsGXOq0u>{A<@|@BeXi zax0zxd2930ZT_dPg>P=^{6F9k4gKmb*~?AN299)a541@xif~V~caGB=9`HzlsIg^; z+Kw|s+3VeOeyE4Y54HI;lOJj=sth_j5z5aI#TWeV8i8S0{d#d>2;quhVOSMf<8<8b zaIsiA7c}c%CnyZ-Up*!aYx5xQsv%(%dw=wgpL}w?gMUJ}W;hs!$Mu525Rq%ff+2{j z#(ZVn>*R!D{p+NJV*Tp`fnoh?g@7S|IRRi$ykhhF#VB96aM@=Gzf+uHHuh#Rk~*&LKeu6C|G%x)Drtad|%NBiuqXAwa~qwH9BF+k?yV z_81vw85sbbYF|iD18WFg@6$Iu3zlH9b=Bt~>a{y(0$V^LhCvhpLnkdZ4=EwYMVAO> z!~4PpvETV3Mx;K(K9_g4)+O2k61xIhWR!&q#sCo&81_eKF8wp)o3cjlUD|E0)BbB9 zicDI}A10U~1_O#jxDSReoiDikh$3HJi!3r<3>a%~ZC=0^(0z8EKEA&db=&V;dwj8- zDDw2_&i(BGz{BwE_Rf=s_aEY|7P#o2pZ6!YV9OXs#2S#J&mS!NcQB8Q}lY|bj8hz&Vu03xo+hg^i(2JIc(7|iyoC-*8j)>0~ zZwnH|N8{lX(LJK}DYJu5F6nIP z)7B^JdgrV?j+6~sgZ4%5vxtKk0{C1BKtBj^0l)zq;$gR@?Ngj<`OgM+0J!KhX+vhe zi#lgL@D{M*`?#iXJ1jpxv83l@3`Ja}3i-?+v8K@Cz9$u5+XI7(^5< zc4LP7(QpWdaHa|%=nIf6F2Vw>v;G^b^W)Y&8}GqG~zzr)3|PVfA@*Uf*e ztAD{u@YQ%aF_*xAoulZUY5|VTMV`iUdU}E5F`1glIql>OPV^_q_%a$l9MZ8+$%fSGkWz_5C=25*GNqD%4xK5C6u_{f?SSEuo zf;sg0;O8qDpebYofq;*teaLelCtHW;XexPV-K7qSVPgP@Fu_B3%WK(@vATKi8bYK? zfQvOyjLV*;nSj(MLQX}Hb%26j*p}Ckl&iDAFI^wq3m!dFqx-sf}S^I z)?=9+K$c01V1`PH%AL#c7*qKCU1Y-}te|_7$yD#Q5;x;+@)^K|qvBMtfDkeflnfLx z(>JQi*{o7*$>n%S&QYo9-o{IZ&c))_$+;MpBQ-pq0xUOjuGQ$!0 zFUruyPp}Q=Z=2is;mGQqy&dM;!g@CQTkn~X>;{q|1i?VZqX>77s&r$M#=m-%mZzk(2u z8f2o3SUkWq+^*sVovF|cN&rOEhxT-eQ;uG@HSWCbUKiN#7sENDAiZ4x zo^*DBv4Fx4@+}IG9bRZiGDM74`UBk0oG>!F4hN#)kEh4jUo8T0DR}d#nBU_xhLCw75)JOuFhn|@+*3P&e{Jz+}V7X+W&7ofJq?Q{5psP6F$%OzVjNc*05ubirT~hRne<& z^Ya_u|2sb6UcYo$(X3L)#0w{a&KK~mfdQHOG;Y(r@}N($Av~l&7Y%?uLUc1aekayV zcq6RA9ibOX1S#p%p&4N0wze~%s|c*5c*!*gUmzzQq?=(uwm z^{Lj3_L<%biBOugs0pXjPfE8t{C{XWd`WeabP094`QTN&bN>;}Hv7Z-XCEXUjWKo7 z&${RRb}d9F#)fFA!-}X03=e=|i|%nt z(qgbvK1m%ilKFrE@%F`(AuWnls(fx=*l?ylv1KRj56Sy2?vFE71>B8rF5SYR`N}xO z7$v}il>KIKx!uct=R1@G>j>8HWb5(6jWI)uwnFle4u5XFRxBcnk+%*@?l0v`X^JH7jr`#wS* zZpRw67fo!*%2A~e9oB0fSN5<~yHjf5_no!qlS=bLri!&q+bdq!D^*`bA0a6om8)xC z0u&fmy#**v7uUK6s1UAm6Hp=Gjs}QXk1AD=Co1hq`dxI3acS%LxrW_uy&2W&dTH+y zWH|qp?g268IO0_=$>;3}ZtIB#e5v7ahjdfCfFClm^9HR0=kumeF_~O@Zjxz(xJR=*-Fo7aAB;=RlhK+?dE zXOnzz%Q=!{6gOowVUSJduaI-*PUfYi<}$34KV@Q`P4dD`aE=Ml1YmkL#MY{O16|e_ zM-5Dkc5&T8+Ze29Z-(P9TEj6ex}~gRPK2AuE-w(gVGUOZs~+3dTy3Q1IF~T;0X9~x zdwDTpo7qZke<+?rE@haL0ej`=M=v3LM(F4C1dF{ZATL@kkda8%dK78-U#(WU9CH2m zT;nZfQ7p3zKDv-LaKf}6$r8W-jkVM^WYyD=G>`HrXpVzK|;vMTxdXCgEK|<=@OA9In(dxmd38s#-g2R2l_! zFvl1c-QM1F!|K-c5TrO;AX%ARmM=GU>lMj~Y?U>_0IplfMRFYAxQnN9FO3eoywl=c zpY+C$)wTA_(f2iO#J6!56<23Url&;5m-OF~+xzDeoW0@T2N&2hPypyf(9T`Voen9` zt^y@2oHyanNc%)c*0|S+u#@R_d78wu0XX7AVTYJQ370D*x#I8PIJnpK+Eb-^2%Y_~ zRLAHbLzkmAZg=%CdP*^9^@WA3NO(ibkgNB22cLI3>_Ts{cg{E3;RmGKZZzGkvk~GQ z=qZ}-5j*K}>)e-?tT|prCuzpgENbZuG4%OOn-@(qC%NCyZ1~`tj$<4{&19v>@zPJl zv`fRPCQM)s1#-WC!uv1!$X`T@;AMD>xe3MUMQOiLwkwut)-^;japmcE$R?ow*or45 z0ZlJZuJX#u@T4eC{ardPvOWm2`rQM+4OwE#-)mhD;W>cOkxbg`nkmC3%ER9v=Mt`0%^r_?y(bF zx)=+6S&s7qB$VVMzX{T8$`Dt}%};9ek6N`lGs8gYJb%?Jud?h~v}uDZHGhDZmdfrn zyWrXD)yfu?{lngpZ{ZrKgs zN?=h)idwMMNx6t5h~cX@qa&ImLck6gq@)ORfV-ZI8RSQa1TBujx&1UOv<-y(FnNSd z#_iaeqX%I#T7~-{wux3OhLwX}Qcd?YIE!_fXX+Hx0KU21N)}J|E(3kE9qZ4FV3Sii zpd7>N7|p1i$pkpQ#H~hbPKwE=BHy8!)WFoHfKy!Q?Z$?xm#cTA&a=(8?`^(~RLW+$ z7J$Xvk@{}lrpn?qWakpPTF&+g2#V8_Q{4EQ1LW2>NjH*wH* zuD*6On~Ejhl0%7+n|UT~Ao0!mwYRw9h@de&tU-a&=8Y;EH^zDeMARS1SjJ?e2ob$i z4e5h8P0-hxQ~=MY5dA(tINFkBsP%yDpeGul1v*`7$gx7Y#8pKqT1a~#F{0I|f-8I- zbnm!F`ResiuU>+VuIH9KNSej+U@3(xjt+H0pD0;r5;m^n@lcBt(rgdmFMycch@7Hg zwd-k=r?Bp}oOXi{Nb7Lf>LA3nMyZKZeT;_a^Y{&7Ey(}?#aNHb&8Ab#*f*V3#}U-X zjJ;RxXGPVyc{-`;FG)o+sUtc;f{P}OY82tE!&(LT)#^?mvxSZDQlkSyqio?+>V5ZF zlqdGsrpPUJ1`CtT6SqMS5o?PqOXMJ>JKl1=UJGzim`Q~!ZpZaUG%2U!I{G?>h1yHi z)+5K}^)p`qi#6N4`mQB6lDf=6@s+kR8dBp!92aDX8z?ck`nSW@&%|VNnZXL+MM>q0 zqLkW~phpdf5$2N8O2icH5o|RB+9ruI0s=Q5epqTW%0I3i9dOl?IynPd`)KJ!3sx+k zkXWQl%D4rElbA(_r+elW8AFq%Fe|}Q_DL5mT9KAEL$pueluoNbd^SRp0XO=%Q49t5 zm|^w|AuOQre%a;HN>_a&Y>UB+bP8Zv5qhe-FGVM5g=(|UdC8yniyZi zzeNNbZN=I*{Rs;ao5XP|1AyQ^U=Qm<8^KCwgpkDwHCX9aXs!B{T~*?&F+3$`hcv5V|-V<~Hk5gX32 zAIw?7q(AbHZHy$0Sc?B6<9sLM{6-=p>_R!Zu7o6BsZXYw2_M-jYOSIozG)jxLA_`! za>v00ht_|Vv(U|0;bNjEmNtbID+TPX5_V&Q-`%F>cL&i6W|gBDLR_wMM^|{|D^~C0 z^IkW?!mAZoSw6GL;cQ>mTu0ekyu?Oi zj7U_-r799QHXo(J$QnkJ`)=+D3iqwOuR}(w{!apRU9(q^$6RcJZepzwh+s8YY`z+$ zKP#SvO^WQW8N2RX=;VHq<``z>9oZ#^dGl267+BGqfD{Q0lfss>%BluR6lRoysVTPM zn3&CjY(gNXGpf-+zMAF-5x2uCAX%&j>$}`Z=gjMU;>hcv@pW}$>QA5?6orv zNYAe&AIu71q`0m)P%v{W09o!zt85v5Eaoe+ulsndEhOU1e7awSoWUxbkqHhV^;2Rl zZr9#{bS!4UPId^I4lK1M5!~Xz-y9G(HD{QvbD({F%ZE2-ejN*lBhs(H3gS?~ z5IOqG#L`p*U&j*SDSzEXL|6^%HfI@e-3)v`zshxlt~;}}Qs8Z$oavaWmP&Efx|ucO zI`&XU&97f#8`c@gcQui1gCIkZ0qHuK5!_nq>y_N|?6}~!g^nMSoys{dq~zv**B0eD zu=52wINGff^LFt0TLS>_%3Rv`kFKycOUU=&?9qtjP5gFtL4f%9!$((a>XDKlIZ_ zrCi_~cLfW?H+0T8cUs)^Vv*s~Yn>}Dy_QG?F+gYc2Wmdk)1>dEP8H3a^=|rH(MzqGDJP1w^!+pbQVDC>@oMhRUVRA~&v7EC+0YEk}1JlC0hWsPN0Mfj5zcD@6`lOK z6F2qXP9j8#=AHW)AI>=bOO&8@apDxv-o^yS1LxP0v$ihd;SqafUe}^o- z-H%$lgI)d<@uy3>AC;Snm323yZ1BE4OHGQ=ue#8rX7~*5{)V;)8PPp!g8*Jg?+xOK z)jn5;sOxPE0u?toIoS}hLLpQTa&E!>*DVMX;pyq{?3wqWDPrI7h?gK{(gE=1`d@Nl zWq@cGT3+p@^ByoVCn8q)66vsT1f-+S2mIuS`|MVV1>O2!P?n~J+wleM&m~6Dt}%2* zC2kl=gm;9Za7G#9hD)*5K0}}dpJh6o4>P0l)i=aIOoOgt{cn6 zZFqKge*0Ba&AyHL&2_fXJO|^v^A>uYkn^2nr545Rjcud_*z9FIy>fw-GPX`|y3OG0 z8#y5v%+p(hL+BE2`%qj>??|djE-B72$b=g5t@qAPybST8E+b4rF|~l9AfC$xGRH{3 z16+JEO=apnvyRN$)B9QLYzs~wSX5$XFCs3wmvfar5!!=A%^n{|DQTZsR{L zPT*^lyovaaF8^OXpGY7`Bpcx+U-4BW10f3hPkw^?FGyZ>=f!`HY6m)$Py$ zHy<4h^s`SR!y8p1rZDbKW0( z(PApDo8Xv*uqvi4nT{WtwjS*u@Ifb&f{`I91R1Hoj@91bSZ~VhvU!N<1&O&Sf zynINoYiuBItA48~Kvr2a|Az&IUAn(>>^~2-bMiml+JBZN^OY*xr2WVF{TQFn@WZeD zDe@_fhlp74ZUhq$b_?7We&tpkHgcQy<2LWdt&yjWaLb5c+^p;#?U(A&;Zgmt)_~2X zx~C?ZYOPwSzNlBKFUtqzY7+sBkbR?Ci^?D4SJe2hbZg{cVi!4YUf7T`s~`;~j1hk_ z==M%vzi}s2N6pH9BVpXhdlwjW63G+k5@1#ns?bP_=RNJWHN5<)cRw3C0DmjXfq(gN)(tz5U2Zh`{K=zrZF*#Zd%mTY*A{`dI7PWt?B z>(S2UZT{~i$$X{aH=+Mg({i%L^9Z#+bKsO`bZ~H?>1EluRRSg3`0YvGZ36Jyoo1!O2HvNCxo8h?_$M9;PQX*7GsqmSO(LfIsS8x4%fNlGpZ;Vy*mR12c{J+yPhKIazLn10|l4OW62w$lbiK3*)Hz( ze7-B1cuO!|l;J!f6DKaj<0(=AGmti=J1%&@2bwY*U+LLlMg_4ba|EQ) z*tbDISc#=BsFQ+7dm(FK$O3HGrv`JKlrW}_5bj}-WF+w-<+Gnf48T9x2J#A z=#xtGL-A8@)Lt}smPbc*`mG<~928$gT-5NOj#z>vL}q!};29`OxEeQq`X`q*dQpCc zXqOGzduX%RdH?wS*$1%^=SP!wla0xcR+8j%B#6d!o9RY>kbK@AkJ@;s#bY?hMAM*# zZ}rYayVEi+PMC)hull3cJ2T!rO1=wVI^E8jrQ+t?D{~>a6J*l9Bg;#-cYJx8Oh27i zcIa9B(I#z@R|7PTcYTj}Hd2s{1y^Jt3H5ff)QamE^l0b78-uRG4C8LNXRaV_wR11zt~k2a*fSKQUle>` zW|ExItqJT!xRe9bNj?|il;81*c`U&%jv+Fmt+n#Yx=hUXlI?gQ84hh^>5NxSW8 zGPCkY8?#=rx=?Uz=oHIrwx%luycW%2HX%p$pL|BsyZi+_Pg_%G`qs?ic6Fa)7|v)n zb=h%DTQ(fVSov-+xC>U3Mibdn+>>Np?*gom*ITeKe9?ihU0y$JCGLe=maQt!3^Yl% zT+7FR$AhfVvx;(WEtq3EP6cHcl2&=-gS`Zwq@)o8h|mF*<-Pn^|6sH&vx*5N_{E(q z*jp!1K~8~}k>snen!rB91~*{L=iyH(6R9)e`=}hlF)T^&b?1bWir{?22Se~N+*XxY z2!q_IB*PmM)?|vw!H)|7V7U2);`GR57G6_ziUfi?VEooU2$*Os6c>&bw2?~-5LrIc zEJx7EMw4XcFnT&%+6tt64AYmRm3OOD|`0sFV8LNQM(@HG>g4%%b;3`B~xSg(ZynF>7{Au}_X& zUP>4vW349j9WT3AvzBm&Jxs`UP$yc{jV$3}vkX@AR9iFUr(hwxl=-JX-bD8xCS4N} z>qcPAi%_ophA}%>wLH73yg3;UePUxNhC`J}Czd80g$~E>Y&~+b zmnK^r(~kR458Uyn+I$`AZb818)m>;{IKzGkAba;}G~N8zeLIE!Qxb%lz8 z+5(D@Y5fDIgXAnC(wGzrh;IDCcThZO ztfh-oVn{JuHsOldlT`x_w(><|`R0rpd*u@{hR1gi?$M?kN|`2{rjdCO5P%@A$x8(B z4}+iBlYpoAGoNkvW)|!4{V^h*ei2YQH<%~b_D%a-;{%Fp3OJTPQVb_*BcHoZ%xI$h zX5@t{_oeWa{_FU9meQr#zb?0}<9D$+2Wugh#2eARik2%jfRFBKi!iyWZssV0zy3(w z$(@Dc4^9x(p>xKVMbOEdn&o4(O-8*=|D+EsO66!}Pjno#s99FwFNf$bx$2zhGF~gW z5fzK{G@81eiuI%y;|E2Ludr2PNfs_rqLw#@B$YPl8V8}s{^6EMObksXax%Oe%r}BW zW(6tYmn*4h#8W?cyz*0-R7G5T4@Lsm$aMWEEF=@yqy*(KLLO4@!cq`xj#=TV-YY2Q zRpFv2v%vnkN=>wyW3kcBxi!=50LROI%Mf~#B%3hC{GgO5VP<3=K zefY`*cq}dQ`HtNJb#3e*@~Cr>@42p~tCCf>*NnIlc5)|b|+pf^=ymXSFB z({z8RJiGq5L384F<_V!wH(GuJ4BDTc+hlWc7vlXMdw8{z!a_4+vdvinmT5&*GA(K@ zq{QRy1*c#LRp`3u6$aTLOT-2CYf5cZPR4K=H-Pm})in0{rX-<|@M`jHo*^zt#+fpQ zbhNnC^K>%O#dMaWX6AX?c2c(X>*R%9-dfY0Zg@>7M_MElzIh6}@b7kv*+zKn`d)$K8y&xk)ZO4s??ArEFq*H#5Hx*bpus z?{r$@$gF(~_-B~Du73zTI&g?k&mhlmZo^3kVH$6IYe^X~Yg#)h=jbh&c^&Byx9dqf zQu9bRM;)*QO}J|IT$Un>*`djIehOnj3->2U2CyNErx>g96Hn~o1yPMQ@gkU9<<$M< zX8e8AP}qri@t>rlo%23?jAHlilgY(Azi-#pCO(fJKK#zsqX(OhA3P9$@XZHX`gile zgYE6dDgW=C&4;)C-;R7=>EE08|IXtR1_MwA@)8W9il!*2!$=P#p_eISzVfJ0A~bIu z!*3nKZym#L9mBsZj^TmtG?(48gj=+8nZ99f>XZH~H*2T8E$>Gi^hNawyH`dHb_O)Q zPWk9&e8bZ!3SyK)V}Tbn8X8aXfa_W{?O$ly8QgN#G7{f8P!EPXooi(9WTu$I22*5CW=^XM7$)t~;LC-{5+GfQZ#C_$t$kWIMzp_cX>k7e~i0eHKyj#!-^z@>|tI>>0oCLIo z*vZimuS(a|y>S+Z#E?nNI*t)B+}&BVGPIML#l!8wIcMqSD;85N3`U&l>OP_~!`KMh zLvB}JG!9zat+ym@V5_pXCbsA=qc35;u=o%$lcyEIU^0X=MYKfN?fg7S&J=w;W2PWk zNB<`(* zvf$PSVz8{!UV%+K+}U{}TBLwj@4Vco@3shTs_$A>P_AFlS3zp5*-d{KRNCW(ulT_m{wQx@D6E$ju^MswT5nsl?E6`SP{>qNXdEt59~GgvvV4>Y}o-VnreV3{io zir{u*Ly}&9uiw+mqI?CAvI=v(#0^FzQfgk?l#_SM%;*A&UttC>4Qa7?YM2DVM(R0j zHki7_I7L77dL_4nAsY%-Zu>bj*~Fp`dJtUR7&{jY@;|I#zT}!3)DdoJpz3 z%IS|{k&dL5%rM7>31XfP5S)12C0yI=(Gj3?iTk*WgedG_pbFi4+<4_*v`=25cV0!_ zx!{Tp0T~QQq|A8IR}TGw8HAw&22pQ39*#AD1qrmV;>TtF$flfyT&J<44eoc~UVu6n zIKWCmvw|o&pJnk(SVDFWUg9Tzu2q2~Or&#^U-#Z-C$z@s+D9v8KX^v-iZOC~AMD5?Q2kBqTu6 z@Q+i%g=!THj7hsCxZ6BcbEI=>Z-k*s`d z(4I7!wZqn7y|!C!G!XXA&>D0RM`9{>AKS?Llp$r3anKP^6_MSY!j9uiy^Es}bS7}! zm0-hNQ{d3N=yTDKD&Cv^L=+B=g~ni*vGCb+nmrecpy@xer$V~4{Z3SJs%-Z4C$O`5Q|+o zv{I=+3U<)O-neC--+6(Kf34$=*r6iwRdwFAYY?nMlxEE z9ewg^UKp!|4<9q3g3jB0+J=?qo@?X zh+CFG;;c^IBZAKgWan4Pr@@Hv(g#wQ76I9I;OtClFyoG!vH2Xmm`n~_ zBMQKzCTYPG!73-=;z&k*Osa<#3Fm2$uP(dcZgIxL#b-JmF204!tGw8L!c@v7^j3!( z6(QGda%h}-R-mWGe7cmDXqXo1dX?I7Rja*Q3NREJ#WON?NSql3+6jO7Pg)zCTOp~N z1dVXD(^gEqNNEQ4Qd(w-E2{9UpH<^cH*mAmM@)&eggag)2?qWj#&DNAR(|C!_y-uXP}Pp~mOZx4EiUm8^oU++XEyK&LD9F349 zA*$oPIt=9E=T61-w=ZEW-`?DOx)wbjM$cgQe=I5b8Cx< z4R_JbFlxL*61xjHDpUp?D&$cK{`69V7D!ytzpdVP&MpaeZUo?6z?Hukrpcbe-I zR-?)AWcmidU1aBr*!06rA6i%!yUfm|&jCRQ%=R#eR;dHsX;`H@cjxAWW>s{CS8jN% zh?Qg1Y^ox_t62%X5o6UCjF+7oi2QcS(KcP_8y%uSXi3 zDz1lpj9*dX!xHitu$QGH^rJ3l?$!=p)e*y7^7(#P+ehl+M)bT4981sl%i1D(xVvAf z9IQoqrGwJTvQ*T3J1nM1vi<91fM)#{^%@!>g+T?2@#8|H2H^-Qc4aUT!<-ljr%ko)Kh;!M~tH#A(Koi z1E2LGxltq_un}R_p9JhxB&tE8(9!mJ`?z;by-(_R{WJa&LgyY>eov6%k#5Gt@!@d0 zPUozA!BPnDbS2GP2On4E8UicT9X`~CV(db_^Bl(Ky zDb9>I>`4M=lys5FQI>*D);L23HCU<0e8b2nZtt99uHkD|$A1=?JWG14gh|@Zp>SZX zN%SK$YbLgnD`=jb7S9kNN?6pLZM`>%-s|3X|IZqx1J)ok`y?<}|G<(--M7C_K6~(a zatk=G{PvRNx0Wow`MEy|aAqJO4!h$h!Qp>@HZkUP<5#oW?4&dLI}RzZL`erR31QNe zNx0ob{*Nh7y2;LIJJglrPZs*Bv}zO2%N81LMYzn8O6(ewZ9#_h2cyeru^>tYs)Qc$ zx;K^tNjmKV!9yKGM2>IR(sD&xPq*)HJ$iC~>;9JHtcHleO^5M2r$ZEoCMBxt&O&kr zy^{W93zsIHeqV8>sy8^bu_=;NnZ}*5+2?r45qmizEwDgG5omTBHRq-|a-?#SO z=j?OtIrrW?3T5VAXwKPZuf6u#Yp=cb+H1ckNaZG4jve$4I6kRF%OugHlGM3LGA?dzd)2@uhXaN>8M7d|OMtISWzxo^P-M8(g*iL7t9ZR?N7gi32*Rc3VFZGk8hCpbPSVC4A}j*jHqJc# zltoDbWH*=257tO-oDJkP@XPA->>>NC^YF=mm+ssp=SCJ!~MWRgRlIgRS zwaDdjleNgVFKcf0*9@0hGnLGK;rMwhDwt=I1LgSt#E-2f@e{HT!Mk*_oHO8x`~Q~L zuUNS(;Qy;%UB9y8|C`Brj>0vQ{y(3b@WfC1z@AFX05 zQ+4(!|Ic*XeG0>L9DWMJbX(BRQ`f%6RT^PCpUmB0tt+mB`YT)I!SCo|x1 z0AOeY5R7QJgaC(b6lAJakqdqvAMGy6h~8j=sR?z}HL(LZNr-l+6lUn-hmw4ZwhH0= z7hDU4ChLOH=g4x3$zs_kyKEK8luwQ%I8%bLZm)VPa_3Tmb%(WCC#vpsv#zd2VfD4u z8ieJ>PXTh$ErneQAy-!G88C8JBcP)~r#3EQHARFov^gD_A0EIZwYWhOvtT&7Pfnqb zyKSXH)&2#hk8sl{X29d3w|5lYdTo13u!b;`@5NP7a+$X1bCk;P&%#2n!e>RIku%DG zaT$;shTDO3_#B>&#fb9wl<-Z5Tt*VO5IgNI`xU1<>Em#b^L=WV$hkIgkmy?M#Yi6K zo8$5axZI7fsp(oWCU7yfh@`m`+b5re?vWw_%DuiKvxax>F5r+h!6^uk+l$j+=GK;b> z#kb>KslU)|0C2zIX9JmPf~qvH+U*2yl0ZYI|F~yJ^l$-hw81U9Rs*ZMBTW|SCQjj} zxk0<&rf2zp{3VU$^Adpx*{{(ak5A=pXCXpWroPd+us%ywrB{poi4>QsrXIA5&(y9I zjd85n$jy!-%4$JA+9#FC^n0S)dlPma1u3Vwfqk0j|ugE?`DnI0MWcluI z>1O&-I&)?hrO_3m&^K^flgwrkI@C#Tnt3le7)YHIfkQ7|EsfYG_yO}hO5f~D8x5nV6w$+s(AE>DM^}K@WW|_5pC$l9CffF4Hr9pYUBb2zgOjYTZ z2q0>DrTDaxmQ1KSB0b3pTw0GP2seewh|e;XE0 zKoT8*JAkz=pz5XCo_>!Wrd@T1;9W);$Xzyfi&?J8DZ6_w_wGpIb)v8A4eeq}E*=6- z?Anvjmv#bR7^%jS%GyAN7^DuS(_5jv+zvaW3oaO53B5k5WZ;L&jv7=+3jgi8YP>I< zYG|!Q)`t^TAw_yvSViHN;!1VGY7@<`wUq)ks#qDhVO=Px$1k8ut+9!#P2DbqTXiK% z9P(_s(krCf zy5Vi$>5jkYd%?ARrUa$7k|{>1`?XD{uNUBvGXH3Jrkys@hIu>&%BG7at|QOs!!d;N zCS~E~!1{FgK*CG`qpWnj=#OYa^a73W(#6#@71azzmuS0Nc@?8B;FikHnaj6>RX<&a z3wSb9x`ZkK?i98KyTO}gMUI$*sg$kmssTo+RvD&y!ZeRUKzU}a+WFzX)-~Gy;hb}h zYm7>hkX*Im@;o7)D+CFYrVwcUu~Qgd2o;`rw;4cqx2TaC&nr>E@ z?g@j`9EZ(H3IhGN+X_@_Gpw;jGQ~zQ@s5tRDCZhQvgi4E^q+wdsr_XFuZYN6sJ;dRXr3Q~?Q9D|SPHPEIalbGtVG7sp3hCjKlm$nR zx-5}vcNtx-hPGwq1dtYe+L^CB&z_(JM8s2N$6ZFuMEFFCb%{p(*;RfV|_PuA&w|{xAQ|8Ys2@UzvM> zv(x1?P3v;SB7CgFFM9ufUHz&R!TXdHR`z?=dgh^BE2fTW+^IRJuUiU$EmS`412d=h{l;DU|HI$_^=0K%8bI$?DvfOssY zbu56wP+2Ej;zR&{G)zc2AE0kInd)<#L_%B{jW`dYwJXudvzpsl^*yUN=K+x&orw*J zMAcaUm*d9EPGPNz&Gz)+n#Ua@Dc+TAuLH)BbzC5eAC{Qm(qD4`Dty9G_n+~GVzIC} z+atC@;9gR=cqWC6ckIj}#1o#h1T7n;9H9XS+-KfbnkiF385VKD%GH*+BZwH~)ntd{lVue&Z`7!bxr1(6!&s@F^+H@MBu9~CV!rDWC< zKtVkMgC~{q5tQlcU0Gj`(~=}A(VyxGR-J*s5qN`s88tDQ9zQLC$U8>Z5kJ`dASv}eNq+gqgUMeV<3 zbt_gbUl}<6Vb$_gt1JHBA}pP;sAt>%3!Pc(C^N%7_*-2^@2D#APBaF7;4iy3X3!DI-Q zAc#GBFU-?G%kaH;bO4dXLg9lRLaPx+2&TaFsCKOfm#tdkY7G&Qj~NJuF)5H$V1UjP zp}TvFx%AmB^Ivddkb7eZBk?PSqo_L->4_p@1Ar947z#W~U|@J#dMno0Z|_g3!_JLF zaEA?s-8kG_94Ce>o<7i<8o(5=lg#tvOIglrQ>*TE;`SP*iCC_qr!=gS7O>?tEe?Bb z@o|^?Yq8?4mEL~R%Y!PgtWF)HPDZI8(nv`RL2~H`Mrd+xhoJ?aBg^5s!Ei77cnP=s zGn#d=<;TWa3)!!rrK0T;&3+xW?_v{aLiExqPlW91aQ$Nu|I}0_YcY z#tN8$ceMgpwNiajjCihOM-tyc01Q7B9uqQqm;4SM%a0=9TXPBPlR|FPtWk0n0MiU* zxA@cOb)cjUZUrrO3YFgNz$kmMzgbrw!fgNM2Q2Utwg_Hg;bu~sQzQNY01i7EG@x>6 zS=1|<0`%KSLP`uao`q7>Ng-JrgFb_64AgEq9NrlqqxK><)-HCjb>ciyQgSPJ0Hi%`bF!bg6~oDn9(qMN@V%82bndH%%J=m!c35e~sC!QuV{)?&Kf- zT(5rFB4gK)?&!dZusU*MpN%?lGdp4G$fc-^I&xvH1=?x>HY=%|x-qkbg!k@ZQtcZ3 zh5xV_qr=LrnASKhcUU*ceHMi`S(Dy(%>-=scX5vD71x@-kVXZjph-7Pvi@tTMl8^d&@5*q;4B9v>C6rXN8zicuUm{Kk=QF$U?iBDuDvLQ z39epT&f%GfG#+UvCbB6U_R3*Oiv1&jj5bs&+5f_H2bMO0q|(MsM4;u%tUJ3rBt(~H>s_B3Rw zP@Z(_=G~A}7nuS<$@FfEuzP1%T0DkI#qdv5EkFOnMVhBMG%q-Fo#5r}JUGv50On1u zM-|PM8_GZf3m%?A%Aa*B8umTzpc4aIA(bBj?uI0e9~F-jy%T2p8+;>NJI@ z37t4a(KKK;_rRh=u41$GnmBb9g%k&LM3koxVY<=P zva|zhkylH)L)&M0MkyoJ?^LCKSs2*`eO~>U{a?PR6W2W40+TWvx{5Us2 zb?(M=l$#3mX^dO)JsDil2ak2exa4$dO0UhFif4}3c|)J`GGF5qEasWhm0G@IuCuGH zJ%LLL8{?h4ZIJbVf91O7L|BVEca=FfgC01gA!MX0zG3C%paR1=AnXNg9TjMlwj0tk z;Hsrd-I34LxLU5Y6Zbbdom~wbT|Qa#>`mpCWZBIS%2Ny82wYUGCd;T)o3v^4{!}-G z7C_;M!({tEXaMeU+PdZ3s}PLA^TRn_>*KOtL@(r&))H2GA%7=pVd+kmmF4{w7MNH= z16dpyv>2mcP)_qL*AEv$e|j*99)Wc5uurZkiq8%%2(n^8?CI)E; zu}l)G?v#aQYR%{seNLIOtV~8lgx0wzbkJIMwivBKlj)xse0vJbP{5*wk?j~=MhvhB zX_cxz8r~hO7ZjI^d&-vO;PKm1GwYcNsBf#YVsGVfS_*EJIetZRSMeE1>A6giBYbVH z+sG3con?S7*Vc1qv?4c2nQcgwNi8@@r`>gnk~cG0s_T7@CbigVJTa+Q0py48XY`ov zMRh|Wi1HosEzqn&tu?n_FYw#-ZqJ5!-;2Sap4K*nj?1012M6=;kaozVsP`q@ z8Xy6d_Wd z;D98C%>THQ{V`nN(cP0(KsEg02mWj}_io|xf>kS5uBi9KpFq+1Zpq-rPV%Kh*3w3c zak#{USwW42z=!j=Sjy08w(^@mXMRK$wuwK~YD#3;)TY5^{N|05@zL|6m+ zfQorjiz$LYJCU2_YZk(M4%6q|!&`Ag{jk&3a+y0f>P=tqd~&y!dd^0lLIF8s{R#)4 z&zgU~kQ`eV*(18=t9u^{D`ogKt*%K4PQVUwhZi`#kq)}nhK+GP@w1(!wu8zHGdRov zD4~rrS*J8>?^O+3BAUv?0M>eO2 z@y7d=w6S(E`#SN5g3TSA62^sMKuWxoC8ENHSO$~^O;C>42=M4^D4b^Za7t&gB zWNQXmgT#PE7vacO7Nj*KounUoS|j%WiMG)xW{_od>RJyQta zcW%V42S(yo0#Wh)oG6GVYz0HgzrmPG4U6p?5{uK2uW3{36Z)}^0n6wH;Nt-XEULl1 zzOsd=Cx>$rh?j6&V?*Yfav9E;^)?m5vFsHLWFc!HWC?>ggHARV;gV%DgmJ1$$kC)G zTX?6cx)f{5n}n3F8y>0|-n`?A6)|&Lm~z}vJ7evGiM9QR71M4irX6}o`|i)&_EZnI z6{@9kau+iOgH!{&>Kogccwl4Gl~9n)jfsu%u8!u$&P2SmVO>kS3F3^O8g!`5nHmpV zsBVQ}Ho;yO8luL%MC|nKRj#^|nZEW8o)tK4EgnSp>}qqJyH@7r07O}rX4a%twDNPJ zm4k9IDeYX@-?=dnJuiAfOofZa^R%0EgVI?kU0CU@I1i`BZquC%uWY4d@5*0*qlM#T z15nvYo8_KnEqPpG=x#>+-@TQVQZx;7dHU-`MQ@S{>t}iBbhn8KM|GC7Q<=N780Gah z{=H?z*N6IiW5MM|lktGq=VFT!fOh9(y&pD`QpPgzhdDmrkcd1nC66<}IoXwQFwLb7 z&qSGJW{VCCZ7Q2{vFQ~|xenrrtvnO9vi4Z0(^0^0Z-T4Phha;@q)g%n=@aaXxD+I?W0mr440=<22~n78l_&S9T6?smGo9Q{Rc35<-UfG(6wNsxp~Yd< zh}dYGz_wH$34Y^HTL&TAQL6-S8s0!@k~9VQZz>i{Da$2#(x#a0Qh3^%5NeDTvqlIg zjCap$Eu|Hc-7(zTpGgl7T!(2KE+%z1QwEpv7=+LIac@Qltfw}}AVMeP32+vr>Xr1` z(>5AF7em`V*3_rja0)mbX?wO@|8voq9+86LBB$2dUrq>fQnzS;#Z7chO^dOpOT)^r6fJ4<1xRHDS~ae z6{Q1pU5O#El>wOcyk1qFFVPIZ3QzANt2w49I(jN^ULWJ1o+@uFqGkhZ9I)&Xxog8rHx;9-e5oZnSy?6@XqJQ_lSZ~Z zq^}}Z+AOe?S<;&^hBn6Bbr@m83{H{^49lhrZ~wCyXu&k2g%&Z^Ft&YB6s1NSf@HD_ zF-lBkV2H?#C1Dd87OlnSF<5T=p7n8to9~Hd^|Pu-URh>8N4&Z$S`2Nw-~0WP@Flo#1Z9HN-y9UQKp z%LK{fkA`NJ&#hRQ_UTk)iIrjfrX@@2jEu5RKc37QOAZdqdO~gO_^0Pi#5ug8Bbtz- z#mtD>9mnVqR7pIgM%l!390u8wyrhCF2@6Y98HZ2uj*94Uxa;syT-HHr#bDGO6(t3% ztl_sbNQ@sV8z?-5T24Rb_D0cm)bs70N4py_#q%vNKar013bj9jOMGZ>R<4@Bd0DoF zIfIwN1vd$>36&{Dg=2MhRiR(@!tQM_POwtfO&FgzyKN=B<(|_eDMPb%?|OXx-54Qb zfY5s%SlsXxTCCE5JJOw-h&_LP?B;55Df#)!RJ!;?KGU0mY$Q`l zeO;ju!X^D>7qSk&)hk!VmaSS*w|d2j7{hfdmZ@jmvSrIwtd1>Pv0_F2in`@>t5(M9 zmanK^wkqb-m7T*h0Q0;m&v9bgvIAQN1_wr>P^E^qL`6NHzb`$nc1C_Q(jw%WpmX6rrL8 zvugdRObUqPD0^PJ)R#%6cAu|do(#?^#>sCz*=)LZ0H$yfgYw?|5RMkctfWTKH!z6H6KXhsSlFpkEnFm- zB~v|vI9X0MTbn4kEDu*dNcJcY51t|}T$wxEJD5+BmhA(%eu4}R3=QaSaMIkx;EgtxVH6Omp638o#svlx9MGm zE99D-g$0Hv>+NA0zenopnytC73>u{Pk zwzo9L@x8gVv8B6-o21quEv|}iTADXDzlh;iFZ8^H#qGL9bL_h-7O6rPJ4Gpds}B5WHhPC%+|Kn=GOHc$S%GStJs$~ z$RC+H;wpAJH#D@gNTv+St~9We0AG$5l(Lk_~MwO>xAmi-S-eex`CoIU8FV znl~_5%EYa4g^Kkcg>b72Amn5>IDuEiMj@do-heH|7o!4O zeJP~cXG(o8m3yv-d3>CcNXSr&MU7v9n?d4W?7Fs&#D+wo>MYTnsp3F5h)$FPR7|#~ zFO|sc7)fQ9^e?o&Tc)o+Li&Hb%)KCHRU$Md=>0-E*q|N}urOBE*VlV=$U1QfN)vkm z=n}ScoV?ki4q!*q$K~KXThM^rQzr;b0#?kse6IR!F(3fC!t|8(9W!Y!5;L$rtD4{I#aqWHT{ClFN2;9 z#J?>sN1&oOT-~EOLpPP)eG8qTlNFRuau(API|h{PjednlGpRwRXM4{MA;xgR8O{%F z2BXX2p1I`Qtw8VAWP?sEYI6Bqn1cQz@y?c=LN^IqhNG(0odYYGSCRQMYw;C{Js-7+ zS+bs9(*Up9*wC10Xlm+6w8UEz&8>-bS9ZlaH>qTH8%9Dq=mNM+Spm2~S5{25o2qpW zcupo!(k!H92dZU-ql*t|HYwDWjSv7iFB5{69T+mwAx~36z1KtNb;Zx6xZac<6x)!R z08Mxyu2qQuE(3ymRwdBE52tX-YX+L=S~oA39lpHWuO;C$R+luz8}C4bj`i*#qAn+7 z0fTNghD3}q2j7Mb%Ib&1Nb71x(rKLfxvZ|Pc1t=9U864Uwi2Y&=q-z6k^rD*`*ee7 z8dQ&L-4Nt}8yXmd6`1NJq^FctL1{Y<_kdV5Y~4H}sw)UK6a{8&f3xTud|M)Ot&O*g zvLQ`wvS|!IRBmL6Q>%I6lRl25o(cJUnbWy5;hNDy!GL*|Jxgw8T#s_$$ zSnuZHf%(}I3WoX#a4!(DO1B-yY2MD0vSxXjY)O(2A1pe5(>gqqJi|=)0wU8 zFt_z&26{GgAZS|vs#q?%;8n(+a1;O*p1dCkT6lVZ2cE1g58_4ZQB=gD?P*^># zy0p5GeSCDa$p{i5&C@j3ErM&M_-mn zZFL+yy`H0&^t4y}ycIvMasgNTycIt${kqS&pI6+Jo>TOKY!1_{OZqSJeZpn4TY}$` zg9DrW-+0duzj#R_{k%BQ+waA-d`SKX+e=gs<9a^)F`b#~{XPAsF=e=dxQk9767W&M>J( zm2`jF^O@M39~exg1jH+oKqz(u(kkloN;5MG2qP^3l29IUPA(RKW=Tp!2M`5|Ww<9~ zyMFs5T)@4#bY=&9CcWuQlEUp&(W{J;QouzxL-`p)76z1gFaU>m7=+>t2u%QM5fH;1 z1;&$R*wyDSCkj9I5ZIB_#AKzZMQ5d?vUdo6@h~7_)VDs-7aR#Ebh|`hv|c9U;0m}> z%LP`q{kRE23HB2r?HFGAa&r(bs0&|41~NP@v#k2EqH<}0v$Jea*H>32DcWOKE`IKT zE)z5TY64nixF_R!+54=7TO`h@p@%?RELdOAyI9s4IOpMg+f|zuRlVJHnhD4-r)}t7 z^C<|?Ox9&&{xpMFrjqMd$y`V4=6qjYDs$EHy881mJs=6Vk4Caxw#hl?98Ch=FTBt> z_s!?pmxh@O2n)(`0oO4M`oC~yr;3B71W`weswPUd{Ri!kZnqguBY;&>p_Zj5j zUmYupTD24a81RDY_Bg%A6N1%em6uE(MxnAu#8kKrspOi*%_%zOP|loneLMLdPNiD> zrC6=^3ZTZYzjK-Tre**Umg=K3NUCo04)ugD2;iC*tPWh-Mu0HhHxG|saR=7Jq%&*O zl%8DK;UGI)*@5K@j=F-Ldx#tlD{0qMDnFYh)2e(sHzhkD*pk@9V7e!1BxSLqBnd=| z5D~wNYxyP{7o)7czh^aq18muG5el~`Z0?!P<{l%S4nPitAd=KOoz!49 zWi3NA_2y%rkyl!#)RoZ{43r`?9v)g^b4%=u-n*@8s=gHd%Xv*9QF&C!GpiHLF%dr1fJo)lG~>Ls_lNE~XSF+dD9@Jc(7L zxonM9I;@Ig|GsRKrSKRng)tM_HLcw(Em)7|P48>y@+2AQ3iO$(V-oKxh|;u1r`p{U zx>O3%NG?;OGcVmn&_ariahvvK|ah z)DoM(q6w@zO=GFGqqgF6l}kfM`%n7Ii|k>$;Ud>H6iwj{ z=S>A-$}_8%1{t=x3lz*0rJXAcbvZi-6Y0>q_lMI_VkKc;#IhI$4~?|hD3L%M%PO4XvsqNPg(BCJrp zv^q(7oiqh|a=o-$tQEe&6=;Ky*i}TLT)EK&LYhE`QD za7F>ljM+i)Rc(UXxVYV;wAHZK36pA(siFuhkqb(ZkWjHHjNUEFrf@yI)3z(j$nN+L z42_eKi&Uk~-4Dh9G;6mQAEjc~~orCf#zGd3pm zm>;l5P%@Y!?kdiU3NLk8c!4ew;7|zs1>rv1r6(kju}Q^rS?b!_{(jr&hU03lNC|7X zD3&&Kggrry+gvCM-sKBXud3aQO<`t*W*XxmEX2zf9mfkdYn@f~l9Y>3OD55*FEfds z+orX$tTSvSJ*PGj%Twukk5|_#$_U~@E-S^vp10`e+ug{Z?JenQi>7e9TBLBbpC~`S z$x8)^u`u>H<oPC~p558!F^&8D$jKPTyGr$=j#`EwZRMgK1H4x(cbL}$ajC6w`phgHTG(r^ugDOyn@DdV@@~ddPAX*gh z@$@pHU#Q1Inzv1RKp=?BHpMVUqZu)T9e1Vltq;P~8hn!0js(M!nYGMGdtgfE0(U>3 z@)W{hSQ}zuhfOMJCOG1aQM*DSEZ*a4b6W+dBR9EV%R~ z%)s&{PSE{`R!}>glxHh3BU61?1)J-uS?IF^jn3gLsejRnWz=edmCCZmaOeVihem1^ zqOD;mifcJz!Bd@Ww0MQ9y~yktqY`%8t7YZIuW0Vd@UGVd%u5ue+9|KGvc^%9Iblw5>pY?hQ3xKVyzI zvYAn)(`6_)T!1Jd&mkG|}GR5aroUS)p$DNond~O3Z4T?eo!T*O|LYS#{=a&@xd@jLtlq3z41q303-Mp))VJ07&m^nD)rr*9}jvpLVC- zp4GWHDoS_YRrcaz*Wi!^p@x|=HTCAV*~~EPxDMzmlV}tK{CwTF_K{ig@%%PK%I~_L z#ctJIIHE@2!LhNPl`2^`m5C%Zc(=U(!g;oSF;a6xlbJ|T zv$iMjJdz^tIh{t5y?$6LkK=ns2C&CG$z?Ry7sw^{Jah>Q_OW>hP91lO(NoB^7ooG( z^F_~}NhNI~6>;<#I|s)^rg%zpRy#zJYn+ajOE1J$L8rq^6HBN?9RSF8SWNDa6+Oj5 z_7;I(V^hb4XAcen%SQ8tRKfcSz}kXOCevVqo{&C{ zP7ni~l!w~q_OdntS*B8%J9GV}G>aT&MxUrAv7atex#UDaKa4F@)}oZ>pBJlQJeF8N zQsZ)1KY<4B(6M&sN=CSX1U^s&TY5E20UMzQ^t9Bli)We(&8DY}4HdyTz=Dk+?pIGk7y1pSWDJ|a2Ml8U z`8iR~Zr<)PSbgkzsSOboWnEF$;(NTvS+%n0QfrBRleN-XZJIHwYpL4{ma6fiX)V)J z;0DWcslE*j-csM=qqkdp4wRtQ)>KShXVYbPV(DvdgPths={hM`z<^H1r{_c;OTOjq zFsta`=d%u`)P-#6@XvcGApeGmkPTEufqHw9jQ7>IW|i2=QG`l8&A3ki*?Zd=j*kj- zy}}`01!O;YqiKzUz<3n+98p@C7sU=vzfbzqq=S2BQz7^${^Cs<775@+P)Kcn7 zDnA7@Q_7Fn%29rLus7q{5BYn$wT_SWD>f5`>?g1Ns3A@e_2*i8Gq?6zN@wf7WckM= zFs(YI(r<;Ce)o8-?(*m6o1iM_4{R4&WqwL;QE_Lig(K?jK<#T~S6c32d{bK76tdPf z`bu{Z_@(-~^TC1OY4Hi1t&FQmYdqf;dvo5s$sHXDxnLQi=%u(lujEg4Fg(%LVAC8i z@}*|Cm*SvV9&z5j5)r)r9K zHg+_(cQv=Q>U15cEw}|5H(twH3g#qv@@!;%$a+>CwZ^3uI2h05*VogF`_pqfhMfcY-1l2R7(#8DS* z=_9o}8WXsO276mFy~>8u*D#*vG-gsfbksY{o@dCLVv0PdtL!qp=sbA};LujU)+}U> z*g&PX4!FkyA`bP)bio8%*^30{*q{gs<+AEmB@Ibw1SBf8iRYpC%$&KSD^rz8anIIQ5^XU;GLynev0a6Z{JgL7#;CHgEIg@S z^FP1=!z9fXxt=gcnSoK4738@=&aEvsEp{H=(pig9;N|-HKfS43k_Y_J}H8O?rJoC=og?lt1Orq0@V$ z1o$K6D^4DkiG-4d?^7lVX+4rkWN+sA!ig}kQzyk>D3>7Zq7EfT$4!|SoxWUB;4BIy z1K&eQC`0Aa{Z+2Mi^v^=xT)sO;it-78g5E?8L*3O3fJ@neGHtBZmc<%+RM3#$lE;ls%j=faEq2zWopq^9W`~Yz#CfI}j0AH| zP46NBaW?O88V9nyX{U1shAl(c#ZL2Z?-J6}FgWN4aF%OXy!#>1PgE|5LT;*m}BuAa2By+1u9$teN`p1Y^};DbfhSjZ2kWZKE5CFeiJ zC1d|D^=wXW!@$%P6dY~>>Pb0}AS0nEo8>wF zI;wI(WaWa$6XJqMrAL?YV!^)QWU9|`5{agkczdF;t+gwDMHkLyjCUk9Bob9;Ar?9{ z8o;~6?}F@(?9yzS_b~eJkQ`1?E$5aF4Ew+LWJY@MQGt7S{1;3*R)po(^WQWmLo4kC zEQoQp#`|MJFO;-0Gj~H~dvRS%Z+~K>Cn*;bdN(baZU~1T`%#++-+ea#;XV?>(0E5j zTSua^tApqIw8UF4?%LouHO`9V<kR8wZ<&`PxC&lk0Kd1QflcySE-_mL#2AORI7_ zMpCRv%&Fv|$#j3GFBeSc?FS(oV)x}|Y@)3TG9(4uS;0`B0Jb=T0oaQE8A!6<{ z6HQ02q|>}~JxSmw$zA^}?iF4vC!c|h@&yc8cb}9CsxBnKrS*X&)NqQ>HEJUn92nke zw6wZLCXd>oij|JttUNLmP;e}@Ax56i;{(IJnG`R!1Y6}=hg45*zp@yp$IWOJ-BvbB zd%~p4WqO9Q=y8}%f5WAeh5>T=be88O4fm!z4y3LfK_`P0h>|-{Fq1GW9S(ZO)DVb4 z7lw`lKCztRW0N2>$yJ@EdDUKGGMR`S#36Q(JRE-}G9ZVaZSwi(1Mi|s6Ua#)YytCW z1RZUvFhj%nW@P~=_cg>knPPF^s;%X*wlo~n{dG>dw>O{3c=e+@<`lN3ae(A>;s()t z*6C`w3^fl60~`Es_f9G!qQHvjF*Qr0PN-r|ymK`NtB*e;Ztg-;UgeU{;{1-JsrKIf zo{Y#-f(;b+LqMGjj8I~)GDqBk0;O-eu56DdHa1+L)xjHg5Pu-(CUYM1nI}5f-{ueBIo0%rZ1T@8aMYLJtG-PAgECUaI5?7Fh-qrQr0SG~!$Usb7fTafQl+xvB)o z6BBc|)nM>~8`1qVkFx``tb+}J>$$z-X{>|nGzS7)w?Q=xx{6tNKQikG84sCV%N{cK ztEp_4l}4AN;BMXc>&}KKQaR|$bm>)hjBz2kqIxSCRAdG)Fo5|#fI&~MW{TSk(PXh$ zVGzR~+*>@HbiW7sPm37VlUwy7Q%a5ti`LVd8`y@au>`N}Hp_?#!8kKniU$G{&INZF zg<(TGN7yasnrpWYKp%IkH~WH(l(>ABjtr6`5}VDB$Q{?ogm$B{J7yPoDaL z^L4c&=`=iL*e6oEC7n*%b_azo+?bD3i!9C#LGOY}CS`%j5@`rIIwRUo z+m^5Pbse(i)hvpZ!UC%i5t{-9NN1y;DZH=1vcEhqKOaKD)Y=uB#gSk|GZpRUr229$ zD%3?pIg}I($8sRAE(9S8h*dwvv)4P~owQz6ofT9GxXbi{PTFX#!;i+4>4+YphLq zCnzFSRd5!kFiIdi)m4=`dKhD5GvrDrVXg6roiu6p{8O&VGl*pUh`d=om+Ks7WoFN_tjH3|z}zOQw7C^ihhVlNkDN zD|8ljDxm{kXr{InE|RR0DHzBYVKUA{iNOaWlu6-d;E7FiK*3HJ?j6jFZB3I95HRuJ z)Km^tV$hSC^efNb41o@>4rJVXi9x*5;!U_V{ zVd|1YGE)g-I=>kv&~R=5Rl+=bJqr}V|4)0(a_p;rPH?FX=uIDxum(ZNvbA(MSBM>25{OsoaT+~EzR*J z%uu&BwsbdPioscjq^)gTPD}H~<}TpvYI8UhrLi@~Wz{TDZp5uz8-TxIU2{uw*OiN% z_03(aM7th%8@S3gWDbvfXl-k4Ze7pmjQB=e>qVo!6(61WWe7Q)8yZ?#B*%tsl%qq) zY;0@4vZMLp4P8vXp{=C}i+7!ManRVXt|hK=L=?xO_#f4fwy2D~-t`PHA-@xEMw5=puI{_2tc-@x{0Sy}1(GA=R<@@vB|hn_f9?v-PY!bv=}eOAZx+g26vi^=IY34kr~ZKMYQhMvHLY~T8VC1B zDh7Brb0Bh1f!!6&niJfL z(TgG{y0f#HlEugoJ@3$n&K`0YQM@B13E8(y$Ng(fCAALtFNjvS8ETAyx|QBL76FWgq?z)bV}?} zo?=S(N~1~ViPK!Cm?y5uvr{Ukf|}q{Ob5fGbOML;5jw#%)CjS$l!ArCQVOU<3Z$U7 z^}|TWb{Laav{Jw{ztYO8UBlL}bwgi9uXKW9p?WZ_6HQAu7Q1bTS`{gC3A}0(I%_l) zww5SWVHc=S1K1f9Qv;w-8obtUhEk*aSQ1S~)Q%lC50`KdqE&|>e=3?o6EjJrVb!~> zG;Hz$75{d>*6>O(Rkd+(+^;rVjHUHPbkdTFBRXkG%@Linr0R%HT2gmJC!LP+urJZo zGV59t(wZRaGHu}56ygF@s)J%|WALjE)76G33${`GLUjcZVoYi21~a-S(yC2fg^gOb zi-`72LW(s~3$NF`Gf_wrZB;w<*oc<~dTQZWkXwNUXR=zPci|Ou%!NI&>N9j_O!Ni^ znvU#Vm$vGQz>O2!)?OH~JSt*ER78DL#7Zl|-JluWfo0Kw<|f+NF}=wkxG8ONG-!oRS_#}AR8^ftPK|4FTtDBY0PwRfsiG}Hkug` z;be*vaU2UmpU7Yh4yPW+6JJ}lK?rGimh~)Fy>UsRWF4Ybovx1VIQ04sI13G{);F}k zVNr_(bLtaP2UV`cUJ8`W*y&5NQzH~;qg@L%6}C@ysf3|yAxJ!pQRJUu;Dez)E(Jp| zF9kzsF9k!PF9k!{S1{;qK&(r(83VF5Ou6-aZ-qcU?i6h|*gTH;+>|wfQ8nsXArwgb z%4j5- zvZM-)uA*(%+y>>Vs;iV92&#riaHSG_;P?~?uC#*>9G@b=m7?&0 z<5MKK(iuK*j7hA!2a4zpmmLPir#g!DxO6mHYJ*Z%TxkSNMjOGTl|_VHsa~vnJ%M>M z-%tmoU_pu~2v@?U+`6@zFk^*6JkuL8*#wsMYZ#S6{TkE+s=_E&c2!ME14LBQG@5_G zn9D7%8g%)ZK^@n=vy=PRw2(Tzx2< zSinBGl^Ral!qPB(i-HI(XG@tjStFYUu-<2|XLAZ`=S)=q@G7`F150?A+;=st1#WR} z6Al^SUWD@ohA|f+SoDJbXJ-vgIqN^L`Y<6&pE5nkfph{ZswcMry!iT$x)pWHR|VF8 zEMK*`z2GG^IMkmPK71K?Z0KqSFS2p|GTVydBy&l3a=-d zW~S^vTSjR7iMTj@gFRb}%_n>8Vf(OmTIvq^;P1+>={5?Wfp6VG)$6t`t_LPsIl8c=l{SV*<)zf9x2rG$@z%s+G5% z8dY*(@p1=fJ4I3XbRV99bb97X<&ogpVwC!^a z!6|NMp$>jBNvmj6-ZF_8>d9`6UP05D!rsU%4rCeV!wMa%_?p@XN3t(7IDoBXshn@Y zge=Z(v9OuN4dThnZbgdC*gZ+ouv{0X17H;|7E^EUAHcCQin&+}2gaFnQ4>l*I@U|Y zU_Q{Sh||RgnHHwwSjS>R0G45EjyLz=lyHlca;{3An|Co;oW}kYy)UF^E9R%LORyK4 zNWG-0NZ6H9y9_%~xDi4X$DFOgGAWq{E0C3e$I*My=mkIW(8q6w$bs@{mm>(C=h|0F zd$vW*Lqlq;85oMHU&Ng2IXjizs@%zp-zlDIeG9Pd=M7nmZk0jyYtDEJ@vu(2jWlvY zX=p2{$(oim`F6rJsx#MCq`3d%T8oq_m7K{ICKa{VTK4oO7Y`j?h*kh{|s? zSdK!)f^FEr?~YL!j3ylx#g# zrsy#m{T&Op(92vWDnPWTJqQA76CKrcSo%MtcaSwhqPu~LJ(1>^ScO>CL?}D z1Gbx~4P+oGf}!WQP2P0WooyTAiKh6v?u(5snM~>$FS&C)c6^C9O{2pRdTKbfw92h+ zrz)H&HY-b&m}1vbO^pTYoFn{N!WASt-$#8evJR{@}QXiJ(5Q1%ayqQv-$9(9z1MVS$` zf$?5c6R`9lbH$G41iPMSP14M>EY)U3xO3H5z-{3(tT51R*hFcTM5&R$ASYapM2H8^ zndI0hT#t~5NYRMoV6<-WY^(z1VwYEqLqeoyvM$==3eO&|)cGG)uQ=(oA0)oG{~xFS zuPQkIzpidY#s7a?D_$d?3I9K*L)rR*a^lScKx}xbST4=eR$ zPKm{?eO*lQjUgT}u~YH)RK)S$LkRO9>0%!Iw*i@KK;Hb*kG$)qzd8EA1CRezhH;DWkNhDocD>=Gg$&o?AAgHp zd(#=WU-HB8^M5gR#+L3LX6O4oV1<~cT?mE;1MzM>;Jbr=-w(w9I1t_z2=5Mr-(n$T zeq(|7zYB!F5D4EH2qyygngj8h0^yGb!fy+tUm6IX9|+e4(q9^gUlfS{bs&5+5dQB# zxGfM~9SAoD^802W{yl;4(}D21K>C*k!haKhKP?ddjzIj$f%wKiypnSDk@bCM0RDl@5x`(s!V**mf$mb!Kz7wgZZhX>_vHr9v9 z)M3UB_YRH3FtM6RXJRlphjB!1jQ8OrhI8p21%UL}u94**uC_$hxO)tVQ-cJStO=M) zZ&i=MSRYO%$pRn;Hw_Mfj}76fGSHMrAfMrMVld4)=k#!FGv=R(0LT8ta5(Qal{0rB zG6@Oq>m5vIQwnc>kSJL`oSYrwna=56#sHb5=Fu(0hD=NXq!`%36X}szpSnC9IEItC zbgZYhHw83I4-O=7F!N>{!64in!r6#1o}n1KxTSerV`BM|W$qi>%}Mf~d8$zK-xmn9 z`Wp?!m{}SxpHz7K$KOi_23|~Ux(zZS-z9ufY?qd~$I&mG48fxO%vqx3X3kP2Z*!nj zk0AbqfIZ456!kGap@5&}6X|}>CzbFGctVNK=JSQI*jzs6#$xmMM8C9vPi)mWmCqN& zVyE#r5B(;epwQv-C6H@A=f`3-e1hP`e7+RE5kAp)>iI+`c|M=$C@$dh6|vY_K3|Fc zi_cfFPs8)HSgeK5(_^uAKGATx_v~=UC-y);1{3g#A18+JU15G%V$k2b`zgai2M0GFBZF*&o{(k z-J?J1+6w*J zg455OJ%PVW^UT?-nSQ<=dIHIwIh!@q&$vU6NSHO%&niDOE@9SKKR6OQbccjlbNvp( zw@5e!%KB><-Y?yjH@j@%}3q zu9GlpzW*AA9SJ)Ovp|OyNVuBe5r$(Du3`9EhL8R?KAgRn;avlfP_cHv5gzFjJ z&+xc}DKY);XZQ{YQ*!!mVfYpauVwf)hWAUjiQzjK-X-A;3?E>4M8Yi$k28FYgxeW@ zh~ah#cQO13!)ql>iR*ui;W`OZ^7@}(*pcux3{Nn;K*C9ek1`ySa6iLOGko+9EdLj%kU!-&M~}z;c*F5V*A;Z9lArpl-z!Y;aeoUi(z&phxSW&55si~?~?Fd zhRQyq4i>B)p$tnv;jxC44i(?F_F)c-c?iI{N+HPabXW>gaEODPpd{pGz<6 ze`w$Axf9O-;MjiOPq&X<7w&;#isj#Y>s~xRKMyi{!{NF3d*AO)+I@J|8z0NQZr|PD zNo@D{td9`nnNx3Mw1B_yvCPDSbBJKp?gwUHwdqUya_7YM-HX;K?Qi#y({5b=*c-=l zFJryN@N&w*+132^%p+g<(tgme`^bVDcFtWr+7R1z%E9>W33YhhSbXll_yk(#X#DqM z@!x;tO9EJPFn&zp&m4;%8$0#J36%f91L&qlyQ*i8&aR#~1=YAaery(^cRzjdw(sn> z5`s;!L$pf}dEXN!y&%3|4A_s3#gERvJ9a_s{2O17xZUxiNX#$u|9O1((|x%d{=Bnl z_tVMT8Hc_G47;E1pTFn-$ji3*d;Xd@KgW>D)Q|UIQ}x^hh{Th2MT``F0t)COPrv8n zxnr;3-veKLFz@hu{CQJ+-u#>X z5t)s}=V>O-op|rtXT?0T6ZN;Ch_%phv z8U`Hdc-|&1Qw;}R>lZG$h^{T5$vGh$iA^IxtwoCNjc zEV}TCFJ3oG;%?$MUH$v^R6ooDf{IIji%L+z&!ctf7$O5ej3fgQy6V`(CkQ#anz$$a z9W{dTou-)j073Bsz5IfRhY$kRd*!noF^(_DgAsu|2s-ig-?%)Pf6uPJ#i#lAJfhiv z54XsN@v)nPvp3v#7s6<8!r9Sz)f2Dilibe$5xeiL<|CG0bl?odmAS7$g_8rHN0>$L zQw0K0Y+}vtBx5ECRMWAyx~!gm&wfe==pkI+=>BmPVl^XX`Cl-Tp9l3jA7t3-KCZGN?w(B9P zkMUWk2MYG#S^LRqjMJXiyDFw>au(x=ff`R%g~Bf6?K`y`=MFjO^ut)1IT7y`<} z3$Bs*(*4xMaa z*;73iU+3SgBxC;F<9&dCB|i1t_fdHgGld3%#XboDrzn8kD(Ojmz{~{C`edPCdN>{na7R0WPsM%{j`tK*U|=iX_Xo*^qmF`x(C7N)@~NiP`A4 z7a|SIpvx{0-8{fO9`dlQKfA`JuH0isl=YdLT^jeGPLNe1? zwX?{x*+{qRUP%_qy$LD#f$>}6ApBeo8G?)j<~u3_^)vSd))`0=RdZ_f#P5FTHdxg> zEm8N0Lx`XU#Nlg-XVf`!s24`>L*5d4f*ibGhg3FpFZx2#aI=7pzKfFYLNWlUod+p< zFB!P=m__YOv>;zjo@P2YhYc2)`$>u7O-O4E@P;xZN&uC<=Z6SbZRHvSQB$Sc%Aafi z;GXIQU@#<_kJvlwG}ipW10P|Hqxx%tOyb8zd_43I$Z6l6YRS-RRt!coD@IMVS>5`S zuUXw%7tyRXRTnm^zr?pdvtn^|v(gM>|1ZtzFLspCtR#JCvl4V*(We#_Z&s)NcPz45 zeG!bZo7G2ufx@$AQkwEqSP!?-7dCo7_%CV!&6)`who)owbpF3*o-t7fX5srd^gZa* zL*K=p{W1pFIX9N0(SH#2j*&ci&rM?T^ZUzp@0=IQEr3ZkhCg#h7wkVg+YfP`o02bU zrMHzg)uHp7^dbIKs|9bphnH{dvzZ0|;$7@V{>3|~gRS7p`$!FJSu962+%16#w=!pjdkl<2B*aQO&1K@Wcy$j>U2>#yEw%YlPu@_!S3Edj-13 z?xUt_{J)@~%*>mRa-!DC{L=8upSZd(^N)T$Ec0uu%+I$<{u=AO$-Jw&TM0&9OF}+M z`IudOAK%}v-XG%oP3m13e8*3z5?QsEiQpXRI~f13S+JMm|3!|h7DA7T6uoNxJ>CB$ z%rTt#5=)mixuZVVMnue^q-O7n|9~hKVo=6ce8GU3UyioBrOz)o{2GvWlw|#q*v{2e z@uo|_jaO@Q3l5z6N~jGzcHam%Qy;b%h6uw2NH+0dz#|VS?tMo@p5~+S4T?!{b&%*< z6*}SSI`uAGU1eqSN66;TC&AT%=K144^2+{7Eonzg$+D=7V*GrP+ zZN#Z6$>Qh7hz^9V#ar_EW(UF zR#g$<5@viEZUR3u-V1+i2s7SKY=#;ChLLH6a2*A)h8ecf4iT={tH6M@z-xpn`CrK6 z$^uRE)D>V-Gt@-RT@-RT>;WxF<{t{ErlF#aK>2tTA1VV971%kG`G#OCkW1qg!;?fDY(PHI`1?5**T z-uitgE(g_M_hX~okMG|3cr5cW{@s4^?wyY%x1Ic8{A0<(r;o)S+Z+Gb;g^DvD@fH# zC=RtIpSjW{s(kPsmQQWzd_HdS`MBhhXFeZCvO`~nXHd#8&&mhyVflO+EGki+Pndi@ zA^F_Qd@f=>n~=}JI7fMSaD=CFh361lTqhLZJuKJnO~6+ZziqVp_Ji>|RC@YNRQgky zKL7H=onYQw%CE2T^|5phR>S z$~Owi1Ebyd9*mDGln=Nl&#+J)CCWDtV_rvJLzNKNSHLAA&)pd4X$YO6%Z4F2LZ^;iUp;R$2M6KR@XEtMm<6j``|Cr15MTW!eBFP;15|ofy)_}` zKBntjqX!MFgfTS1y826CLA^=0J*M8Jr+TM)m!9e)Poh5mLfGLd*SCtm!E&dTW>*8& zv|Z-*IzUPJn5gT9*ZJjGT`(Fyf^WbPoA_-9gGb%|Njl=EF6Kwr<*++ne)t@~E;=3L zJ^dqOeJYaqp?}xpLg%SLHxTw=!cHIubSAsU9a8jt4z(DnX6VHnb;gf9xb~W)JbKh) zkdK3FlfOmMgKPWomlzJN9f^JamvauT&AA`0RUfW5A9n5K8-aG+#5eqyaMv!r$>%+M z!w;X)y$wH3_rJ1Gq|m3ool!@}_SXq>kB;q9+j?DTS)G6Mj-ruXb~5z;@^Z1_Pp1swY@8-w?@pf?ohmj!nD- zp9GO~Q9!g1F~22QPyP^ys0Hxhv{&Q9*ZJYi_%QKF5iM8J_KQUwkhIabCp)k3i`7Th zc~P!d<%#|KsuK6LJNx27<|zDQe}xeZD)hm%T9C9@Maff8daFeFwT} zYV!1DDA2Ox$(1v2P_>qI&<6QHeTY0Ys&|p6)#_bj=&C2c$tR5js8N5I9(iF$fgYJa zeNX(0RHs|J|ENq_e-(bZ(XB#TkKFNnWIcea{m^%=b)h{yvWKu23YkWad;o(O)U?(k zUsj>#SdYxVdlxM#ctl`JLhI~DfWL#gZdNa`!>@89{`(m_LO#D=Lmk}3E`&dPwv^LN zgHsizYu{=M)9xevMo*wmI?H>XzlRx{u*lQ=8%Oa8a&$dq>UZDsWa{VYU1aKq>iq?; z0nE46`^)(LFY5hVzJF1@H}U;W^`7SYC)E2szW>;}tVoHB`b(oQ(vvMg28aGd>3`(RpYMjtu-op&K4})u}2TyLRdNBUw zS^hpKql5d&ZiiWZ!I;8oJg{1@M~nyFY+=U;>Y$7`fcc={e4IERX0;6f=fOh5Sw;-G zPRSu+crf%h>8F)^F#ZVG4K&|SkH^&GaXtit8Z5l>(4XQ1Do2JOt<3$fQEn0Ag;OMt zM@GB9Veo`;@`wLHN;r5t7=MD9YHRyooYoCONB9s7W{mMRkns$ea1c2h5<8eKr-(7e zyCj1rM!TOhNW#dtTA(IIyXpM;h0f57KpK(Z>1QCr%b4L)hMtHK$PGY+VZ$#ZJ2UcN zhrWs^UQQHuuw=8V+xg)ne)t=~IgSCrm-n{!z?R0_gL~VrQEvzLwhxYN9M=YSLvr-e zehEG@*8PpqhHFPJy_-mPa*8b04tQC{T;|rs{iA_cIXcU)&C8qnvd$=7ykx12yj$GY+}f&@dmM+?HYd<>FXlK zPXi;;NR2o0!w2zUU;HOlZ7f(5Qsb{8?64t6bp)!f#XA%4i$6fpa-f5+7HN;dWgx6K z?jV-&7E*LSxpcZg8lmrh`mJZ4*&F|PKsrRy9z}Xo=F1OX1B?$5;|MVx6v2e>U7&<- zt>zVl?W|!oiZv#BCQnG1hb$wV? zTZ&{gk+MbiV<@*0-4Lhg{5|xt8G+U|*{%2lMjRz0wjed$MR>1L?;^Zy>izv^0;W;D z-@*6Q>RoKIH)wc%KU2LQKD?a%p2&mu)g*h6a(I{-8-KY2l1U^ z-aNTCey5l>;voJhOM0`xsSGlO6YpU-=lOBoWpLglIK>(K0peV1aF$_)9r(JB&U*~b zdpt8NPMk-eqC&i^$_!JE--u@U<42i8giF=-(u&pf80b0lPNNSatgiP8$_SULv7qQn z7RT?6M7h|YjIf~A3d%xbQR>^+NJJ@)-{nO49ixvTY^0xljRmJ|cradIaaL;|Yb#KS z{gY~uTUH?eWyw9pTTFl;Tr1|#kV zWAWRe(e4zZjBj^|QO37>#3;L6dpfmIhM>4XwNZwk_(-);hM<^iKBEjD#c=Z(Ww*m9 z`vHwIcfK)VrwC+3HC?yxFrrG2 zsCQ9&3;rDy_FhwA$_`j!)V5N4;#j+Pt*7JOC1byd-8(0II_`ZydkE$Ng+X-O9(>SV zt}&Qw&~cY7r;a}we#1~&HXBQ_*L`o zj{kaZ{8v(6GI2NuNDsG2p_BlyzQoUa7^x30hl3M*{}ojY=I})k2!$tM@d6_bTn$c{ zS~?#|!YU-hExwBk-V1nBA=j&SsgM!%K0%nIdY4Mr`!C?Yc||MXF|w~7{zTvfAm%@? z2!AyG#O|F>_}Zb==l85i`2EAIgvV47r8WQC5~ie;V70?<0_@Nyn6A)0psGYIKZ&T4 zZ79JgntAsTkL6f?at5fC9(EhhALe|cR6##O7mjU&<3NVZO2=dRN9sX{yzVM2%Rcoi ztQArqh>@8KOk{lud4<(Rh=!~Of{EV(-qgm=)VtKi57hgI2=guL{j2I-YUXEOAzMn< z%m?4()yy^Lht^CMXb*835wwVg+>8(YnyIf1shKx19qT-@W}tkOGcc^NJdP6Rn(_Ee z&jyxKpt^ze7#~)(z5H+-B;HH5eDSNu`!*{&EQjkPhoht2#{`L}M_u>dA(HEWMO2zVnF z-&XG;7XPB&ZzIeX^>@DCsoq5_zI_mUxwEub?0%ys7R{?d#o}t9J;do`BNmt7gI_FO z`-Tv)sAf7&^hJur<;BF}%P2umEG+A(gm8$@?r$Fg1%F>cI5tT>p~5jiu5JR7!-GaR z+8BDPCmcT0%~lUrT@DeMdv=(Jj3LL*E|#dEh>Rf0h{y)4B!wNST&T+Q2~i*-DW63$ zBPoBU-bGSwRqrAx@6+E|rcw1SlJa+729uT+l@#e;uUzd(%9-`7Z!whY{&hLf9(oe| zHj?sseDL?LPt`DGpnv`CgGk3o9wQIv;)|+`Pl9H!=2v~YcmC?l+g{dp!_HqlK4*Is z)+_u9pN}0r8RLLsoP~zgkUu&=5tw7%5h0Bv4q+I zru;k9Z|n^bb271hVV~zH#{SEr%u2XAPP^b|%Uoo+*HT3z7SZCw1O|*kV-r8#5BE*M z^4qt97cQ?0@cti#7breO=6(ji#EKjbz-=3y?yV}FhW#_lKSjeX_rVThwPiHy$v)UM zZ?Ryly0qmaWM$z27UjoZ^5miFe$-#eAPDQ><^oz*Ru0SWj?K!uc*DTI1B4&B1?$ZB z@0S7IH<)7%I84b-<0^J=@%u2U&9@B)UT}`=V3f_OtowcOM+x+HVAHQ}#5io?gD*jC z_I?#=02MusT=1N|_OJ1rUHx*Pn0ROnb{SwUmvZoDzUWso`jcMtT7UGJjQ%q(dY6tK z|F9sJ)LXsiaeuU=ZgHdM#l|FWkwudD_wS!g5^I>r!{`?kiSyP5z#2awU`q)0F%N8) z1~UbIrvh6+uy=T1;|80i?QR7YC)nj4SnMWEn+E%h0_!ALod>oy0JiOeLfZhrPVvBY zX)wdirxe&ug8cyg5M9#o0NBYN5^R4#u+Mv7v3-g*gRNPC-Ab^VJ+QR_u**Iy*gj9N zArEYq1~YZ}nFj^z>jYcxfsF^idjDF$enhY{J+RoHE7}aU-zc!(5bSC6V5Uw3U?2Xn zV5>S8U|;jVVt?Vs_Dco!YJz>r1KSnAR;!9oOR(J@*mwZ!N(Hu#U{`x!YXh0ysKB}j zw$cOJrNPFvg#7wrQiK75y~G2H?N>!GU>DyeVAm1sC#yV$1i)_olz_d5VB;Rxt^io> z9|Y`E1p9yoHXZ=Wen!B)K(LGl7JIj!w$TR!>=A-p;(@IVfGxR8z_s&I`<4e5!-huDUz)wI`GSC*MX-PHz}5!9KKaiA_C|v3 z^}u!oz{bY~>=J_YD6j)RydU4N25#Jf)jjMc!oAT$Hy)__XFek6(gb^%0)y7ZDGuDM z!@W_jl08hPLaSr8;QkkN&!c`{5ZoVixu)}i>jN|dS2k?jN;{?^|NT~r&f^F#seAEIw`gs?Sds+Q} z|7igp^Z`a;y+4rXb2`y1D-q2alhZGMheTLP>&xj&I?=torTCBEB1MaxVnV0*Co4q^B{sbLBvW`> z(~c5cFIE4?d#2SK<}HRO{tP&fl{AMRsP`nle@ngZ=lfUH`vZLcXZ8MjzB7NMmFDnq z^8tnC5V`mB?-m+nDICKqAu|&b1QRLfXJY?+hd|&EXe!d*s82hhO{}Dc}w9*kYQ)$E_50a~Nle&^^WO2vl|B+~8ZY z1kyDRnD8#rRd**+zv|!|D$!@~!}k`#OxzXTl0tCy6aE0;4bI2^(ZdObvEl9`%*__g z8r1l_*n5?U7vsSQ33k`!QSD4 zjR(N~@|yzo6@p#vfyHk2({@;aeT!gq3XB$>w(s;V_#-tm_U7;TH%O#q?!5NElSqaV z&K)8WGC@6+VoRkJ%3a38_0BFr@Cgy22NbI;+B2 z(XSqLvKS9_fjoRYi*aa{OX0K78)0DV^7)F9%K66lsgHYmC2y5ow zFC+w^#BV52F?ACc?q{oJUzsA^_h`v_PBZRxE!_j2ms$jic2xeNMNSiqOl=|utNM7{ z)kI4@HLU@<@fKzP`(MO|8cK_b;&kFbs%2@fI1mqrhhH``&wjrISYodOZp=YfN{b?Vx&NDF(;#`75|1AEo#u~E4=RhNfG zmy>n07O^qh^@E`|W3z~Q4PY8+ost;v9QcQ;3$sGyJy>~G;ig7K%uI~0eHO>OrxQatb(n|4 zr@5FW5L^qkUDdPSkHQ_rEQs97TJ=8g|#hMi^alc zBthr^&P}IS1IlwjK3+rSwhb(C7!pzE>tMRNPl_eEuj8g3aY`-E&1~!v!Nko#0W5ZQ7hIoS}4G>Ar>50&cAxv5b3ox-79gytaBp2_JAY|>3m4eHm@QOFDwxC|zT z7M9Ccsm4B!{)ts8gq1cyD7lADli|%cywRl+SEZ@Mu|UJC z5*Im@1pz5TWyg6cdkv71y{eNv^i@Y?tNULxUSQW1rW!wnQXOl5o)j1 zCJ>kQI*Mx*vhB1Q*vND2@Iko0ph_QV*U|`f`MMcERTzI8sIq;bXee5v7b4M)kcB|v zd4wq$4US|m8{l?8GR}E2RWc%AcVZDD-IB2q)hNkWg^*V=p8s`6B!dq#P%`e)l93Ot zC9if##sno9p8|EQ4!wbfk&KNb4ulVND!VwdWX$wb_8cIA0NV^O%)vTo6VLrCjZk8>j|2VI^X5GIiAbmw8ek?(psNXVGl47<$VMRbHZjh;^MHjnzSDP;g_dR) zVUP$sCO^S|{uT{PtcPt?v-3?tQK_GLO5X!?@$F`+*Du>6UZ}xy-Xlq z0_rq)PHmXSzyWO%$MbdOS^-2%54`cC_{{kmNSGuRh3*9fOO6i^G`BM zU#UK7qpNLn4MH3^A&u*zYSbv+E`|EF0a{<0xHEY+Lr@>J>>x4mo;0KO}(Yb98p)wXO zfMQhHjTj-O-O^j7Ro4KqcmbkJ&-UKqqI$!aEAoV3A6gQ=B($VHKGK!#S!6?%NSer` z39h8OY|=GMDsd&1sH9l&6|wN7WmQZ8!l*ijmxG*dQfI`%)0aK#Ni8y|C9&|7Wh*?X zeROIy1uqtj;@@TOdh%?2OmL1>-zj-2nCBBup7&KAIIY*>=Hqw^lXaiJ6iJHrW=@9t zFoM?Uzk^W8l3behC4r(zs$%-& zf|iNsCJ{tL=YW67Swkm6ZNFmm6f$d{U4~qu|s=*Y^5Ie-~C!o!sYdw%l`Q!H>MehT83sd_Da=2fd zl{g1Bl*5=|FxkA;M2sZPPjc>GBoiLjAC2p(!wd#hN7u+XG8cNy z+!{+XlO@Qb5WvnxL7=%Z*N1C9m4D%(=|rdUTilgnhf{CB#-2mgV3{-5Os9#JEG>*L z)4VdXRUc^nZU8V5l;p{J%c+Z!mL$eGEwOMA*W8z4G{kC>yQNh0HxR3vQn~^tA}|jm z&#a4VW55NiHHqo%)>HxeEmpKJ0SVZxm62_P-AW=_%VxF)O5ck`wi%B`#AIOdCoXt& zc-R;vSneQBPW$SFa~~4-#ukAd*5Cs-YtUBUFNI0s{8$l7?x}%PYv`7>pFkWEL`()jyJt!i^YYl>dz3BWuY8CtN{iLDC|5r` zF>4f7VPT0bZ~X@Ue>dy$*0xvL+W7M~vf8{uk&-@Fqh*Hu5>GBDc8p?& zkc{J1qIh@Al`m-s^f7_HbOK;D0jq4){xG6)TfMP>w?0Ueg0<0?DKKDmta>4&2T_&P zSrS0Z(qw53c2f85=jI-7J6<~B1BI_Qw>NsA^=2y3LnO@7-Nds%ieDW*DV)x6A zfnn3SQMyipF+`2*7#M7IOaaqRfvK~1JY(j$MmH7)JTmhvWRsCEUG7*qty6Q5m(m2< zr_f{2Ufz563z1dD`^PI>(aTjdCLdV`UBgFRsSnvyHJ-1J|G|}dt4hsgzpfqhIwU8y z_Dpf+HC|QFbsxM=_Q&fWTeBZtSvJ)VuTA%<_VnU49(WOhY6^UOt&5Vyszj`sN*>?l zN_o(vu(jg_Cprv`nv{V|8R1HqY*LDtGR2iL(xgzq;|p9V1564PJznEV$u}uf_;`~m zW&6D{r0ETnNK93^aO2dEk&WY%1E?vw@z)|JC`T%{4ls3qD|LxY#nniXdZsINzDkW% zk47RUM)2>l@l1D(a7s*`Ns?zG^W5UeQ*82FEP2KVZ&WAc

    T``E+d40TGIo0n(F6_hN8K%LTMe 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

    |l}JM`rVK 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