More work on Layer2 data API (removal of assert)
authorHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Wed, 25 Oct 2017 06:13:49 +0000 (08:13 +0200)
committerHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Wed, 25 Oct 2017 06:13:49 +0000 (08:13 +0200)
src-plugins/generic/dlep/dlep_writer.c
src-plugins/generic/dlep/ext_base_ip/ip.c
src-plugins/generic/dlep/ext_l1_statistics/l1_statistics.c
src-plugins/generic/nl80211_listener/nl80211_get_wiphy.c
src-plugins/nhdp/ff_dat_metric/ff_dat_metric.c
src-plugins/nhdp/neighbor_probing/neighbor_probing.c
src-plugins/subsystems/oonf_layer2.c
src-plugins/subsystems/oonf_layer2.h

index 2b00276..04b327b 100644 (file)
@@ -403,10 +403,10 @@ dlep_writer_map_identity(struct dlep_writer *writer,
 
   switch (oonf_layer2_data_get_type(data)) {
     case OONF_LAYER2_INTEGER_DATA:
-      l2value64 = oonf_layer2_data_get_int64(data);
+      l2value64 = oonf_layer2_data_get_int64(data, 0);
       break;
     case OONF_LAYER2_BOOLEAN_DATA:
-      l2value64 = oonf_layer2_data_get_boolean(data) ? 1 : 0;
+      l2value64 = oonf_layer2_data_get_boolean(data, false) ? 1 : 0;
       break;
     default:
       return -1;
index ab81ceb..1e1429a 100644 (file)
@@ -304,7 +304,7 @@ _process_session_ip_tlvs(const struct oonf_layer2_origin *origin,
   if (add) {
     oonf_layer2_net_add_ip(l2net, origin, ip);
   }
-  else if ((l2addr = oonf_layer2_net_get_ip(l2net, ip))){
+  else if ((l2addr = oonf_layer2_net_get_local_ip(l2net, ip))){
     oonf_layer2_net_remove_ip(l2addr, origin);
   }
 }
@@ -372,7 +372,7 @@ _process_destination_ip_tlv(const struct oonf_layer2_origin *origin,
   if (add) {
     oonf_layer2_neigh_add_ip(l2neigh, origin, ip);
   }
-  else if ((l2addr = oonf_layer2_neigh_get_ip(l2neigh, ip))){
+  else if ((l2addr = oonf_layer2_neigh_get_remote_ip(l2neigh, ip))){
     oonf_layer2_neigh_remove_ip(l2addr, origin);
   }
 }
index 2d5a51c..eccd508 100644 (file)
@@ -416,7 +416,7 @@ dlep_writer_map_array(struct dlep_writer *writer,
     }
   }
 
-  l2value = oonf_layer2_data_get_int64(data);
+  l2value = oonf_layer2_data_get_int64(data, 0);
   memcpy(&tmp64[0], &l2value, 8);
   tmp64[0] = htobe64(tmp64[0]);
 
index a44f563..55ef9f6 100644 (file)
@@ -288,12 +288,10 @@ _get_max_bitrate(struct nl80211_if *interf, uint8_t *mcs, bool ht20_sgi, bool ht
     /* we don't know the bandwidth of the channel */
     return 0;
   }
-  bandwidth = oonf_layer2_data_get_int64(data);
+  bandwidth = oonf_layer2_data_get_int64(data, 0);
 
   data = &interf->l2net->data[OONF_LAYER2_NET_BANDWIDTH_2];
-  if (oonf_layer2_data_has_value(data)) {
-    bandwidth += oonf_layer2_data_get_int64(data);
-  }
+  bandwidth += oonf_layer2_data_get_int64(data, 0);
 
   if (bandwidth == 20000000) {
     /* is 20 MHz */
index 230279b..ff76632 100644 (file)
@@ -588,7 +588,7 @@ _get_raw_rx_linkspeed(const char *ifname, struct nhdp_link *lnk) {
   rx_bitrate_entry = oonf_layer2_neigh_query(
       ifname, &lnk->remote_mac, OONF_LAYER2_NEIGH_RX_BITRATE);
   if (rx_bitrate_entry) {
-    return oonf_layer2_data_get_int64(rx_bitrate_entry);
+    return oonf_layer2_data_get_int64(rx_bitrate_entry, 0);
   }
 
   l2net = oonf_layer2_net_get(ifname);
@@ -599,10 +599,10 @@ _get_raw_rx_linkspeed(const char *ifname, struct nhdp_link *lnk) {
 
   /* search for an entry in the l2 database which reports the remote link IP */
   avl_for_each_element(&l2net->neighbors, l2neigh, _node) {
-    if (oonf_layer2_neigh_get_ip(l2neigh, &lnk->if_addr)) {
+    if (oonf_layer2_neigh_get_remote_ip(l2neigh, &lnk->if_addr)) {
       rx_bitrate_entry = &l2neigh->data[OONF_LAYER2_NEIGH_RX_BITRATE];
       if (oonf_layer2_data_has_value(rx_bitrate_entry)) {
-        return oonf_layer2_data_get_int64(rx_bitrate_entry);
+        return oonf_layer2_data_get_int64(rx_bitrate_entry, 0);
       }
     }
   }
@@ -952,7 +952,7 @@ _shall_process_packet(struct nhdp_interface *nhdpif, struct ff_dat_if_config *if
     /* accept for unicast-only interfaces marked in layer2-data */
     l2data = &l2net->data[OONF_LAYER2_NET_RX_ONLY_UNICAST];
 
-    if (oonf_layer2_data_has_value(l2data) && oonf_layer2_data_get_boolean(l2data)) {
+    if (oonf_layer2_data_get_boolean(l2data, false)) {
       return true;
     }
   }
index 67fbef0..26a93ba 100644 (file)
@@ -333,7 +333,7 @@ _cb_probe_link(struct oonf_timer_instance *ptr __attribute__((unused))) {
 
       /* fix tx-packets */
       last_tx_packets = ldata->last_tx_traffic;
-      ldata->last_tx_traffic = oonf_layer2_data_get_int64(&l2neigh->data[OONF_LAYER2_NEIGH_TX_FRAMES]);
+      ldata->last_tx_traffic = oonf_layer2_data_get_int64(&l2neigh->data[OONF_LAYER2_NEIGH_TX_FRAMES], 0);
 
       /* check if link had traffic since last probe check */
       if (last_tx_packets != ldata->last_tx_traffic) {
index 9a91816..2d76821 100644 (file)
@@ -611,7 +611,7 @@ oonf_layer2_net_add_ip(struct oonf_layer2_net *l2net,
     const struct oonf_layer2_origin *origin, const struct netaddr *ip) {
   struct oonf_layer2_peer_address *l2addr;
 
-  l2addr = oonf_layer2_net_get_ip(l2net, ip);
+  l2addr = oonf_layer2_net_get_local_ip(l2net, ip);
   if (!l2addr) {
     l2addr = oonf_class_malloc(&_l2net_addr_class);
     if (!l2addr) {
@@ -861,7 +861,7 @@ oonf_layer2_neigh_add_ip(struct oonf_layer2_neigh *l2neigh,
     const struct oonf_layer2_origin *origin, const struct netaddr *ip) {
   struct oonf_layer2_neighbor_address *l2addr;
 
-  l2addr = oonf_layer2_neigh_get_ip(l2neigh, ip);
+  l2addr = oonf_layer2_neigh_get_remote_ip(l2neigh, ip);
   if (!l2addr) {
     l2addr = oonf_class_malloc(&_l2neigh_addr_class);
     if (!l2addr) {
index 8458204..8ad54e2 100644 (file)
@@ -539,7 +539,6 @@ EXPORT const char *oonf_layer2_cfg_get_l2comp(size_t index, const void *unused);
 EXPORT const char *oonf_layer2_net_get_type_name(enum oonf_layer2_network_type);
 
 EXPORT struct avl_tree *oonf_layer2_get_net_tree(void);
-EXPORT struct avl_tree *oonf_layer2_get_peer_ip_tree(void);
 EXPORT struct avl_tree *oonf_layer2_get_origin_tree(void);
 
 /**
@@ -564,27 +563,29 @@ oonf_layer2_net_get(const char *ifname) {
 }
 
 /**
- * Get a layer-2 ip address object from the database
+ * Get a layer-2 local peer ip address object from the database
+ * @param l2net layer-2 network/interface object
  * @param ip ip address of local radio/modem
  * @return layer-2 ip address object, NULL if not found
  */
 static INLINE struct oonf_layer2_peer_address *
-oonf_layer2_get_net_ip(const struct netaddr *addr) {
+oonf_layer2_net_get_local_ip(const struct oonf_layer2_net *l2net,
+    const struct netaddr *addr) {
   struct oonf_layer2_peer_address *l2ip;
-  return avl_find_element(oonf_layer2_get_peer_ip_tree(), addr, l2ip, _global_node);
+  return avl_find_element(&l2net->local_peer_ips, addr, l2ip, _net_node);
 }
 
 /**
  * Get a layer-2 ip address object from the database
- * @param l2net layer-2 network/interface object
- * @param ip ip address of local radio/modem
+ * @param l2net layer-2 network object
+ * @param ip ip address of remote router
  * @return layer-2 ip address object, NULL if not found
  */
-static INLINE struct oonf_layer2_peer_address *
-oonf_layer2_net_get_ip(const struct oonf_layer2_net *l2net,
+static INLINE struct oonf_layer2_neighbor_address *
+oonf_layer2_net_get_remote_ip(const struct oonf_layer2_net *l2net,
     const struct netaddr *addr) {
-  struct oonf_layer2_peer_address *l2ip;
-  return avl_find_element(&l2net->local_peer_ips, addr, l2ip, _net_node);
+  struct oonf_layer2_neighbor_address *l2ip;
+  return avl_find_element(&l2net->remote_neighbor_ips, addr, l2ip, _net_node);
 }
 
 /**
@@ -600,19 +601,6 @@ oonf_layer2_neigh_get(const struct oonf_layer2_net *l2net,
   return avl_find_element(&l2net->neighbors, addr, l2neigh, _node);
 }
 
-/**
- * Get a layer-2 destination (secondary MAC) for a neighbor
- * @param l2neigh layer-2 neighbor object
- * @param destination mac address of destination
- * @return layer-2 destination object, NULL if not found
- */
-static INLINE struct oonf_layer2_destination *
-oonf_layer2_destination_get(const struct oonf_layer2_neigh *l2neigh,
-    const struct netaddr *destination) {
-  struct oonf_layer2_destination *l2dst;
-  return avl_find_element(&l2neigh->destinations, destination, l2dst, _node);
-}
-
 /**
  * Get a layer-2 ip address object from the database
  * @param l2neigh layer-2 neighbor object
@@ -620,23 +608,23 @@ oonf_layer2_destination_get(const struct oonf_layer2_neigh *l2neigh,
  * @return layer-2 ip address object, NULL if not found
  */
 static INLINE struct oonf_layer2_neighbor_address *
-oonf_layer2_neigh_get_ip(const struct oonf_layer2_neigh *l2neigh,
+oonf_layer2_neigh_get_remote_ip(const struct oonf_layer2_neigh *l2neigh,
     const struct netaddr *addr) {
   struct oonf_layer2_neighbor_address *l2ip;
   return avl_find_element(&l2neigh->remote_neighbor_ips, addr, l2ip, _neigh_node);
 }
 
 /**
- * Get a layer-2 ip address object from the database
- * @param l2net layer-2 network object
- * @param ip ip address of remote router
- * @return layer-2 ip address object, NULL if not found
+ * Get a layer-2 destination (secondary MAC) for a neighbor
+ * @param l2neigh layer-2 neighbor object
+ * @param destination mac address of destination
+ * @return layer-2 destination object, NULL if not found
  */
-static INLINE struct oonf_layer2_neighbor_address *
-oonf_layer2_net_get_neigh_ip(const struct oonf_layer2_net *l2net,
-    const struct netaddr *addr) {
-  struct oonf_layer2_neighbor_address *l2ip;
-  return avl_find_element(&l2net->remote_neighbor_ips, addr, l2ip, _net_node);
+static INLINE struct oonf_layer2_destination *
+oonf_layer2_destination_get(const struct oonf_layer2_neigh *l2neigh,
+    const struct netaddr *destination) {
+  struct oonf_layer2_destination *l2dst;
+  return avl_find_element(&l2neigh->destinations, destination, l2dst, _node);
 }
 
 /**
@@ -648,6 +636,10 @@ oonf_layer2_data_has_value(const struct oonf_layer2_data *l2data) {
   return l2data->_type != OONF_LAYER2_NO_DATA;
 }
 
+/**
+ * @param l2data layer-2 data object
+ * @return type of data in object
+ */
 static INLINE enum oonf_layer2_data_type
 oonf_layer2_data_get_type(const struct oonf_layer2_data *l2data) {
   return l2data->_type;
@@ -655,21 +647,27 @@ oonf_layer2_data_get_type(const struct oonf_layer2_data *l2data) {
 
 /**
  * @param l2data layer-2 data object
- * @return value of data object
+ * @param def default value to return
+ * @return value of data object, default value if not net
  */
 static INLINE int64_t
-oonf_layer2_data_get_int64(const struct oonf_layer2_data *l2data) {
-  assert (l2data->_type == OONF_LAYER2_INTEGER_DATA);
+oonf_layer2_data_get_int64(const struct oonf_layer2_data *l2data, int64_t def) {
+  if (l2data->_type == OONF_LAYER2_INTEGER_DATA) {
+    return def;
+  }
   return l2data->_value.integer;
 }
 
 /**
  * @param l2data layer-2 data object
- * @return value of data object
+ * @param def default value to return
+ * @return value of data object, default value if not net
  */
 static INLINE bool
-oonf_layer2_data_get_boolean(const struct oonf_layer2_data *l2data) {
-  assert (l2data->_type == OONF_LAYER2_BOOLEAN_DATA);
+oonf_layer2_data_get_boolean(const struct oonf_layer2_data *l2data, bool def) {
+  if (l2data->_type == OONF_LAYER2_BOOLEAN_DATA) {
+    return def;
+  }
   return l2data->_value.boolean;
 }