Add LID capability to oonf_layer2 and l2config subsystem
authorHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Fri, 6 Jul 2018 11:23:43 +0000 (13:23 +0200)
committerHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Fri, 6 Jul 2018 11:23:43 +0000 (13:23 +0200)
19 files changed:
examples/CMakeLists.txt [deleted file]
examples/rfc5444_reader_writer/CMakeLists.txt [deleted file]
examples/rfc5444_reader_writer/main.c [deleted file]
examples/rfc5444_reader_writer/reader.c [deleted file]
examples/rfc5444_reader_writer/reader.h [deleted file]
examples/rfc5444_reader_writer/writer.c [deleted file]
examples/rfc5444_reader_writer/writer.h [deleted file]
include/oonf/base/oonf_layer2.h
include/oonf/crypto/hash_polarssl/hash_polarssl.h [deleted file]
include/oonf/crypto/hash_tomcrypt/hash_tomcrypt.h [deleted file]
include/oonf/crypto/rfc5444_signature/rfc5444_signature.h [deleted file]
include/oonf/crypto/rfc7182_provider/rfc7182_provider.h [deleted file]
include/oonf/crypto/sharedkey_sig/sharedkey_sig.h [deleted file]
include/oonf/crypto/simple_security/simple_security.h [deleted file]
include/oonf/libcommon/string.h
src/base/oonf_layer2.c
src/generic/layer2_config/layer2_config.c
src/libcommon/string.c
src/libcommon/template.c

diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
deleted file mode 100644 (file)
index 60780ed..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# add example directories
-include_directories(.)
-
-add_subdirectory(rfc5444_reader_writer)
diff --git a/examples/rfc5444_reader_writer/CMakeLists.txt b/examples/rfc5444_reader_writer/CMakeLists.txt
deleted file mode 100644 (file)
index 0c16cbf..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-# create executable
-ADD_EXECUTABLE(example_rfc5444_reader_writer reader.c writer.c main.c)
-
-TARGET_LINK_LIBRARIES(example_rfc5444_reader_writer oonf_rfc5444)
-TARGET_LINK_LIBRARIES(example_rfc5444_reader_writer oonf_common)
-
-# link regex for windows and android
-IF (WIN32 OR ANDROID)
-    TARGET_LINK_LIBRARIES(example_rfc5444_reader_writer oonf_regex)
-ENDIF(WIN32 OR ANDROID)
-
-# link extra win32 libs
-IF(WIN32)
-    SET_TARGET_PROPERTIES(example_rfc5444_reader_writer PROPERTIES ENABLE_EXPORTS true)
-    TARGET_LINK_LIBRARIES(example_rfc5444_reader_writer ws2_32 iphlpapi)
-ENDIF(WIN32)
diff --git a/examples/rfc5444_reader_writer/main.c b/examples/rfc5444_reader_writer/main.c
deleted file mode 100644 (file)
index 0763d45..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon version 2 (olsrd2)
- * Copyright (c) 2004-2015, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in
- *   the documentation and/or other materials provided with the
- *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its
- *   contributors may be used to endorse or promote products derived
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-/**
- * @file
- */
-
-#include <string.h>
-#include <stdio.h>
-
-#include "common/common_types.h"
-#include "common/netaddr.h"
-
-#include "rfc5444/rfc5444_reader.h"
-#include "rfc5444/rfc5444_writer.h"
-#include "rfc5444/rfc5444_print.h"
-
-#include "rfc5444_reader_writer/reader.h"
-#include "rfc5444_reader_writer/writer.h"
-
-static struct autobuf _hexbuf;
-
-/**
- * Handle the output of the RFC5444 packet creation process
- * @param wr
- * @param iface
- * @param buffer
- * @param length
- */
-static void
-write_packet(struct rfc5444_writer *wr __attribute__ ((unused)),
-    struct rfc5444_writer_target *iface __attribute__((unused)),
-    void *buffer, size_t length) {
-  printf("%s()\n", __func__);
-
-  /* generate hexdump of packet */
-  abuf_hexdump(&_hexbuf, "\t", buffer, length);
-  rfc5444_print_direct(&_hexbuf, buffer, length);
-
-  /* print hexdump to console */
-  printf("%s", abuf_getptr(&_hexbuf));
-
-  /* parse packet */
-  rfc5444_reader_handle_packet(&reader, buffer, length);
-}
-
-int main(int argc __attribute__ ((unused)), char **argv __attribute__ ((unused))) {
-  /* initialize buffer for hexdump */
-  abuf_init(&_hexbuf);
-
-  /* init reader and writer */
-  reader_init();
-  writer_init(write_packet);
-  
-  /* send message */
-  rfc5444_writer_create_message_alltarget(&writer, 1);
-  rfc5444_writer_flush(&writer, &interface_1, false);
-
-  /* cleanup */
-  reader_cleanup();
-  writer_cleanup();
-  abuf_free(&_hexbuf);
-
-  return 0;
-}
diff --git a/examples/rfc5444_reader_writer/reader.c b/examples/rfc5444_reader_writer/reader.c
deleted file mode 100644 (file)
index 5c5ec27..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon version 2 (olsrd2)
- * Copyright (c) 2004-2015, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in
- *   the documentation and/or other materials provided with the
- *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its
- *   contributors may be used to endorse or promote products derived
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-/**
- * @file
- */
-
-#include <string.h>
-#include <stdio.h>
-
-#include "common/common_types.h"
-#include "common/netaddr.h"
-#include "subsystems/rfc5444/rfc5444_reader.h"
-
-#include "rfc5444_reader_writer/reader.h"
-
-static enum rfc5444_result _cb_blocktlv_messagetlvs_okay(
-    struct rfc5444_reader_tlvblock_context *cont);
-
-static enum rfc5444_result _cb_blocktlv_addresstlvs_okay(
-    struct rfc5444_reader_tlvblock_context *cont);
-
-/*
- * Message consumer entries definition
- * TLV type 0
- * TLV type 1 (mandatory)
- */
-static struct rfc5444_reader_tlvblock_consumer_entry _message_consumer_entries[] = {
-  { .type = 0 },
-  { .type = 1, .mandatory = true }
-};
-
-/*
- * Message consumer, will be called once for every message with
- * type 1 that contains all the mandatory message TLVs
- */
-static struct rfc5444_reader_tlvblock_consumer _consumer = {
-  /* parse message type 1 */
-  .msg_id = 1,
-
-  /* use a block callback */
-  .block_callback = _cb_blocktlv_messagetlvs_okay,
-};
-
-/*
- * Address consumer entries definition
- * TLV type 0
- */
-static struct rfc5444_reader_tlvblock_consumer_entry _address_consumer_entries[] = {
-  { .type = 0 },
-};
-
-/*
- * Address consumer. Will be called once for every address in a message with
- * type 1.
- */
-static struct rfc5444_reader_tlvblock_consumer _address_consumer = {
-  .msg_id = 1,
-  .addrblock_consumer = true,
-  .block_callback = _cb_blocktlv_addresstlvs_okay,
-};
-
-struct rfc5444_reader reader;
-
-/**
- * This block callback is only called if message tlv type 1 is present,
- * because it was declared as mandatory
- *
- * @param cont
- * @return
- */
-static enum rfc5444_result
-_cb_blocktlv_messagetlvs_okay(struct rfc5444_reader_tlvblock_context *cont) {
-  int value;
-  struct rfc5444_reader_tlvblock_entry* tlv;
-  struct netaddr_str nbuf;
-
-  printf("%s()\n", __func__);
-
-  printf("\tmessage type: %d\n", cont->type);
-
-  if (cont->has_origaddr) {
-    printf("\torig_addr: %s\n", netaddr_to_string(&nbuf, &cont->orig_addr));
-  }
-
-  if (cont->has_seqno) {
-    printf("\tseqno: %d\n", cont->seqno);
-  }
-
-  /* tlv type 0 was not defined mandatory in block callback entries */
-  tlv = _message_consumer_entries[0].tlv;
-  while (tlv) {
-    /* values of TLVs are not aligned well in memory, so we have to copy them */
-    memcpy(&value, tlv->single_value, sizeof(value));
-    printf("\ttlv 0: %d\n", ntohl(value));
-    tlv = tlv->next_entry;
-  }
-
-  /*
-   * tlv type 1 was defined mandatory in block callback entries,
-   * if we would only expect one tlv, we could just use
-   * the single_value pointer
-   */
-  tlv = _message_consumer_entries[1].tlv;
-  do {
-    /* values of TLVs are not aligned well in memory, so we have to copy them */
-    memcpy(&value, tlv->single_value, sizeof(value));
-    printf("\ttlv 1: %d\n", ntohl(value));
-  } while ((tlv = tlv->next_entry));
-
-  return RFC5444_OKAY;
-}
-
-/**
- * This block callback is called for every address
- *
- * @param cont
- * @return
- */
-static enum rfc5444_result
-_cb_blocktlv_addresstlvs_okay(struct rfc5444_reader_tlvblock_context *cont) {
-  struct netaddr_str nbuf;
-  struct rfc5444_reader_tlvblock_entry* tlv;
-  int value;
-
-  printf("_cb_blocktlv_address_okay()\n");
-  printf("addr: %s\n", netaddr_to_string(&nbuf, &cont->addr));
-
-  /* tlv type 0 was not defined mandatory in block callback entries */
-  tlv = _address_consumer_entries[0].tlv;
-  while (tlv) {
-    /* values of TLVs are not aligned well in memory, so we have to copy them */
-    memcpy(&value, tlv->single_value, sizeof(value));
-    printf("\ttlv 0: %d\n", ntohl(value));
-    tlv = tlv->next_entry;
-  }
-
-  return RFC5444_OKAY;
-}
-
-/**
- * Initialize RFC5444 reader
- */
-void
-reader_init(void) {
-  printf("%s()\n", __func__);
-
-  /* initialize reader */
-  rfc5444_reader_init(&reader);
-
-  /* register message consumer */
-  rfc5444_reader_add_message_consumer(&reader, &_consumer,
-      _message_consumer_entries, ARRAYSIZE(_message_consumer_entries));
-
-  /* register address consumer */
-  rfc5444_reader_add_message_consumer(&reader, &_address_consumer,
-      _address_consumer_entries, ARRAYSIZE(_address_consumer_entries));
-}
-
-/**
- * Cleanup RFC5444 reader
- */
-void
-reader_cleanup(void) {
-  printf("%s()\n", __func__);
-
-  rfc5444_reader_cleanup(&reader);
-}
diff --git a/examples/rfc5444_reader_writer/reader.h b/examples/rfc5444_reader_writer/reader.h
deleted file mode 100644 (file)
index c319f99..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon version 2 (olsrd2)
- * Copyright (c) 2004-2015, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in
- *   the documentation and/or other materials provided with the
- *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its
- *   contributors may be used to endorse or promote products derived
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-/**
- * @file
- */
-
-#ifndef READER_H_
-#define READER_H_
-
-#include "common/common_types.h"
-#include "rfc5444/rfc5444_reader.h"
-
-EXPORT extern struct rfc5444_reader reader;
-
-void reader_init(void);
-void reader_cleanup(void);
-
-#endif /* READER_H_ */
diff --git a/examples/rfc5444_reader_writer/writer.c b/examples/rfc5444_reader_writer/writer.c
deleted file mode 100644 (file)
index 709e365..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon version 2 (olsrd2)
- * Copyright (c) 2004-2015, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in
- *   the documentation and/or other materials provided with the
- *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its
- *   contributors may be used to endorse or promote products derived
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-/**
- * @file
- */
-
-#include <string.h>
-#include <stdio.h>
-
-#include "common/common_types.h"
-#include "common/netaddr.h"
-#include "rfc5444/rfc5444_writer.h"
-
-#include "rfc5444_reader_writer/writer.h"
-
-static void _cb_addMessageTLVs(struct rfc5444_writer *wr);
-static void _cb_addAddresses(struct rfc5444_writer *wr);
-
-static uint8_t _msg_buffer[128];
-static uint8_t _msg_addrtlvs[1000];
-static uint8_t _packet_buffer[128];
-
-static struct rfc5444_writer_message *_msg;
-
-/* define dummy interface for generating rfc5444 packets */
-struct rfc5444_writer_target interface_1 = {
-       .packet_buffer = _packet_buffer,
-       .packet_size = sizeof(_packet_buffer),
-};
-
-/* define a rfc5444 writer */
-struct rfc5444_writer writer = {
-       .msg_buffer = _msg_buffer,
-       .msg_size = sizeof(_msg_buffer),
-       .addrtlv_buffer = _msg_addrtlvs,
-       .addrtlv_size = sizeof(_msg_addrtlvs),
-};
-
-/*
- * message content provider that will add message tlvs,
- * addresses and address TLVs to all messages of type 1.
- */
-static struct rfc5444_writer_content_provider _message_content_provider = {
-       .msg_type = 1,
-       .addMessageTLVs = _cb_addMessageTLVs,
-       .addAddresses = _cb_addAddresses,
-};
-
-/* declaration of all address TLVs we will add to the message */
-static struct rfc5444_writer_tlvtype addrtlvs[] = {
-       { .type = 0 },
-};
-
-/**
- * Callback to add message TLVs to a RFC5444 message
- * @param wr
- */
-static void
-_cb_addMessageTLVs(struct rfc5444_writer *wr) {
-       int foo;
-  printf("%s()\n", __func__);
-
-       /* add message tlv type 0 (ext 0) with 4-byte value 23 */
-       foo = htonl(23);
-       rfc5444_writer_add_messagetlv(wr, 0, 0, &foo, sizeof (foo));
-
-  /* add message tlv type 1 (ext 0) with 4-byte value 42 */
-       foo = htonl(42);
-       rfc5444_writer_add_messagetlv(wr, 1, 0, &foo, sizeof (foo));
-
-       /* add message tlv type 1 (ext 0) with 4-byte value 5 */
-       foo = htonl(5);
-       rfc5444_writer_add_messagetlv(wr, 1, 0, &foo, sizeof (foo));
-}
-
-/**
- * Callback to add addresses and address TLVs to a RFC5444 message
- * @param wr
- */
-static void
-_cb_addAddresses(struct rfc5444_writer *wr) {
-  struct rfc5444_writer_address *addr;
-  struct netaddr ip0, ip1;
-       int value;;
-
-  if (netaddr_from_string(&ip0, "127.0.0.1")) {
-    return;
-  }
-  if (netaddr_from_string(&ip1, "127.0.0.42")) {
-    return;
-  }
-
-  value = htonl(2001);
-
-       /* add an address with a tlv attached */
-       addr = rfc5444_writer_add_address(wr, _message_content_provider.creator, &ip0, false);
-
-       /* add an address TLV to the new address */
-       rfc5444_writer_add_addrtlv(wr, addr, &addrtlvs[0], &value, sizeof (value), false);
-
-       /* add an address without an tvl */
-       rfc5444_writer_add_address(wr, _message_content_provider.creator, &ip1, false);
-}
-
-/**
- * Callback to define the message header for a RFC5444 message
- * @param wr
- * @param message
- */
-static void
-_cb_addMessageHeader(struct rfc5444_writer *wr, struct rfc5444_writer_message *message) {
-  printf("%s()\n", __func__);
-
-       /* no originator, no sequence number, not hopcount, no hoplimit */
-       rfc5444_writer_set_msg_header(wr, message, false, false, false, false);
-}
-
-/**
- * Initialize RFC5444 writer
- * @param ptr pointer to "send_packet" function
- */
-void
-writer_init(write_packet_func_ptr ptr) {
-  printf("%s()\n", __func__);
-
-  /* initialize writer */
-  rfc5444_writer_init(&writer);
-
-  /* register a target (for sending messages to) in writer */
-  rfc5444_writer_register_target(&writer, &interface_1);
-
-  /* register a message content provider */
-  rfc5444_writer_register_msgcontentprovider(&writer, &_message_content_provider, addrtlvs, ARRAYSIZE(addrtlvs));
-
-  /* register message type 1 with 4 byte addresses */
-  _msg = rfc5444_writer_register_message(&writer, 1, false, 4);
-  _msg->addMessageHeader = _cb_addMessageHeader;
-
-  /* set function to send binary packet content */
-  interface_1.sendPacket = ptr;
-}
-
-/**
- * Cleanup RFC5444 writer
- */
-void
-writer_cleanup(void) {
-  printf("%s()\n", __func__);
-
-  rfc5444_writer_cleanup(&writer);
-}
diff --git a/examples/rfc5444_reader_writer/writer.h b/examples/rfc5444_reader_writer/writer.h
deleted file mode 100644 (file)
index 89add9a..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon version 2 (olsrd2)
- * Copyright (c) 2004-2015, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in
- *   the documentation and/or other materials provided with the
- *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its
- *   contributors may be used to endorse or promote products derived
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-/**
- * @file
- */
-
-#ifndef WRITER_H_
-#define WRITER_H_
-
-#include "common/common_types.h"
-#include "rfc5444/rfc5444_writer.h"
-
-EXPORT extern struct rfc5444_writer_target interface_1;
-EXPORT extern struct rfc5444_writer writer;
-
-typedef void (*write_packet_func_ptr)(
-    struct rfc5444_writer *wr, struct rfc5444_writer_target *iface, void *buffer, size_t length);
-
-void writer_init(write_packet_func_ptr ptr);
-void writer_cleanup(void);
-
-#endif /* WRITER_H_ */
index ed7508e..4dd967a 100644 (file)
@@ -87,22 +87,34 @@ enum {
  * @param p_help help text for configuration entry
  * @param args variable list of additional arguments
  */
-#define CFG_VALIDATE_LAYER2_NET_KEY(p_name, p_def, p_help, args...)                                                    \
+#define CFG_VALIDATE_LAYER2_NET_DATA_KEY(p_name, p_def, p_help, args...)                                                    \
   CFG_VALIDATE_CHOICE_CB_ARG(p_name, p_def, p_help, oonf_layer2_cfg_get_l2net_key, OONF_LAYER2_NET_COUNT, NULL, ##args)
 
 /**
  * Creates a cfg_schema_entry for a parameter that can be choosen
- * from the layer2 interface keys
+ * from the layer2 neighbor keys
  * @param p_name parameter name
  * @param p_def parameter default value
  * @param p_help help text for configuration entry
  * @param args variable list of additional arguments
  */
-#define CFG_VALIDATE_LAYER2_NEIGH_KEY(p_name, p_def, p_help, args...)                                                  \
-  CFG_VALIDATE_CHOICE_CB_ARG(                                                                                          \
+#define CFG_VALIDATE_LAYER2_NEIGH_DATA_KEY(p_name, p_def, p_help, args...)                                                  \
+  CFG_VALIDATE_CHOICE_CB_ARG(                                                                                               \
     p_name, p_def, p_help, oonf_layer2_cfg_get_l2neigh_key, OONF_LAYER2_NEIGH_COUNT, NULL, ##args)
 
 /**
+ * Creates a cfg_schema_entry for a parameter that is a MAC address with optional
+ * link id string
+ * @param p_name parameter name
+ * @param p_def parameter default value
+ * @param p_help help text for configuration entry
+ * @param args variable list of additional arguments
+ */
+#define CFG_VALIDATE_LAYER2_NEIGH_MAC_LID(p_name, p_def, p_help, args...)                                                  \
+  _CFG_VALIDATE(p_name, p_def, p_help, .cb_validate = oonf_layer2_validate_mac_lid,                                        \
+    .cb_valhelp = oonf_layer2_help_mac_lid, ##args)
+
+/**
  * Creates a cfg_schema_entry for a parameter that can be choosen
  * from the layer2 data comparators
  * @param p_name parameter name
@@ -114,6 +126,7 @@ enum {
   CFG_VALIDATE_CHOICE_CB_ARG(                                                                                          \
     p_name, p_def, p_help, oonf_layer2_cfg_get_l2comp, OONF_LAYER2_DATA_CMP_COUNT, NULL, ##args)
 
+
 /**
  * Creates a cfg_schema_entry for a parameter that can be choosen
  * from the layer2 interface keys
@@ -122,7 +135,7 @@ enum {
  * @param p_help help text for configuration entry
  * @param args variable list of additional arguments
  */
-#define CFG_MAP_CHOICE_L2NET(p_reference, p_field, p_name, p_def, p_help, args...)                                     \
+#define CFG_MAP_CHOICE_L2NET_DATA_KEY(p_reference, p_field, p_name, p_def, p_help, args...)                            \
   CFG_MAP_CHOICE_CB_ARG(                                                                                               \
     p_reference, p_field, p_name, p_def, p_help, oonf_layer2_cfg_get_l2net_key, OONF_LAYER2_NET_COUNT, NULL, ##args)
 
@@ -134,7 +147,7 @@ enum {
  * @param p_help help text for configuration entry
  * @param args variable list of additional arguments
  */
-#define CFG_MAP_CHOICE_L2NEIGH(p_reference, p_field, p_name, p_def, p_help, args...)                                   \
+#define CFG_MAP_CHOICE_L2NEIGH_DATA_KEY(p_reference, p_field, p_name, p_def, p_help, args...)                          \
   CFG_MAP_CHOICE_CB_ARG(p_reference, p_field, p_name, p_def, p_help, oonf_layer2_cfg_get_l2neigh_key,                  \
     OONF_LAYER2_NEIGH_COUNT, NULL, ##args)
 
@@ -151,6 +164,19 @@ enum {
     p_reference, p_field, p_name, p_def, p_help, oonf_layer2_cfg_get_l2comp, OONF_LAYER2_DATA_CMP_COUNT, NULL, ##args)
 
 /**
+ * Creates a cfg_schema_entry for a parameter that is a MAC address with optional
+ * link id string
+ * @param p_name parameter name
+ * @param p_def parameter default value
+ * @param p_help help text for configuration entry
+ * @param args variable list of additional arguments
+ */
+#define CFG_MAP_LAYER2_NEIGH_MAC_LID(p_reference, p_field, p_name, p_def, p_help, args...)                            \
+  CFG_VALIDATE_LAYER2_NEIGH_MAC_LID(p_name, p_def, p_help, .cb_to_binary = oonf_layer2_tobin_mac_lid,                 \
+    .bin_size = calculate_size(p_reference, p_field), .bin_offset = offsetof(struct p_reference, p_field), ##args)
+
+
+/**
  * priorities of layer2 originators
  */
 enum oonf_layer2_origin_priority
@@ -640,6 +666,10 @@ EXPORT const struct oonf_layer2_metadata *oonf_layer2_net_metadata_get(enum oonf
 EXPORT const char *oonf_layer2_cfg_get_l2net_key(size_t index, const void *unused);
 EXPORT const char *oonf_layer2_cfg_get_l2neigh_key(size_t index, const void *unused);
 EXPORT const char *oonf_layer2_cfg_get_l2comp(size_t index, const void *unused);
+EXPORT int oonf_layer2_validate_mac_lid(
+  const struct cfg_schema_entry *entry, const char *section_name, const char *value, struct autobuf *out);
+EXPORT void oonf_layer2_help_mac_lid(const struct cfg_schema_entry *entry, struct autobuf *out);
+EXPORT int oonf_layer2_tobin_mac_lid(const struct cfg_schema_entry *s_entry, const struct const_strarray *value, void *reference);
 
 EXPORT const char *oonf_layer2_net_get_type_name(enum oonf_layer2_network_type);
 
@@ -648,6 +678,7 @@ EXPORT struct avl_tree *oonf_layer2_get_origin_tree(void);
 EXPORT int oonf_layer2_avlcmp_neigh_key(const void *p1, const void *p2);
 EXPORT const char *oonf_layer2_neigh_key_to_string(union oonf_layer2_neigh_key_str *buf,
     const struct oonf_layer2_neigh_key *key, bool show_mac);
+EXPORT int oonf_layer2_neigh_key_from_string(struct oonf_layer2_neigh_key *key, const char *string);
 
 /**
  * Checks if a layer2 originator is registered
diff --git a/include/oonf/crypto/hash_polarssl/hash_polarssl.h b/include/oonf/crypto/hash_polarssl/hash_polarssl.h
deleted file mode 100644 (file)
index 28c41e3..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon version 2 (olsrd2)
- * Copyright (c) 2004-2015, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in
- *   the documentation and/or other materials provided with the
- *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its
- *   contributors may be used to endorse or promote products derived
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-/**
- * @file
- */
-
-#ifndef HASH_POLARSSL_H_
-#define HASH_POLARSSL_H_
-
-#include <oonf/oonf.h>
-
-/*! subsystem identifier */
-#define OONF_HASH_POLARSSL_SUBSYSTEM "hash_polarssl"
-
-#endif /* HASH_POLARSSL_H_ */
diff --git a/include/oonf/crypto/hash_tomcrypt/hash_tomcrypt.h b/include/oonf/crypto/hash_tomcrypt/hash_tomcrypt.h
deleted file mode 100644 (file)
index cb35385..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon version 2 (olsrd2)
- * Copyright (c) 2004-2015, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in
- *   the documentation and/or other materials provided with the
- *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its
- *   contributors may be used to endorse or promote products derived
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-/**
- * @file
- */
-
-#ifndef HASH_LIBTOMCRYPT_H_
-#define HASH_LIBTOMCRYPT_H_
-
-#include <oonf/oonf.h>
-
-/*! subsystem identifier */
-#define OONF_HASH_TOMCRYPT_SUBSYSTEM "hash_tomcrypt"
-
-#endif /* HASH_LIBTOMCRYPT_H_ */
diff --git a/include/oonf/crypto/rfc5444_signature/rfc5444_signature.h b/include/oonf/crypto/rfc5444_signature/rfc5444_signature.h
deleted file mode 100644 (file)
index 517116e..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon version 2 (olsrd2)
- * Copyright (c) 2004-2015, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in
- *   the documentation and/or other materials provided with the
- *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its
- *   contributors may be used to endorse or promote products derived
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-/**
- * @file
- */
-
-#ifndef RFC5444_SIGNATURE_H_
-#define RFC5444_SIGNATURE_H_
-
-#include <oonf/libcommon/avl.h>
-#include <oonf/oonf.h>
-#include <oonf/crypto/rfc7182_provider/rfc7182_provider.h>
-#include <oonf/base/oonf_rfc5444.h>
-#include <oonf/librfc5444/rfc5444_writer.h>
-
-enum
-{
-  RFC5444_SIG_MAX_HASHSIZE = RFC5444_MAX_PACKET_SIZE,
-  RFC5444_SIG_MAX_CRYPTSIZE = RFC5444_MAX_PACKET_SIZE,
-};
-
-/**
- * Unique key for a rfc5444 signature
- */
-struct rfc5444_signature_key {
-  /*! hash function id */
-  uint8_t hash_function;
-
-  /*! crypto function id */
-  uint8_t crypt_function;
-};
-
-/**
- * results for signature id check
- */
-enum rfc5444_sigid_check
-{
-  /*! signature id is okay */
-  RFC5444_SIGID_OKAY,
-
-  /*! ignore signature id */
-  RFC5444_SIGID_IGNORE,
-
-  /*! drop signature */
-  RFC5444_SIGID_DROP,
-};
-
-/**
- * object representing a registered signature
- */
-struct rfc5444_signature {
-  /*! data that makes the unique key of a signature */
-  struct rfc5444_signature_key key;
-
-  /*! true if signature is source specific */
-  bool source_specific;
-
-  /**
-   * function to check key_id field of incoming signatures
-   * @param sig this rfc5444 signature
-   * @param id pointer to key id
-   * @param len length of key id
-   * @return okay, ignore or drop
-   */
-  enum rfc5444_sigid_check (*verify_id)(struct rfc5444_signature *sig, const void *id, size_t len);
-
-  /**
-   * checks if signature applies to a message/packet
-   * @param sig this rfc5444 signature
-   * @param msg_type rfc5444 message type, -1 for packet signature
-   * @return true if signature applies to message type, false otherwise
-   */
-  bool (*is_matching_signature)(struct rfc5444_signature *sig, int msg_type);
-
-  /**
-   * @param sig this rfc5444 signature
-   * @param length pointer to length field for crypto key length
-   * @return pointer to crypto key
-   */
-  const void *(*getCryptoKey)(struct rfc5444_signature *sig, size_t *length);
-
-  /**
-   * @param sig this rfc5444 signature
-   * @param length pointer to length field for key-id length
-   * @return pointer to key-id
-   */
-  const void *(*getKeyId)(struct rfc5444_signature *sig, size_t *length);
-
-  /*! true if message/packet should be dropped if signature is invalid */
-  bool drop_if_invalid;
-
-  /* the following data will be filled by the API */
-
-  /*! source IP address of packet to be signed/checked */
-  const struct netaddr *source;
-
-  /*! pointer to cryptographic hash of signature */
-  struct rfc7182_hash *hash;
-
-  /*! pointer to cryptographic function of signature */
-  struct rfc7182_crypt *crypt;
-
-  /*! true if signature has been validated */
-  bool verified;
-
-  /*! true if signature is essential for the current check */
-  bool _must_be_verified;
-
-  /*! rfc5444 postprocessor to add the signature */
-  struct rfc5444_writer_postprocessor _postprocessor;
-
-  /*! hook into the registered signature tree */
-  struct avl_node _node;
-};
-
-/*! subsystem identifier */
-#define OONF_RFC5444_SIG_SUBSYSTEM "rfc5444_sig"
-
-EXPORT void rfc5444_sig_add(struct rfc5444_signature *sig);
-EXPORT void rfc5444_sig_remove(struct rfc5444_signature *sig);
-
-#endif /* RFC5444_SIGNATURE_H_ */
diff --git a/include/oonf/crypto/rfc7182_provider/rfc7182_provider.h b/include/oonf/crypto/rfc7182_provider/rfc7182_provider.h
deleted file mode 100644 (file)
index f6165c8..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon version 2 (olsrd2)
- * Copyright (c) 2004-2015, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in
- *   the documentation and/or other materials provided with the
- *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its
- *   contributors may be used to endorse or promote products derived
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-/**
- * @file
- */
-
-#ifndef RFC7182_PROVIDER_H_
-#define RFC7182_PROVIDER_H_
-
-#include <oonf/libcommon/avl.h>
-#include <oonf/oonf.h>
-
-/**
- * representation of a hash function for signatures
- */
-struct rfc7182_hash {
-  /*! RFC7182 hash id */
-  uint8_t type;
-
-  /*! might be used as additional information for the crypto algorithm */
-  size_t hash_length;
-
-  /**
-   * Callback for a hash function
-   * @param hash pointer to this definition
-   * @param dst output buffer for signature
-   * @param dst_len pointer to length of output buffer,
-   *   will be set to signature length afterwards
-   * @param src unsigned original data
-   * @param src_len length of original data
-   * @return -1 if an error happened, 0 otherwise
-   */
-  int (*hash)(struct rfc7182_hash *hash, void *dst, size_t *dst_len, const void *src, size_t src_len);
-
-  /*! hook into the tree of registered hashes */
-  struct avl_node _node;
-};
-
-/**
- * representation of a crypto function for signatures
- */
-struct rfc7182_crypt {
-  /*! RFC7182 crypto ID */
-  uint8_t type;
-
-  /**
-   * @param crypt this definition
-   * @param hash hash function
-   * @param src_len length of source data
-   * @return the maximum number of bytes for the signature
-   */
-  size_t (*getSignSize)(struct rfc7182_crypt *crypt, struct rfc7182_hash *hash);
-
-  /**
-   * Creates a cryptographic signature for a data block. The crypto
-   * function normally uses the hash function
-   * before creating the signature.
-   * @param crypt this crypto definition
-   * @param hash the definition of the hash
-   * @param dst output buffer for cryptographic signature
-   * @param dst_len pointer to length of output buffer, will be set to
-   *   length of signature afterwards
-   * @param src unsigned original data
-   * @param src_len length of original data
-   * @param key key material for signature
-   * @param key_len length of key material
-   * @return -1 if an error happened, 0 otherwise
-   */
-  int (*sign)(struct rfc7182_crypt *crypt, struct rfc7182_hash *hash, void *dst, size_t *dst_len, const void *src,
-    size_t src_len, const void *key, size_t key_len);
-
-  /**
-   * Checks if an encrypted signature is valid.
-   * @param crypt this crypto definition
-   * @param hash the definition of the hash
-   * @param encrypted pointer to encrypted signature
-   * @param encrypted_length length of encrypted signature
-   * @param src unsigned original data
-   * @param src_len length of original data
-   * @param key key material for signature
-   * @param key_len length of key material
-   * @return true if signature matches, false otherwise
-   */
-  bool (*validate)(struct rfc7182_crypt *crypt, struct rfc7182_hash *hash, const void *encrypted,
-    size_t encrypted_length, const void *src, size_t src_len, const void *key, size_t key_len);
-
-  /**
-   * Encrypts a data block.
-   * @param crypt this crypto definition
-   * @param dst output buffer for encrypted data
-   * @param dst_len pointer to length of output buffer, will be set to
-   *   length of encrypted data afterwards
-   * @param src unsigned original data
-   * @param src_len length of original data
-   * @param key key material for encryption
-   * @param key_len length of key material
-   * @return -1 if an error happened, 0 otherwise
-   */
-  int (*encrypt)(struct rfc7182_crypt *crypt, void *dst, size_t *dst_len, const void *src, size_t src_len,
-    const void *key, size_t key_len);
-
-  /**
-   * Decrypts a data block.
-   * @param crypt this crypto definition
-   * @param dst output buffer for decrypted data
-   * @param dst_len pointer to length of output buffer, will be set to
-   *   length of decrypted data afterwards
-   * @param src unsigned original data
-   * @param src_len length of original data
-   * @param key key material for decryption
-   * @param key_len length of key material
-   * @return -1 if an error happened, 0 otherwise
-   */
-  int (*decrypt)(struct rfc7182_crypt *crypt, void *dst, size_t *dst_len, const void *src, size_t src_len,
-    const void *key, size_t key_len);
-
-  /*! hook into the tree of registered crypto functions */
-  struct avl_node _node;
-};
-
-/*! subsystem identifier */
-#define OONF_RFC7182_PROVIDER_SUBSYSTEM "rfc7182_provider"
-
-/*! rfc7182 hash class identifier */
-#define OONF_RFC7182_HASH_CLASS "rfc7182_hash"
-
-/*! rfc7182 crypto class identifier */
-#define OONF_RFC7182_CRYPTO_CLASS "rfc7182_crypto"
-
-EXPORT void rfc7182_add_hash(struct rfc7182_hash *);
-EXPORT void rfc7182_remove_hash(struct rfc7182_hash *);
-EXPORT struct avl_tree *rfc7182_get_hash_tree(void);
-
-EXPORT void rfc7182_add_crypt(struct rfc7182_crypt *);
-EXPORT void rfc7182_remove_crypt(struct rfc7182_crypt *);
-EXPORT struct avl_tree *rfc7182_get_crypt_tree(void);
-
-/**
- * @param id RFC7182 hash id
- * @return hash provider, NULL if unregistered id
- */
-static INLINE struct rfc7182_hash *
-rfc7182_get_hash(uint8_t id) {
-  struct rfc7182_hash *hash;
-  return avl_find_element(rfc7182_get_hash_tree(), &id, hash, _node);
-}
-
-/**
- * @param id RDC7182 crypto id
- * @return crypto provider, NULL if unregistered id
- */
-static INLINE struct rfc7182_crypt *
-rfc7182_get_crypt(uint8_t id) {
-  struct rfc7182_crypt *crypt;
-  return avl_find_element(rfc7182_get_crypt_tree(), &id, crypt, _node);
-}
-#endif /* RFC7182_PROVIDER_H_ */
diff --git a/include/oonf/crypto/sharedkey_sig/sharedkey_sig.h b/include/oonf/crypto/sharedkey_sig/sharedkey_sig.h
deleted file mode 100644 (file)
index 35bc50d..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon version 2 (olsrd2)
- * Copyright (c) 2004-2015, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in
- *   the documentation and/or other materials provided with the
- *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its
- *   contributors may be used to endorse or promote products derived
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-/**
- * @file
- */
-
-#ifndef SHAREDKEY_SIG_H
-#define SHAREDKEY_SIG_H
-
-/*! subsystem identifier */
-#define OONF_SHAREDKEY_SIG_SUBSYSTEM "sharedkey_sig"
-
-#endif /* SHAREDKEY_SIG_H */
diff --git a/include/oonf/crypto/simple_security/simple_security.h b/include/oonf/crypto/simple_security/simple_security.h
deleted file mode 100644 (file)
index aab7af4..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-
-/*
- * The olsr.org Optimized Link-State Routing daemon version 2 (olsrd2)
- * Copyright (c) 2004-2015, the olsr.org team - see HISTORY file
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in
- *   the documentation and/or other materials provided with the
- *   distribution.
- * * Neither the name of olsr.org, olsrd nor the names of its
- *   contributors may be used to endorse or promote products derived
- *   from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * Visit http://www.olsr.org for more information.
- *
- * If you find this software useful feel free to make a donation
- * to the project. For more information see the website or contact
- * the copyright holders.
- *
- */
-
-/**
- * @file
- */
-
-#ifndef SIMPLE_SECURITY_H_
-#define SIMPLE_SECURITY_H_
-
-/*! subsystem identifier */
-#define OONF_SIMPLE_SECURITY_SUBSYSTEM "simple_security"
-
-/**
- * Extra RFC5444 TLVs defined by this subsystem
- */
-enum
-{
-  /*! packet TLV */
-  RFC5444_PKTTLV_CHALLENGE = 224, //!< RFC5444_PKTTLV_CHALLENGE
-
-  /*! challenge QUERY TLV */
-  RFC5444_CHALLENGE_QUERY = 1, //!< RFC5444_CHALLENGE_QUERY
-
-  /*! challenge RESPONSE TLV */
-  RFC5444_CHALLENGE_RESPONSE = 2, //!< RFC5444_CHALLENGE_RESPONSE
-};
-
-#endif /* SIMPLE_SECURITY_H_ */
index 38c54cd..8a9b6f8 100644 (file)
@@ -104,6 +104,9 @@ EXPORT size_t str_countwords(const char *src);
 
 EXPORT bool str_is_printable(const char *value);
 
+EXPORT ssize_t strhex_from_bin(char *buffer, size_t buffer_len, const uint8_t *src, size_t srclen);
+EXPORT ssize_t strhex_to_bin(uint8_t *buffer, size_t buffer_len, const char *src);
+
 EXPORT int strarray_copy(struct strarray *dst, const struct strarray *src);
 EXPORT int strarray_append(struct strarray *, const char *);
 EXPORT int strarray_prepend(struct strarray *array, const char *string);
index 36ec962..65074be 100644 (file)
@@ -49,6 +49,8 @@
 #include <oonf/libcommon/json.h>
 #include <oonf/libcommon/netaddr.h>
 #include <oonf/libconfig/cfg_schema.h>
+#include <oonf/libconfig/cfg_validate.h>
+#include <oonf/libconfig/cfg_help.h>
 #include <oonf/libcore/oonf_subsystem.h>
 #include <oonf/base/oonf_class.h>
 #include <oonf/base/os_interface.h>
@@ -1274,6 +1276,75 @@ oonf_layer2_cfg_get_l2comp(size_t idx, const void *unused __attribute__((unused)
 }
 
 /**
+ * Schema entry validator for network addresses and prefixes.
+ * See CFG_VALIDATE_LAYER2_NEIGH_MAC_LID() macros in oonf_layer2.h
+ * @param entry pointer to schema entry
+ * @param section_name name of section type and name
+ * @param value value of schema entry
+ * @param out pointer to autobuffer for validator output
+ * @return 0 if validation found no problems, -1 otherwise
+ */
+int
+oonf_layer2_validate_mac_lid(const struct cfg_schema_entry *entry,
+    const char *section_name, const char *value, struct autobuf *out) {
+  struct oonf_layer2_neigh_key key;
+  int result;
+
+  result = oonf_layer2_neigh_key_from_string(&key, value);
+  switch (result) {
+    case -1:
+      cfg_append_printable_line(out,
+          "Address '%s' for entry '%s' in section %s is too long",
+          value, entry->key.entry, section_name);
+      break;
+    case -2:
+      cfg_append_printable_line(out,
+          "Link-id '%s' for entry '%s' in section %s is not hexadecimal or too long",
+          value, entry->key.entry, section_name);
+      break;
+    case -3:
+      cfg_append_printable_line(out,
+          "Address '%s' for entry '%s' in section %s is not a valid address",
+          value, entry->key.entry, section_name);
+      break;
+    case -4:
+      cfg_append_printable_line(out,
+          "Address '%s' for entry '%s' in section %s is not MAC48 or EUI64",
+          value, entry->key.entry, section_name);
+      break;
+    default:
+      return 0;
+  }
+  return -1;
+}
+
+
+void
+oonf_layer2_help_mac_lid(const struct cfg_schema_entry *entry __attribute__((unused)), struct autobuf *out) {
+  static const int8_t AF_TYPES[] = { AF_MAC48, AF_EUI64 };
+  cfg_help_netaddr(out, true, false, AF_TYPES, ARRAYSIZE(AF_TYPES));
+  abuf_puts(out, CFG_HELP_INDENT_PREFIX "The parameter can also have an optional link id at the end,\n"
+                 CFG_HELP_INDENT_PREFIX "a hexadecimal string separated by a ',' from the address in front of it.\n");
+}
+/**
+ * Binary converter for layer2 neighbor keys including lid.
+ * See CFG_MAP_LAYER2_NEIGH_MAC_LID() macro in oonf_layer2.h
+ * @param s_entry pointer to configuration entry schema.
+ * @param value pointer to value of configuration entry.
+ * @param reference pointer to binary output buffer.
+ * @return 0 if conversion succeeded, -1 otherwise.
+ */
+int
+oonf_layer2_tobin_mac_lid(const struct cfg_schema_entry *s_entry, const struct const_strarray *value, void *reference) {
+  if (s_entry->list) {
+    /* we don't support direct list conversion to binary */
+    return -1;
+  }
+  return oonf_layer2_neigh_key_from_string(reference, strarray_get_first_c(value));
+}
+
+
+/**
  * get text representation of network type
  * @param type network type
  * @return text representation
@@ -1325,9 +1396,8 @@ oonf_layer2_avlcmp_neigh_key(const void *p1, const void *p2) {
 const char *
 oonf_layer2_neigh_key_to_string(union oonf_layer2_neigh_key_str *buf,
     const struct oonf_layer2_neigh_key *key, bool show_mac) {
-  static const char HEX[17] = "0123456789ABCDEF";
   static const char NONE[] = "-";
-  size_t str_idx, lid_idx;
+  size_t str_idx;
   uint8_t af;
 
   if (key == NULL) {
@@ -1351,26 +1421,60 @@ oonf_layer2_neigh_key_to_string(union oonf_layer2_neigh_key_str *buf,
   }
 
   str_idx = strlen(buf->buf);
-  lid_idx = 0;
 
   if (show_mac) {
-    buf->buf[str_idx++] = ' ';
-    buf->buf[str_idx++] = '[';
-    buf->buf[str_idx++] = '0';
-    buf->buf[str_idx++] = 'x';
+    buf->buf[str_idx++] = ',';
+  }
+
+  strhex_from_bin(&buf->buf[str_idx], sizeof(*buf) - str_idx, key->link_id, key->link_id_length);
+  return buf->buf;
+}
+
+/**
+ * Creates a layer2 neighbor key from a string.
+ * @param key neighbor key
+ * @param string string representation of neighbor key
+ * @return negative if an error happened, 0 if everything is fine
+ */
+int
+oonf_layer2_neigh_key_from_string(struct oonf_layer2_neigh_key *key, const char *string) {
+  struct netaddr_str nbuf;
+  const char *split, *addr;
+  ssize_t len;
+
+  memset(key, 0, sizeof(*key));
+  split = strchr(string, ',');
+
+  if (!split) {
+    addr = string;
   }
+  else {
+    len = split - string;
+    if (len > (ssize_t)(sizeof(nbuf))) {
+      return -1;
+    }
+
+    strscpy(nbuf.buf, string, len+1);
+    addr = nbuf.buf;
 
-  while (str_idx + 4 < sizeof(*buf) && lid_idx < key->link_id_length) {
-    buf->buf[str_idx++] = HEX[key->link_id[lid_idx] >> 4];
-    buf->buf[str_idx++] = HEX[key->link_id[lid_idx] & 15];
-    lid_idx++;
+    split++;
+    len = strhex_to_bin(key->link_id, sizeof(key->link_id), split);
+    if (len < 0) {
+      return -2;
+    }
+    key->link_id_length = len;
   }
 
-  if (show_mac) {
-    buf->buf[str_idx++] = ']';
-    buf->buf[str_idx++] = 0;
+  if (netaddr_from_string(&key->addr, addr)) {
+    netaddr_invalidate(&key->addr);
+    return -3;
   }
-  return buf->buf;
+  if (netaddr_get_address_family(&key->addr) != AF_MAC48
+      && netaddr_get_address_family(&key->addr) != AF_EUI64) {
+    netaddr_invalidate(&key->addr);
+    return -4;
+  }
+  return 0;
 }
 
 /**
index eeeddb2..4c0c44f 100644 (file)
@@ -80,7 +80,7 @@ enum l2_data_type
 /* one layer2 configuration option for an interface */
 struct l2_config_data {
   enum l2_data_type config_type;
-  struct netaddr mac;
+  struct oonf_layer2_neigh_key key;
 
   int data_idx;
 
@@ -126,29 +126,29 @@ static void _cb_config_changed(void);
 
 /*! configuration for linkdata */
 static struct cfg_schema_entry _l2net_entries[] = {
-  CFG_MAP_CHOICE_L2NET(l2_config_data, data_idx, "l2net_key", "", "Layer2 network key for configuration"),
+  CFG_MAP_CHOICE_L2NET_DATA_KEY(l2_config_data, data_idx, "l2net_key", "", "Layer2 network key for configuration"),
   CFG_MAP_STRING_ARRAY(l2_config_data, txt_value, "l2net_value", "", "Layer2 network value", _MAX_L2_VALUE_LEN),
   CFG_MAP_BOOL(l2_config_data, overwrite, "l2net_overwrite", "false", "Layer2 overwrite priority"),
 };
 static struct cfg_schema_entry _l2net_def_entries[] = {
-  CFG_MAP_CHOICE_L2NEIGH(l2_config_data, data_idx, "l2neigh_key", "", "Layer2 neighbor key for configuration"),
+  CFG_MAP_CHOICE_L2NEIGH_DATA_KEY(l2_config_data, data_idx, "l2neigh_key", "", "Layer2 neighbor key for configuration"),
   CFG_MAP_STRING_ARRAY(
     l2_config_data, txt_value, "l2neigh_value", "", "Layer2 neighbor value for default neighbor data", _MAX_L2_VALUE_LEN),
   CFG_MAP_BOOL(l2_config_data, overwrite, "l2net_overwrite", "false", "Layer2 overwrite priority"),
 };
 static struct cfg_schema_entry _l2neigh_entries[] = {
-  CFG_MAP_CHOICE_L2NEIGH(l2_config_data, data_idx, "l2neigh_key", "", "Layer2 neighbor key for configuration"),
+  CFG_MAP_CHOICE_L2NEIGH_DATA_KEY(l2_config_data, data_idx, "l2neigh_key", "", "Layer2 neighbor key for configuration"),
   CFG_MAP_STRING_ARRAY(l2_config_data, txt_value, "l2neigh_value", "", "Layer2 neighbor value", _MAX_L2_VALUE_LEN),
-  CFG_MAP_NETADDR_MAC48(l2_config_data, mac, "l2neigh_mac", "", "MAC address of neighbor", false, false),
+  CFG_MAP_LAYER2_NEIGH_MAC_LID (l2_config_data, key, "l2neigh_mac", "", "MAC address of neighbor including LID"),
   CFG_MAP_BOOL(l2_config_data, overwrite, "l2net_overwrite", "false", "Layer2 overwrite priority"),
 };
 static struct cfg_schema_entry _l2neigh_ip_entries[] = {
-  CFG_MAP_NETADDR_MAC48(l2_config_data, mac, "l2neigh_mac", "", "MAC address of neighbor", false, false),
+  CFG_MAP_LAYER2_NEIGH_MAC_LID (l2_config_data, key, "l2neigh_mac", "", "MAC address of neighbor including LID"),
   CFG_MAP_NETADDR_V46(l2_config_data, data.addr, "l2neigh_ip", "", "IP address to neighbor", false, false),
   CFG_MAP_BOOL(l2_config_data, overwrite, "l2net_overwrite", "false", "Layer2 overwrite priority"),
 };
 static struct cfg_schema_entry _l2neigh_dst_entries[] = {
-  CFG_MAP_NETADDR_MAC48(l2_config_data, mac, "l2neigh_mac", "", "MAC address of neighbor", false, false),
+  CFG_MAP_LAYER2_NEIGH_MAC_LID (l2_config_data, key, "l2neigh_mac", "", "MAC address of neighbor including LID"),
   CFG_MAP_NETADDR_MAC48(
     l2_config_data, data.addr, "l2neigh_dst", "", "Secondary MAC address of neighbor", false, false),
   CFG_MAP_BOOL(l2_config_data, overwrite, "l2net_overwrite", "false", "Layer2 overwrite priority"),
@@ -511,7 +511,6 @@ _configure_if_data(struct l2_config_if_data *if_data) {
   struct oonf_layer2_neigh *l2neigh;
   struct oonf_layer2_net *l2net;
   struct l2_config_data *entry;
-  struct oonf_layer2_neigh_key key;
   struct oonf_layer2_origin *origin;
   size_t i;
 
@@ -545,22 +544,20 @@ _configure_if_data(struct l2_config_if_data *if_data) {
                                oonf_layer2_neigh_metadata_get(entry->data_idx), &entry->data);
           break;
         case L2_NEIGH:
-          memset(&key, 0, sizeof(key));
-          memcpy(&key.addr, &entry->mac, sizeof(key.addr));
-          l2neigh = oonf_layer2_neigh_add_lid(l2net, &key);
+          l2neigh = oonf_layer2_neigh_add_lid(l2net, &entry->key);
           if (l2neigh) {
             oonf_layer2_data_set(&l2neigh->data[entry->data_idx], origin,
                                  oonf_layer2_neigh_metadata_get(entry->data_idx), &entry->data);
           }
           break;
         case L2_NEIGH_IP:
-          l2neigh = oonf_layer2_neigh_add(l2net, &entry->mac);
+          l2neigh = oonf_layer2_neigh_add_lid(l2net, &entry->key);
           if (l2neigh) {
             oonf_layer2_neigh_add_ip(l2neigh, origin, &entry->data.addr);
           }
           break;
         case L2_DST:
-          l2neigh = oonf_layer2_neigh_add(l2net, &entry->mac);
+          l2neigh = oonf_layer2_neigh_add_lid(l2net, &entry->key);
           if (l2neigh) {
             oonf_layer2_destination_add(l2neigh, &entry->data.addr, origin);
           }
index 0a186de..478e103 100644 (file)
@@ -51,6 +51,7 @@
 
 #include <oonf/libcommon/string.h>
 
+static int8_t _hexchar_to_value(char hexchar);
 /**
  * @param size minimum size of block
  * @return rounded up block size of STRARRAY_BLOCKSIZE
@@ -301,6 +302,58 @@ str_is_printable(const char *value) {
 }
 
 /**
+ * Converts a binary array to a zero terminated hexadecimal text
+ * @param buffer target buffer
+ * @param buffer_len length of target buffer
+ * @param src binary source
+ * @param src_len length of binary source
+ * @return -1 if an error happened, length of string otherwise
+ */
+ssize_t
+strhex_from_bin(char *buffer, size_t buffer_len, const uint8_t *src, size_t src_len) {
+  static char HEX[] = "0123456789abcdef";
+  size_t i, j;
+  if (buffer_len < src_len*2+1) {
+    return -1;
+  }
+
+  for (i=0, j=0; i<src_len; i++) {
+    buffer[j++] = HEX[src[i] >> 4];
+    buffer[j++] = HEX[src[i] & 0x0f];
+  }
+  buffer[j] = 0;
+  return j;
+}
+
+/**
+ * Converts a hexadecimal text without any whitespaces to a binary representation
+ * @param buffer target binary buffer
+ * @param buffer_len length of binary buffer
+ * @param src hexadecimal text input
+ * @return -1 if an error happened, length of binary buffer otherwise
+ */
+ssize_t
+strhex_to_bin(uint8_t *buffer, size_t buffer_len, const char *src) {
+  size_t srclen, i, j;
+  int8_t v1, v2;
+  srclen = strlen(src);
+  if ((srclen & 1) != 0 || buffer_len < srclen/2) {
+    return -1;
+  }
+
+  for (i=0, j=0; i<srclen; j++) {
+    v1 = _hexchar_to_value(src[i++]);
+    v2 = _hexchar_to_value(src[i++]);
+
+    if (v1 < 0 || v2 < 0) {
+      return -1;
+    }
+    buffer[j] = (v1 << 4) | v2;
+  }
+  return j;
+}
+
+/**
  * Copy a string array into another array. This overwrites
  * all data in the original array.
  * @param dst destination array
@@ -494,3 +547,26 @@ strarray_cmp(const struct strarray *a1, const struct strarray *a2) {
   }
   return result;
 }
+
+/**
+* convert a hexadecimal character (0-9, a-f, A-F) to its decimal value
+* @param hexchar hexadecimal character
+* @return decimal value, -1 if not hexadecimal
+*/
+static int8_t
+_hexchar_to_value(char hexchar) {
+  static char HEX[] = "0123456789abcdefABCDEF";
+  const char *ptr;
+  int8_t value;
+
+  ptr = strchr(HEX, hexchar);
+  if (!ptr) {
+    return -1;
+  }
+
+  value = ptr - HEX;
+  if (value >= 16) {
+    value -= 6;
+  }
+  return value;
+}
index 1ea9fc5..d04feed 100644 (file)
@@ -46,8 +46,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-#include <oonf/libcommon/autobuf.h>
 #include <oonf/oonf.h>
+#include <oonf/libcommon/autobuf.h>
 #include <oonf/libcommon/string.h>
 #include <oonf/libcommon/template.h>