Fix return values of DLEP signal processing callbacks
authorHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Wed, 11 Apr 2018 11:50:24 +0000 (13:50 +0200)
committerHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Wed, 11 Apr 2018 11:50:24 +0000 (13:50 +0200)
src-plugins/generic/dlep/dlep_extension.c
src-plugins/generic/dlep/dlep_extension.h
src-plugins/generic/dlep/ext_base_proto/proto_radio.c
src-plugins/generic/dlep/ext_base_proto/proto_router.c
src-plugins/generic/dlep/ext_l1_statistics/l1_statistics.c

index 1e8c7d4..fde29a6 100644 (file)
@@ -170,11 +170,11 @@ dlep_extension_get_ids(uint16_t *length) {
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-int
+enum dlep_parser_error
 dlep_extension_router_process_session_init_ack(struct dlep_extension *ext, struct dlep_session *session) {
   if (session->restrict_signal != DLEP_SESSION_INITIALIZATION_ACK) {
     /* ignore unless we are in initialization mode */
-    return 0;
+    return DLEP_NEW_PARSER_OKAY;
   }
   return _process_interface_specific_update(ext, session);
 }
@@ -186,11 +186,11 @@ dlep_extension_router_process_session_init_ack(struct dlep_extension *ext, struc
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-int
+enum dlep_parser_error
 dlep_extension_router_process_session_update(struct dlep_extension *ext, struct dlep_session *session) {
   if (session->restrict_signal != DLEP_ALL_SIGNALS) {
     /* ignore unless we have an established session */
-    return 0;
+    return DLEP_NEW_PARSER_OKAY;
   }
 
   return _process_interface_specific_update(ext, session);
@@ -239,27 +239,27 @@ dlep_extension_get_l2_neighbor(struct dlep_session *session) {
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-int
+enum dlep_parser_error
 dlep_extension_router_process_destination(struct dlep_extension *ext, struct dlep_session *session) {
   struct oonf_layer2_neigh *l2neigh;
-  int result;
+  enum dlep_parser_error result;
 
   if (session->restrict_signal != DLEP_ALL_SIGNALS) {
     /* ignore unless we have an established session */
-    return 0;
+    return DLEP_NEW_PARSER_OKAY;
   }
 
   l2neigh = dlep_extension_get_l2_neighbor(session);
   if (!l2neigh) {
-    return 0;
+    return DLEP_NEW_PARSER_OKAY;
   }
 
   result = dlep_reader_map_l2neigh_data(l2neigh->data, session, ext);
   if (result) {
     OONF_INFO(session->log_source, "tlv mapping for extension %d failed: %d", ext->id, result);
-    return result;
+    return DLEP_NEW_PARSER_UNSUPPORTED_TLV;
   }
-  return 0;
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -411,7 +411,7 @@ dlep_extension_radio_write_destination(
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _process_interface_specific_update(struct dlep_extension *ext, struct dlep_session *session) {
   struct oonf_layer2_net *l2net;
   int result;
@@ -419,19 +419,19 @@ _process_interface_specific_update(struct dlep_extension *ext, struct dlep_sessi
   l2net = oonf_layer2_net_add(session->l2_listener.name);
   if (!l2net) {
     OONF_INFO(session->log_source, "Could not add l2net for new interface");
-    return -1;
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
   }
 
   result = dlep_reader_map_l2neigh_data(l2net->neighdata, session, ext);
   if (result) {
     OONF_INFO(session->log_source, "tlv mapping for extension %d failed: %d", ext->id, result);
-    return result;
+    return DLEP_NEW_PARSER_UNSUPPORTED_TLV;
   }
 
   result = dlep_reader_map_l2net_data(l2net->data, session, ext);
   if (result) {
     OONF_INFO(session->log_source, "tlv mapping for extension %d failed: %d", ext->id, result);
-    return result;
+    return DLEP_NEW_PARSER_UNSUPPORTED_TLV;
   }
-  return 0;
+  return DLEP_NEW_PARSER_OKAY;
 }
index 66687a9..2c2ccee 100644 (file)
@@ -352,9 +352,9 @@ EXPORT const uint16_t *dlep_extension_get_ids(uint16_t *length);
 EXPORT int dlep_extension_get_l2_neighbor_key(struct oonf_layer2_neigh_key *key, struct dlep_session *session);
 EXPORT struct oonf_layer2_neigh *dlep_extension_get_l2_neighbor(struct dlep_session *session);
 
-EXPORT int dlep_extension_router_process_session_init_ack(struct dlep_extension *, struct dlep_session *session);
-EXPORT int dlep_extension_router_process_session_update(struct dlep_extension *, struct dlep_session *session);
-EXPORT int dlep_extension_router_process_destination(struct dlep_extension *, struct dlep_session *session);
+EXPORT enum dlep_parser_error dlep_extension_router_process_session_init_ack(struct dlep_extension *, struct dlep_session *session);
+EXPORT enum dlep_parser_error dlep_extension_router_process_session_update(struct dlep_extension *, struct dlep_session *session);
+EXPORT enum dlep_parser_error dlep_extension_router_process_destination(struct dlep_extension *, struct dlep_session *session);
 EXPORT int dlep_extension_radio_write_session_init_ack(
   struct dlep_extension *ext, struct dlep_session *session, const struct oonf_layer2_neigh_key *neigh);
 EXPORT int dlep_extension_radio_write_session_update(
index 5beb2b0..73db80b 100644 (file)
 static void _cb_init_radio(struct dlep_session *);
 static void _cb_cleanup_radio(struct dlep_session *);
 
-static int _radio_process_peer_discovery(struct dlep_extension *, struct dlep_session *);
-static int _radio_process_session_init(struct dlep_extension *, struct dlep_session *);
-static int _radio_process_session_update(struct dlep_extension *, struct dlep_session *);
-static int _radio_process_session_update_ack(struct dlep_extension *, struct dlep_session *);
-static int _radio_process_destination_up_ack(struct dlep_extension *, struct dlep_session *);
-static int _radio_process_destination_down_ack(struct dlep_extension *, struct dlep_session *);
-static int _radio_process_link_char_request(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _radio_process_peer_discovery(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _radio_process_session_init(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _radio_process_session_update(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _radio_process_session_update_ack(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _radio_process_destination_up_ack(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _radio_process_destination_down_ack(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _radio_process_link_char_request(struct dlep_extension *, struct dlep_session *);
 
 static int _radio_write_peer_offer(struct dlep_extension *, struct dlep_session *session, const struct oonf_layer2_neigh_key *);
 static int _radio_write_session_init_ack(struct dlep_extension *, struct dlep_session *session, const struct oonf_layer2_neigh_key *);
@@ -230,13 +230,16 @@ _cb_cleanup_radio(struct dlep_session *session) {
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _radio_process_peer_discovery(struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session) {
   if (session->restrict_signal != DLEP_UDP_PEER_DISCOVERY) {
     /* ignore unless we are in discovery mode */
-    return 0;
+    return DLEP_NEW_PARSER_OKAY;
   }
-  return dlep_session_generate_signal(session, DLEP_UDP_PEER_OFFER, NULL);
+  if (dlep_session_generate_signal(session, DLEP_UDP_PEER_OFFER, NULL)) {
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
+  }
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -245,7 +248,7 @@ _radio_process_peer_discovery(struct dlep_extension *ext __attribute__((unused))
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _radio_process_session_init(struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session) {
   struct oonf_layer2_net *l2net;
   struct oonf_layer2_neigh *l2neigh;
@@ -261,13 +264,13 @@ _radio_process_session_init(struct dlep_extension *ext __attribute__((unused)),
 
   if (session->restrict_signal != DLEP_SESSION_INITIALIZATION) {
     /* ignore unless we are in initialization mode */
-    return 0;
+    return DLEP_NEW_PARSER_OKAY;
   }
 
   /* mandatory heartbeat tlv */
   if (dlep_reader_heartbeat_tlv(&session->remote_heartbeat_interval, session, NULL)) {
     OONF_INFO(session->log_source, "no heartbeat tlv");
-    return -1;
+    return DLEP_NEW_PARSER_MISSING_MANDATORY_TLV;
   }
 
   OONF_DEBUG(session->log_source, "Remote heartbeat interval %" PRIu64, session->remote_heartbeat_interval);
@@ -283,15 +286,15 @@ _radio_process_session_init(struct dlep_extension *ext __attribute__((unused)),
   if (value) {
     ptr = dlep_session_get_tlv_binary(session, value);
     if (dlep_session_update_extensions(session, ptr, value->length / 2, true)) {
-      return -1;
+      return DLEP_NEW_PARSER_INTERNAL_ERROR;
     }
   }
   else if (dlep_session_update_extensions(session, NULL, 0, true)) {
-    return -1;
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
   }
 
   if (dlep_session_generate_signal(session, DLEP_SESSION_INITIALIZATION_ACK, NULL)) {
-    return -1;
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
   }
 
   /* trigger DESTINATION UP for all existing elements in l2 db */
@@ -317,7 +320,7 @@ _radio_process_session_init(struct dlep_extension *ext __attribute__((unused)),
   }
   session->next_restrict_signal = DLEP_ALL_SIGNALS;
   session->_peer_state = DLEP_PEER_IDLE;
-  return 0;
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -326,10 +329,13 @@ _radio_process_session_init(struct dlep_extension *ext __attribute__((unused)),
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _radio_process_session_update(struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session) {
   /* we don't support IP address exchange with the router at the moment */
-  return dlep_session_generate_signal_status(session, DLEP_SESSION_UPDATE_ACK, NULL, DLEP_STATUS_OKAY, "Success");
+  if (dlep_session_generate_signal_status(session, DLEP_SESSION_UPDATE_ACK, NULL, DLEP_STATUS_OKAY, "Success")) {
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
+  }
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -344,14 +350,14 @@ _radio_process_session_update_ack(struct dlep_extension *ext __attribute__((unus
   if (session->_peer_state == DLEP_PEER_SEND_UPDATE) {
     if (dlep_session_generate_signal(session, DLEP_SESSION_UPDATE, NULL)) {
       // TODO: do we need to terminate here?
-      return -1;
+      return DLEP_NEW_PARSER_INTERNAL_ERROR;
     }
     session->_peer_state = DLEP_PEER_WAIT_FOR_UPDATE_ACK;
   }
   else {
     session->_peer_state = DLEP_PEER_IDLE;
   }
-  return 0;
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -360,13 +366,13 @@ _radio_process_session_update_ack(struct dlep_extension *ext __attribute__((unus
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _radio_process_destination_up_ack(struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session) {
   struct dlep_local_neighbor *local;
   struct oonf_layer2_neigh_key mac_lid;
 
   if (dlep_extension_get_l2_neighbor_key(&mac_lid, session)) {
-    return -1;
+    return DLEP_NEW_PARSER_UNSUPPORTED_TLV;
   }
 
   if (dlep_base_proto_print_status(session) == DLEP_STATUS_OKAY) {
@@ -381,7 +387,7 @@ _radio_process_destination_up_ack(struct dlep_extension *ext __attribute__((unus
       }
     }
   }
-  return 0;
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -390,13 +396,13 @@ _radio_process_destination_up_ack(struct dlep_extension *ext __attribute__((unus
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _radio_process_destination_down_ack(struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session) {
   struct dlep_local_neighbor *local;
   struct oonf_layer2_neigh_key mac_lid;
 
   if (dlep_extension_get_l2_neighbor_key(&mac_lid, session)) {
-    return -1;
+    return -DLEP_NEW_PARSER_UNSUPPORTED_TLV;
   }
 
   if (dlep_base_proto_print_status(session) == DLEP_STATUS_OKAY) {
@@ -405,7 +411,7 @@ _radio_process_destination_down_ack(struct dlep_extension *ext __attribute__((un
       dlep_session_remove_local_neighbor(session, local);
     }
   }
-  return 0;
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -414,11 +420,11 @@ _radio_process_destination_down_ack(struct dlep_extension *ext __attribute__((un
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _radio_process_link_char_request(
   struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session __attribute__((unused))) {
   /* TODO: Link characteristic processing ? */
-  return 0;
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
index e2eaa98..aeaa420 100644 (file)
@@ -63,16 +63,16 @@ static void _cb_apply_router(struct dlep_session *);
 static void _cb_cleanup_router(struct dlep_session *);
 static void _cb_create_peer_discovery(struct oonf_timer_instance *);
 
-static int _router_process_peer_offer(struct dlep_extension *, struct dlep_session *);
-static int _router_process_session_init_ack(struct dlep_extension *, struct dlep_session *);
-static int _router_process_session_update(struct dlep_extension *, struct dlep_session *);
-static int _router_process_session_update_ack(struct dlep_extension *, struct dlep_session *);
-static int _router_process_destination_up(struct dlep_extension *, struct dlep_session *);
-static int _router_process_destination_up_ack(struct dlep_extension *, struct dlep_session *);
-static int _router_process_destination_down(struct dlep_extension *, struct dlep_session *);
-static int _router_process_destination_down_ack(struct dlep_extension *, struct dlep_session *);
-static int _router_process_destination_update(struct dlep_extension *, struct dlep_session *);
-static int _router_process_link_char_ack(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _router_process_peer_offer(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _router_process_session_init_ack(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _router_process_session_update(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _router_process_session_update_ack(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _router_process_destination_up(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _router_process_destination_up_ack(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _router_process_destination_down(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _router_process_destination_down_ack(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _router_process_destination_update(struct dlep_extension *, struct dlep_session *);
+static enum dlep_parser_error _router_process_link_char_ack(struct dlep_extension *, struct dlep_session *);
 
 static int _router_write_peer_discovery(struct dlep_extension *, struct dlep_session *session, const struct oonf_layer2_neigh_key *);
 static int _router_write_session_init(struct dlep_extension *, struct dlep_session *session, const struct oonf_layer2_neigh_key *);
@@ -250,7 +250,7 @@ _cb_create_peer_discovery(struct oonf_timer_instance *ptr) {
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _router_process_peer_offer(struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session) {
   struct dlep_router_if *router_if;
   union netaddr_socket local, remote;
@@ -264,7 +264,7 @@ _router_process_peer_offer(struct dlep_extension *ext __attribute__((unused)), s
 
   if (session->restrict_signal != DLEP_UDP_PEER_OFFER) {
     /* ignore unless we are in discovery mode */
-    return 0;
+    return DLEP_NEW_PARSER_OKAY;
   }
 
   /* optional peer type tlv */
@@ -280,7 +280,7 @@ _router_process_peer_offer(struct dlep_extension *ext __attribute__((unused)), s
   value = dlep_session_get_tlv_value(session, DLEP_IPV6_CONPOINT_TLV);
   while (value) {
     if (dlep_reader_ipv6_conpoint_tlv(&addr, &port, &tls, session, value)) {
-      return -1;
+      return DLEP_NEW_PARSER_UNSUPPORTED_TLV;
     }
 
     if (tls) {
@@ -300,7 +300,7 @@ _router_process_peer_offer(struct dlep_extension *ext __attribute__((unused)), s
   value = dlep_session_get_tlv_value(session, DLEP_IPV4_CONPOINT_TLV);
   while (value && !result) {
     if (dlep_reader_ipv4_conpoint_tlv(&addr, &port, &tls, session, value)) {
-      return -1;
+      return DLEP_NEW_PARSER_UNSUPPORTED_TLV;
     }
 
     if (tls) {
@@ -323,7 +323,7 @@ _router_process_peer_offer(struct dlep_extension *ext __attribute__((unused)), s
     if (!ip) {
       /* no possible way to communicate */
       OONF_DEBUG(session->log_source, "No matching prefix for incoming connection found");
-      return -1;
+      return DLEP_NEW_PARSER_INTERNAL_ERROR;
     }
     result = &ip->address;
     netaddr_socket_init(&remote, &addr, port, ifdata->index);
@@ -335,10 +335,10 @@ _router_process_peer_offer(struct dlep_extension *ext __attribute__((unused)), s
   router_if = dlep_router_get_by_layer2_if(ifdata->name);
   if (router_if && &router_if->interf.session == session) {
     dlep_router_add_session(router_if, &local, &remote);
-    return 0;
+    return DLEP_NEW_PARSER_OKAY;
   }
   /* ignore incoming offer, something is wrong */
-  return -1;
+  return DLEP_NEW_PARSER_INTERNAL_ERROR;
 }
 
 /**
@@ -347,7 +347,7 @@ _router_process_peer_offer(struct dlep_extension *ext __attribute__((unused)), s
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _router_process_session_init_ack(struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session) {
   struct oonf_layer2_net *l2net;
   struct dlep_parser_value *value;
@@ -356,13 +356,13 @@ _router_process_session_init_ack(struct dlep_extension *ext __attribute__((unuse
 
   if (session->restrict_signal != DLEP_SESSION_INITIALIZATION_ACK) {
     /* ignore unless we are in initialization mode */
-    return 0;
+    return DLEP_NEW_PARSER_OKAY;
   }
 
   /* mandatory heartbeat tlv */
   if (dlep_reader_heartbeat_tlv(&session->remote_heartbeat_interval, session, NULL)) {
     OONF_INFO(session->log_source, "no heartbeat tlv, should not happen!");
-    return -1;
+    return DLEP_NEW_PARSER_MISSING_MANDATORY_TLV;
   }
 
   /* optional extension supported tlv */
@@ -370,16 +370,16 @@ _router_process_session_init_ack(struct dlep_extension *ext __attribute__((unuse
   if (value) {
     ptr = dlep_session_get_tlv_binary(session, value);
     if (dlep_session_update_extensions(session, ptr, value->length / 2, true)) {
-      return -1;
+      return DLEP_NEW_PARSER_INTERNAL_ERROR;
     }
   }
   else if (dlep_session_update_extensions(session, NULL, 0, true)) {
-    return -1;
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
   }
 
   l2net = oonf_layer2_net_add(session->l2_listener.name);
   if (!l2net) {
-    return -1;
+    return DLEP_NEW_PARSER_OUT_OF_MEMORY;
   }
 
   /* mark interface as DLEP */
@@ -390,7 +390,7 @@ _router_process_session_init_ack(struct dlep_extension *ext __attribute__((unuse
   result = dlep_reader_map_l2neigh_data(l2net->neighdata, session, _base);
   if (result) {
     OONF_INFO(session->log_source, "tlv mapping failed for extension %u: %u", ext->id, result);
-    return result;
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
   }
 
   OONF_DEBUG(session->log_source, "Remote heartbeat interval %" PRIu64, session->remote_heartbeat_interval);
@@ -402,7 +402,7 @@ _router_process_session_init_ack(struct dlep_extension *ext __attribute__((unuse
 
   session->next_restrict_signal = DLEP_ALL_SIGNALS;
 
-  return 0;
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -418,17 +418,20 @@ _router_process_session_update(struct dlep_extension *ext __attribute__((unused)
 
   l2net = oonf_layer2_net_add(session->l2_listener.name);
   if (!l2net) {
-    return -1;
+    return DLEP_NEW_PARSER_OUT_OF_MEMORY;
   }
 
   result = dlep_reader_map_l2neigh_data(l2net->neighdata, session, _base);
   if (result) {
     OONF_INFO(session->log_source, "tlv mapping failed for extension %u: %u", ext->id, result);
-    return -1;
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
   }
 
   /* generate ACK */
-  return dlep_session_generate_signal_status(session, DLEP_SESSION_UPDATE_ACK, NULL, DLEP_STATUS_OKAY, "Success");
+  if (dlep_session_generate_signal_status(session, DLEP_SESSION_UPDATE_ACK, NULL, DLEP_STATUS_OKAY, "Success")) {
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
+  }
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -437,10 +440,10 @@ _router_process_session_update(struct dlep_extension *ext __attribute__((unused)
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _router_process_session_update_ack(struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session) {
   dlep_base_proto_print_status(session);
-  return 0;
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -449,7 +452,7 @@ _router_process_session_update_ack(struct dlep_extension *ext __attribute__((unu
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _router_process_destination_up(struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session) {
   struct oonf_layer2_net *l2net;
   struct oonf_layer2_neigh *l2neigh;
@@ -457,28 +460,41 @@ _router_process_destination_up(struct dlep_extension *ext __attribute__((unused)
   struct oonf_layer2_neigh_key mac_lid;
 
   if (dlep_extension_get_l2_neighbor_key(&mac_lid, session)) {
-    return -1;
+    return DLEP_NEW_PARSER_UNSUPPORTED_TLV;
   }
 
   l2net = oonf_layer2_net_add(session->l2_listener.name);
   if (!l2net) {
-    return dlep_session_generate_signal_status(
-      session, DLEP_DESTINATION_UP_ACK, &mac_lid, DLEP_STATUS_REQUEST_DENIED, "Not enough memory");
+    if (dlep_session_generate_signal_status(
+        session, DLEP_DESTINATION_UP_ACK, &mac_lid, DLEP_STATUS_REQUEST_DENIED, "Not enough memory")) {
+      return DLEP_NEW_PARSER_INTERNAL_ERROR;
+    }
+    else {
+      return DLEP_NEW_PARSER_OKAY;
+    }
   }
   l2neigh = oonf_layer2_neigh_add_lid(l2net, &mac_lid);
   if (!l2neigh) {
-    return dlep_session_generate_signal_status(
-      session, DLEP_DESTINATION_UP_ACK, &mac_lid, DLEP_STATUS_REQUEST_DENIED, "Not enough memory");
+    if (dlep_session_generate_signal_status(
+      session, DLEP_DESTINATION_UP_ACK, &mac_lid, DLEP_STATUS_REQUEST_DENIED, "Not enough memory")) {
+      return DLEP_NEW_PARSER_INTERNAL_ERROR;
+    }
+    else {
+      return DLEP_NEW_PARSER_OKAY;
+    }
   }
 
   result = dlep_reader_map_l2neigh_data(l2neigh->data, session, _base);
   if (result) {
     OONF_INFO(session->log_source, "tlv mapping failed for extension %u: %u", ext->id, result);
-    return result;
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
   }
 
   /* generate ACK */
-  return dlep_session_generate_signal_status (session, DLEP_DESTINATION_UP_ACK, &mac_lid, DLEP_STATUS_OKAY, "Success");
+  if (dlep_session_generate_signal_status (session, DLEP_DESTINATION_UP_ACK, &mac_lid, DLEP_STATUS_OKAY, "Success")) {
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
+  }
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -487,10 +503,10 @@ _router_process_destination_up(struct dlep_extension *ext __attribute__((unused)
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _router_process_destination_up_ack(struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session) {
   dlep_base_proto_print_status(session);
-  return 0;
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -499,31 +515,34 @@ _router_process_destination_up_ack(struct dlep_extension *ext __attribute__((unu
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _router_process_destination_down(struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session) {
   struct oonf_layer2_net *l2net;
   struct oonf_layer2_neigh *l2neigh;
   struct oonf_layer2_neigh_key mac_lid;
 
   if (dlep_extension_get_l2_neighbor_key(&mac_lid, session)) {
-    return -1;
+    return DLEP_NEW_PARSER_UNSUPPORTED_TLV;
   }
 
   l2net = oonf_layer2_net_get(session->l2_listener.name);
   if (!l2net) {
-    return 0;
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
   }
 
   l2neigh = oonf_layer2_neigh_get_lid(l2net, &mac_lid);
   if (!l2neigh) {
-    return 0;
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
   }
 
   /* remove layer2 neighbor */
   oonf_layer2_neigh_remove(l2neigh, session->l2_origin);
 
   /* generate ACK */
-  return dlep_session_generate_signal_status(session, DLEP_DESTINATION_DOWN_ACK, &mac_lid, DLEP_STATUS_OKAY, "Success");
+  if (dlep_session_generate_signal_status(session, DLEP_DESTINATION_DOWN_ACK, &mac_lid, DLEP_STATUS_OKAY, "Success")) {
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
+  }
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -532,10 +551,10 @@ _router_process_destination_down(struct dlep_extension *ext __attribute__((unuse
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _router_process_destination_down_ack(struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session) {
   dlep_base_proto_print_status(session);
-  return 0;
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -544,7 +563,7 @@ _router_process_destination_down_ack(struct dlep_extension *ext __attribute__((u
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _router_process_destination_update(struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session) {
   struct oonf_layer2_net *l2net;
   struct oonf_layer2_neigh *l2neigh;
@@ -552,27 +571,27 @@ _router_process_destination_update(struct dlep_extension *ext __attribute__((unu
   int result;
 
   if (dlep_extension_get_l2_neighbor_key(&mac_lid, session)) {
-    return -1;
+    return DLEP_NEW_PARSER_UNSUPPORTED_TLV;
   }
 
   l2net = oonf_layer2_net_get(session->l2_listener.name);
   if (!l2net) {
-    return 0;
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
   }
 
   l2neigh = oonf_layer2_neigh_get_lid(l2net, &mac_lid);
   if (!l2neigh) {
     /* we did not get the destination up signal */
-    return 0;
+    return DLEP_NEW_PARSER_OKAY;
   }
 
   result = dlep_reader_map_l2neigh_data(l2neigh->data, session, _base);
   if (result) {
     OONF_INFO(session->log_source, "tlv mapping failed for extension %u: %u", ext->id, result);
-    return result;
+    return DLEP_NEW_PARSER_INTERNAL_ERROR;
   }
 
-  return 0;
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
@@ -581,10 +600,10 @@ _router_process_destination_update(struct dlep_extension *ext __attribute__((unu
  * @param session dlep session
  * @return -1 if an error happened, 0 otherwise
  */
-static int
+static enum dlep_parser_error
 _router_process_link_char_ack(struct dlep_extension *ext __attribute__((unused)), struct dlep_session *session) {
   dlep_base_proto_print_status(session);
-  return 0;
+  return DLEP_NEW_PARSER_OKAY;
 }
 
 /**
index 4d59846..d04b70e 100644 (file)
 
 #include "dlep/ext_l1_statistics/l1_statistics.h"
 
-static int dlep_reader_map_array(struct oonf_layer2_data *data, const struct oonf_layer2_metadata *meta,
+static int _map_array(struct oonf_layer2_data *data, const struct oonf_layer2_metadata *meta,
   struct dlep_session *session, uint16_t dlep_tlv, enum oonf_layer2_network_index l2idx);
-static int dlep_reader_map_frequency(struct oonf_layer2_data *data, const struct oonf_layer2_metadata *meta,
+static int _map_frequency(struct oonf_layer2_data *data, const struct oonf_layer2_metadata *meta,
   struct dlep_session *session, uint16_t dlep_tlv);
-static int dlep_reader_map_bandwidth(struct oonf_layer2_data *data, const struct oonf_layer2_metadata *meta,
+static int _map_bandwidth(struct oonf_layer2_data *data, const struct oonf_layer2_metadata *meta,
   struct dlep_session *session, uint16_t dlep_tlv);
 
 static int dlep_writer_map_array(struct dlep_writer *writer, struct oonf_layer2_data *data,
@@ -185,7 +185,7 @@ static struct dlep_network_mapping _net_mappings[] = {
 
     .mandatory = true,
 
-    .from_tlv = dlep_reader_map_frequency,
+    .from_tlv = _map_frequency,
     .to_tlv = dlep_writer_map_frequency,
   },
   {
@@ -195,7 +195,7 @@ static struct dlep_network_mapping _net_mappings[] = {
 
     .mandatory = true,
 
-    .from_tlv = dlep_reader_map_bandwidth,
+    .from_tlv = _map_bandwidth,
     .to_tlv = dlep_writer_map_bandwidth,
   },
   {
@@ -275,7 +275,7 @@ dlep_l1_statistics_init(void) {
  * @return -1 if an error happened, 0 otherwise
  */
 static int
-dlep_reader_map_array(struct oonf_layer2_data *data, const struct oonf_layer2_metadata *meta __attribute__((unused)),
+_map_array(struct oonf_layer2_data *data, const struct oonf_layer2_metadata *meta __attribute__((unused)),
   struct dlep_session *session, uint16_t dlep_tlv, enum oonf_layer2_network_index l2idx) {
   struct dlep_parser_value *value;
   int64_t l2value;
@@ -332,9 +332,9 @@ dlep_reader_map_array(struct oonf_layer2_data *data, const struct oonf_layer2_me
  * @return -1 if an error happened, 0 otherwise
  */
 static int
-dlep_reader_map_frequency(struct oonf_layer2_data *data, const struct oonf_layer2_metadata *meta,
+_map_frequency(struct oonf_layer2_data *data, const struct oonf_layer2_metadata *meta,
   struct dlep_session *session, uint16_t dlep_tlv) {
-  return dlep_reader_map_array(data, meta, session, dlep_tlv, OONF_LAYER2_NET_FREQUENCY_1);
+  return _map_array(data, meta, session, dlep_tlv, OONF_LAYER2_NET_FREQUENCY_1);
 }
 
 /**
@@ -346,9 +346,9 @@ dlep_reader_map_frequency(struct oonf_layer2_data *data, const struct oonf_layer
  * @return -1 if an error happened, 0 otherwise
  */
 static int
-dlep_reader_map_bandwidth(struct oonf_layer2_data *data, const struct oonf_layer2_metadata *meta,
+_map_bandwidth(struct oonf_layer2_data *data, const struct oonf_layer2_metadata *meta,
   struct dlep_session *session, uint16_t dlep_tlv) {
-  return dlep_reader_map_array(data, meta, session, dlep_tlv, OONF_LAYER2_NET_BANDWIDTH_1);
+  return _map_array(data, meta, session, dlep_tlv, OONF_LAYER2_NET_BANDWIDTH_1);
 }
 
 /**