static void clear_elements(void) { if (db) { cfg_db_remove(db); } db = cfg_db_add(); cfg_db_link_schema(db, &schema); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "stringarray", "abc"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "printable", "printme"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "printable_array", "print"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "choice", "choice2"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "int", "42"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "int_minmax", "-5"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "fractional", "3.1415"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "fractional_minmax", "-3.1415"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "netaddr", "10::1"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "mac", "00:11:22:33:4:5"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "mac48", "a:b:c:d:e:f"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "eui64", "1-2-3-4-5-6-7-8"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "ipv4", "192.168.0.1"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "ipv6", "aa::bb"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "ipv46", "10.0.0.1"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "p_netaddr", "10::1/127"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "p_mac", "00:11:22:33:4:5/12"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "p_mac48", "a:b:c:d:e:f/7"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "p_eui64", "1-2-3-4-5-6-7-8/54"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "p_ipv4", "192.168.0.1/9"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "p_ipv6", "aa::bb/31"); cfg_db_overwrite_entry(db, CFG_SEC, CFG_SECNAME, "p_ipv46", "10.0.0.1/17"); abuf_clear(&out); }
/** * Callback to send multicast over interface * @param session dlep session * @param af_family address family for multicast */ static void _cb_send_multicast(struct dlep_session *session, int af_family) { struct dlep_if *interf; if (abuf_getlen(session->writer.out) <= sizeof(_DLEP_PREFIX) - 1 || !netaddr_socket_is_unspec(&session->remote_socket)) { return; } /* get pointer to radio interface */ interf = container_of(session, struct dlep_if, session); if (interf->session_tree.count > 0 && interf->single_session) { /* do not produce UDP traffic as long as we are connected */ return; } OONF_DEBUG(session->log_source, "Send multicast %" PRINTF_SIZE_T_SPECIFIER " bytes", abuf_getlen(session->writer.out)); oonf_packet_send_managed_multicast(&interf->udp, abuf_getptr(session->writer.out), abuf_getlen(session->writer.out), af_family); abuf_clear(session->writer.out); /* add dlep prefix to buffer */ abuf_memcpy(session->writer.out, _DLEP_PREFIX, sizeof(_DLEP_PREFIX) - 1); }
static void clear_elements(void) { if (db) { cfg_db_remove(db); } db = cfg_db_add(); cfg_db_link_schema(db, &schema); abuf_clear(&out); }
static void clear_elements(void) { if (db_pre) { cfg_db_remove(db_pre); } db_pre = cfg_db_add(); cfg_db_link_schema(db_pre, &schema); if (db_post) { cfg_db_remove(db_post); } db_post = cfg_db_add(); cfg_db_link_schema(db_post, &schema); abuf_clear(&out); callback_counter = 0; memset(callback_marker, 0, sizeof(callback_marker)); }
/** * Callback to receive UDP data through oonf_packet_managed API * @param pkt packet socket * @param from network socket the packet was received from * @param ptr pointer to packet data * @param length length of packet data */ static void _cb_receive_udp(struct oonf_packet_socket *pkt, union netaddr_socket *from, void *ptr, size_t length) { struct dlep_if *interf; uint8_t *buffer; ssize_t processed; struct netaddr_str nbuf; interf = pkt->config.user; buffer = ptr; if (interf->session_tree.count > 0 && interf->single_session) { /* ignore UDP traffic as long as we have a connection */ return; } if (length < sizeof(_DLEP_PREFIX) - 1) { /* ignore unknown prefix */ return; } if (memcmp(buffer, _DLEP_PREFIX, sizeof(_DLEP_PREFIX)-1) != 0) { OONF_WARN(interf->session.log_source, "Incoming UDP packet with unknown signature"); return; } /* advance pointer and fix length */ buffer += (sizeof(_DLEP_PREFIX) - 1); length -= (sizeof(_DLEP_PREFIX) - 1); /* copy socket information */ memcpy(&interf->session.remote_socket, from, sizeof(interf->session.remote_socket)); processed = dlep_session_process_buffer(&interf->session, buffer, length); if (processed < 0) { return ; } if ((size_t)processed < length) { OONF_WARN(interf->session.log_source, "Received malformed or too short UDP packet from %s", netaddr_socket_to_string(&nbuf, from)); /* incomplete or bad packet, just ignore it */ return; } if (abuf_getlen(interf->session.writer.out) > sizeof(_DLEP_PREFIX) - 1) { /* send an unicast response */ oonf_packet_send_managed(&interf->udp, from, abuf_getptr(interf->session.writer.out), abuf_getlen(interf->session.writer.out)); abuf_clear(interf->session.writer.out); /* add dlep prefix to buffer */ abuf_memcpy(interf->session.writer.out, _DLEP_PREFIX, sizeof(_DLEP_PREFIX) - 1); } netaddr_socket_invalidate(&interf->session.remote_socket); }