Cleanup work in layer2 database API
authorHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Thu, 21 Sep 2017 08:52:49 +0000 (10:52 +0200)
committerHenning Rogge <henning.rogge@fkie.fraunhofer.de>
Thu, 21 Sep 2017 08:52:49 +0000 (10:52 +0200)
src-plugins/generic/dlep/dlep_extension.c
src-plugins/generic/dlep/dlep_reader.c
src-plugins/generic/dlep/ext_l1_statistics/l1_statistics.c
src-plugins/generic/eth_listener/eth_listener.c
src-plugins/generic/layer2_config/layer2_config.c
src-plugins/generic/layer2_generator/layer2_generator.c
src-plugins/generic/link_config/link_config.c
src-plugins/generic/nl80211_listener/nl80211_listener.c
src-plugins/subsystems/oonf_layer2.c
src-plugins/subsystems/oonf_layer2.h

index 3cb6a07..ff3b872 100644 (file)
@@ -276,8 +276,8 @@ dlep_extension_radio_write_session_init_ack(
 
 
     if (!oonf_layer2_data_has_value(l2data)) {
+      // TODO: is this always int64?
       oonf_layer2_data_set_int64(l2data, session->l2_origin,
-          oonf_layer2_neigh_metadata_get(ext->neigh_mapping[i].layer2),
           ext->neigh_mapping[i].default_value);
     }
   }
@@ -291,8 +291,8 @@ dlep_extension_radio_write_session_init_ack(
     l2data = &l2net->data[ext->if_mapping[i].layer2];
 
     if (!oonf_layer2_data_has_value(l2data)) {
+      // TODO: is this always int64?
       oonf_layer2_data_set_int64(l2data, session->l2_origin,
-          oonf_layer2_net_metadata_get(ext->if_mapping[i].layer2),
           ext->if_mapping[i].default_value);
     }
   }
index b15bb6a..f164167 100644 (file)
@@ -483,10 +483,10 @@ dlep_reader_map_identity(struct oonf_layer2_data *data,
 
     switch (meta->type) {
       case OONF_LAYER2_INTEGER_DATA:
-        oonf_layer2_data_set_int64(data, session->l2_origin, meta, l2value);
+        oonf_layer2_data_set_int64(data, session->l2_origin, l2value);
         break;
       case OONF_LAYER2_BOOLEAN_DATA:
-        oonf_layer2_data_set_bool(data, session->l2_origin, meta, l2value != 0);
+        oonf_layer2_data_set_bool(data, session->l2_origin, l2value != 0);
         break;
       default:
         return -1;
index 0bef244..2d5a51c 100644 (file)
@@ -287,7 +287,7 @@ dlep_l1_statistics_init(void) {
  */
 static int
 dlep_reader_map_array(struct oonf_layer2_data *data,
-    const struct oonf_layer2_metadata *meta,
+    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;
@@ -316,8 +316,7 @@ dlep_reader_map_array(struct oonf_layer2_data *data,
 
   /* copy into signed integer and set to l2 value */
   memcpy(&l2value, &tmp64[0], 8);
-  oonf_layer2_data_set_int64(data, session->l2_origin,
-      oonf_layer2_net_metadata_get(l2idx), l2value);
+  oonf_layer2_data_set_int64(data, session->l2_origin, l2value);
 
   if (value->length == 16) {
     switch (l2idx) {
@@ -332,8 +331,7 @@ dlep_reader_map_array(struct oonf_layer2_data *data,
     }
 
     memcpy(&l2value, &tmp64[1], 8);
-    oonf_layer2_data_set_int64(data, session->l2_origin,
-        meta, l2value);
+    oonf_layer2_data_set_int64(data, session->l2_origin, l2value);
   }
   return 0;
 }
index ba831d0..bae9489 100644 (file)
@@ -227,9 +227,9 @@ _cb_transmission_event(struct oonf_timer_instance *ptr __attribute((unused))) {
         isonumber_from_s64(&ibuf, ethspeed, "bit/s", 0, false, false));
 
     oonf_layer2_data_set_int64(&l2net->neighdata[OONF_LAYER2_NEIGH_RX_BITRATE],
-        &_l2_origin, oonf_layer2_neigh_metadata_get(OONF_LAYER2_NEIGH_RX_BITRATE), ethspeed);
+        &_l2_origin, ethspeed);
     oonf_layer2_data_set_int64(&l2net->neighdata[OONF_LAYER2_NEIGH_TX_BITRATE],
-        &_l2_origin, oonf_layer2_neigh_metadata_get(OONF_LAYER2_NEIGH_TX_BITRATE), ethspeed);
+        &_l2_origin, ethspeed);
   }
 }
 
index d998c83..d550b45 100644 (file)
@@ -69,11 +69,12 @@ enum l2_data_type {
 };
 
 struct l2_config_data {
-  enum l2_data_type type;
+  enum l2_data_type config_type;
   struct netaddr mac;
 
   int data_idx;
 
+  enum oonf_layer2_data_type data_type;
   union oonf_layer2_value data;
 };
 
@@ -562,7 +563,7 @@ _parse_l2net_config(struct l2_config_data *storage, const char *value) {
 
   meta = oonf_layer2_net_metadata_get(idx);
   storage->data_idx = idx;
-
+  storage->data_type = meta->type;
   return oonf_layer2_data_parse_string(&storage->data, meta, ptr);
 }
 
@@ -585,6 +586,7 @@ _parse_l2net_ip_config(struct l2_config_data *storage, const char *value) {
  */
 static int
 _parse_l2neigh_config(struct l2_config_data *storage, const char *value) {
+  const struct oonf_layer2_metadata *meta;
   struct isonumber_str sbuf;
   const char *ptr;
   int idx;
@@ -602,11 +604,13 @@ _parse_l2neigh_config(struct l2_config_data *storage, const char *value) {
     return -1;
   }
 
+  meta = oonf_layer2_neigh_metadata_get(idx);
   storage->data_idx = idx;
+  storage->data_type = meta->type;
 
   /* convert number */
   ptr = str_cpynextword(sbuf.buf, ptr, sizeof(sbuf));
-  if (oonf_layer2_data_parse_string(&storage->data, oonf_layer2_neigh_metadata_get(idx), sbuf.buf)) {
+  if (oonf_layer2_data_parse_string(&storage->data, meta, sbuf.buf)) {
     return -1;
   }
 
@@ -674,10 +678,10 @@ _configure_if_data(struct l2_config_if_data *if_data) {
     for (i=0; i<if_data->count; i++) {
       entry = &if_data->d[i];
 
-      switch (entry->type) {
+      switch (entry->config_type) {
         case L2_NET:
           oonf_layer2_data_set(&l2net->data[entry->data_idx],
-              &_l2_origin_current, oonf_layer2_net_metadata_get(entry->data_idx), &entry->data);
+              &_l2_origin_current, entry->data_type, &entry->data);
           break;
         case L2_NET_IP:
           oonf_layer2_net_add_ip(l2net,
@@ -685,13 +689,13 @@ _configure_if_data(struct l2_config_if_data *if_data) {
           break;
         case L2_DEF:
           oonf_layer2_data_set(&l2net->neighdata[entry->data_idx],
-              &_l2_origin_current, oonf_layer2_neigh_metadata_get(entry->data_idx), &entry->data);
+              &_l2_origin_current, entry->data_type, &entry->data);
           break;
         case L2_NEIGH:
           l2neigh = oonf_layer2_neigh_add(l2net, &entry->mac);
           if (l2neigh) {
             oonf_layer2_data_set(&l2neigh->data[entry->data_idx],
-                &_l2_origin_current, oonf_layer2_neigh_metadata_get(entry->data_idx), &entry->data);
+                &_l2_origin_current, entry->data_type, &entry->data);
           }
           break;
         case L2_NEIGH_IP:
@@ -870,7 +874,7 @@ _cb_config_changed(void) {
     /* parse layer2 network data */
     strarray_for_each_element(&l2net_entry->val, txt_value) {
       if (!_parse_l2net_config(&if_data->d[i], txt_value)) {
-        if_data->d[i].type = L2_NET;
+        if_data->d[i].config_type = L2_NET;
         i++;
       }
       else {
@@ -882,7 +886,7 @@ _cb_config_changed(void) {
     /* parse layer2 network data */
     strarray_for_each_element(&l2net_ip_entry->val, txt_value) {
       if (!_parse_l2net_ip_config(&if_data->d[i], txt_value)) {
-        if_data->d[i].type = L2_NET_IP;
+        if_data->d[i].config_type = L2_NET_IP;
         i++;
       }
       else {
@@ -894,7 +898,7 @@ _cb_config_changed(void) {
     /* parse layer2 default data */
     strarray_for_each_element(&l2def_entry->val, txt_value) {
       if (!_parse_l2neigh_config(&if_data->d[i], txt_value)) {
-        if_data->d[i].type = L2_DEF;
+        if_data->d[i].config_type = L2_DEF;
         i++;
       }
       else {
@@ -906,7 +910,7 @@ _cb_config_changed(void) {
     /* parse layer2 network data */
     strarray_for_each_element(&l2neigh_entry->val, txt_value) {
       if (!_parse_l2neigh_config(&if_data->d[i], txt_value)) {
-        if_data->d[i].type = L2_NEIGH;
+        if_data->d[i].config_type = L2_NEIGH;
         i++;
       }
       else {
@@ -918,7 +922,7 @@ _cb_config_changed(void) {
     /* parse layer2 network data */
     strarray_for_each_element(&l2neigh_ip_entry->val, txt_value) {
       if (!_parse_l2_addr_config(&if_data->d[i], txt_value)) {
-        if_data->d[i].type = L2_NEIGH_IP;
+        if_data->d[i].config_type = L2_NEIGH_IP;
         i++;
       }
       else {
@@ -930,7 +934,7 @@ _cb_config_changed(void) {
     /* parse layer2 network data */
     strarray_for_each_element(&l2dst_entry->val, txt_value) {
       if (!_parse_l2_addr_config(&if_data->d[i], txt_value)) {
-        if_data->d[i].type = L2_DST;
+        if_data->d[i].config_type = L2_DST;
         i++;
       }
       else {
index 3b3c325..e79947a 100644 (file)
@@ -176,6 +176,19 @@ _cleanup(void) {
   oonf_timer_remove(&_l2gen_timer_info);
 }
 
+static void
+_set_data(struct oonf_layer2_data *data, enum oonf_layer2_data_type type, int64_t value) {
+  switch (type) {
+    case OONF_LAYER2_INTEGER_DATA:
+      oonf_layer2_data_set_int64(data, &_origin, value);
+      break;
+    case OONF_LAYER2_BOOLEAN_DATA:
+      oonf_layer2_data_set_bool(data, &_origin, (value&1) != 0);
+      break;
+    default:
+      break;
+  }
+}
 
 /**
  * Callback for generating new layer2 test data
@@ -214,12 +227,10 @@ _cb_l2gen_event(struct oonf_timer_instance *ptr __attribute((unused))) {
   net->last_seen = oonf_clock_getNow();
 
   for (net_idx=0; net_idx<OONF_LAYER2_NET_COUNT; net_idx++) {
-    oonf_layer2_data_set_int64(&net->data[net_idx], &_origin,
-        oonf_layer2_net_metadata_get(net_idx), event_counter);
+    _set_data(&net->data[net_idx], oonf_layer2_net_metadata_get(net_idx)->type, event_counter);
   }
   for (neigh_idx=0; neigh_idx<OONF_LAYER2_NEIGH_COUNT; neigh_idx++) {
-    oonf_layer2_data_set_int64(&net->neighdata[neigh_idx], &_origin,
-        oonf_layer2_neigh_metadata_get(neigh_idx), event_counter);
+    _set_data(&net->neighdata[neigh_idx], oonf_layer2_neigh_metadata_get(net_idx)->type, event_counter);
   }
 
   if (oonf_layer2_net_commit(net)) {
@@ -242,8 +253,7 @@ _cb_l2gen_event(struct oonf_timer_instance *ptr __attribute((unused))) {
   neigh->last_seen = oonf_clock_getNow();
 
   for (neigh_idx = 0; neigh_idx < OONF_LAYER2_NEIGH_COUNT; neigh_idx++) {
-    oonf_layer2_data_set_int64(&neigh->data[neigh_idx], &_origin,
-        oonf_layer2_neigh_metadata_get(neigh_idx), event_counter);
+    _set_data(&neigh->data[neigh_idx], oonf_layer2_neigh_metadata_get(net_idx)->type, event_counter);
   }
   oonf_layer2_neigh_commit(neigh);
 }
index dcfeecb..9c76708 100644 (file)
@@ -303,8 +303,7 @@ _parse_strarray(struct strarray *array, const char *ifname,
 
     if (ptr == NULL) {
       /* add network wide data entry */
-      if (!oonf_layer2_data_set_int64(&l2net->neighdata[idx], &_l2_origin_current,
-          oonf_layer2_neigh_metadata_get(idx),value)) {
+      if (!oonf_layer2_data_set_int64(&l2net->neighdata[idx], &_l2_origin_current ,value)) {
         OONF_INFO(LOG_LINK_CONFIG, "if-wide %s for %s: %s",
             oonf_layer2_neigh_metadata_get(idx)->key, ifname, hbuf.buf);
       }
@@ -323,8 +322,7 @@ _parse_strarray(struct strarray *array, const char *ifname,
         continue;
       }
 
-      if (!oonf_layer2_data_set_int64(&l2neigh->data[idx], &_l2_origin_current,
-          oonf_layer2_neigh_metadata_get(idx),value)) {
+      if (!oonf_layer2_data_set_int64(&l2neigh->data[idx], &_l2_origin_current, value)) {
         OONF_INFO(LOG_LINK_CONFIG, "%s to neighbor %s on %s: %s",
             oonf_layer2_neigh_metadata_get(idx)->key, nbuf.buf, ifname, hbuf.buf);
       }
index 0b50fb7..defb77c 100644 (file)
@@ -378,8 +378,7 @@ nl80211_add_dst(struct oonf_layer2_neigh *l2neigh, const struct netaddr *dstmac)
 bool
 nl80211_change_l2net_data(struct oonf_layer2_net *l2net,
     enum oonf_layer2_network_index idx, uint64_t value) {
-  return oonf_layer2_data_set_int64(&l2net->data[idx], &_layer2_updated_origin,
-      oonf_layer2_net_metadata_get(idx), value);
+  return oonf_layer2_data_set_int64(&l2net->data[idx], &_layer2_updated_origin, value);
 }
 
 /**
@@ -392,8 +391,7 @@ nl80211_change_l2net_data(struct oonf_layer2_net *l2net,
 bool
 nl80211_change_l2net_neighbor_default(struct oonf_layer2_net *l2net,
     enum oonf_layer2_neighbor_index idx, uint64_t value) {
-  return oonf_layer2_data_set_int64(&l2net->neighdata[idx], &_layer2_updated_origin,
-      oonf_layer2_neigh_metadata_get(idx), value);
+  return oonf_layer2_data_set_int64(&l2net->neighdata[idx], &_layer2_updated_origin, value);
 }
 
 /**
@@ -416,8 +414,7 @@ nl80211_cleanup_l2neigh_data(struct oonf_layer2_neigh *l2neigh) {
 bool
 nl80211_change_l2neigh_data(struct oonf_layer2_neigh *l2neigh,
     enum oonf_layer2_neighbor_index idx, uint64_t value) {
-  return oonf_layer2_data_set_int64(&l2neigh->data[idx], &_layer2_updated_origin,
-      oonf_layer2_neigh_metadata_get(idx), value);
+  return oonf_layer2_data_set_int64(&l2neigh->data[idx], &_layer2_updated_origin, value);
 }
 
 /**
index 45b5778..42e0276 100644 (file)
@@ -264,7 +264,7 @@ oonf_layer2_data_to_string(char *buffer, size_t length,
 bool
 oonf_layer2_data_set(struct oonf_layer2_data *l2data,
     const struct oonf_layer2_origin *origin,
-    const struct oonf_layer2_metadata *meta,
+    enum oonf_layer2_data_type type,
     const union oonf_layer2_value *input) {
   bool changed = false;
 
@@ -272,10 +272,10 @@ oonf_layer2_data_set(struct oonf_layer2_data *l2data,
       || l2data->_origin == NULL
       || l2data->_origin == origin
       || l2data->_origin->priority < origin->priority) {
-    changed = l2data->_type != meta->type
+    changed = l2data->_type != type
         || memcmp(&l2data->_value, input, sizeof(*input)) != 0;
     memcpy(&l2data->_value, input, sizeof(*input));
-    l2data->_type = meta->type;
+    l2data->_type = type;
     l2data->_origin = origin;
   }
   return changed;
index 78eac6b..af33d94 100644 (file)
@@ -394,7 +394,7 @@ EXPORT int oonf_layer2_data_to_string(char *buffer, size_t length,
     const struct oonf_layer2_metadata *meta, bool raw);
 EXPORT bool oonf_layer2_data_set(struct oonf_layer2_data *data,
     const struct oonf_layer2_origin *origin,
-    const struct oonf_layer2_metadata *meta,
+    enum oonf_layer2_data_type type,
     const union oonf_layer2_value *input);
 
 EXPORT struct oonf_layer2_net *oonf_layer2_net_add(const char *ifname);
@@ -642,7 +642,7 @@ oonf_layer2_data_from_string(struct oonf_layer2_data *data,
   if (oonf_layer2_data_parse_string(&value, meta, input)) {
     return false;
   }
-  return oonf_layer2_data_set(data, origin, meta, &value);
+  return oonf_layer2_data_set(data, origin, meta->type, &value);
 }
 
 static INLINE int
@@ -668,12 +668,11 @@ oonf_layer2_neigh_data_to_string(char *buffer, size_t length,
  */
 static INLINE bool
 oonf_layer2_data_set_int64(struct oonf_layer2_data *l2data,
-    const struct oonf_layer2_origin *origin,
-    const struct oonf_layer2_metadata *meta, int64_t integer) {
+    const struct oonf_layer2_origin *origin, int64_t integer) {
   union oonf_layer2_value value = {0};
   value.integer = integer;
 
-  return oonf_layer2_data_set(l2data, origin, meta, &value);
+  return oonf_layer2_data_set(l2data, origin, OONF_LAYER2_INTEGER_DATA, &value);
 }
 
 /**
@@ -685,11 +684,10 @@ oonf_layer2_data_set_int64(struct oonf_layer2_data *l2data,
  */
 static INLINE bool
 oonf_layer2_data_set_bool(struct oonf_layer2_data *l2data,
-    const struct oonf_layer2_origin *origin,
-    const struct oonf_layer2_metadata *meta, bool boolean) {
+    const struct oonf_layer2_origin *origin, bool boolean) {
   union oonf_layer2_value value = {0};
   value.boolean = boolean;
-  return oonf_layer2_data_set(l2data, origin, meta, &value);
+  return oonf_layer2_data_set(l2data, origin, OONF_LAYER2_BOOLEAN_DATA, &value);
 }
 
 static INLINE int