예제 #1
0
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);
}
예제 #2
0
/**
 * 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);
}
예제 #3
0
static void
clear_elements(void) {
  if (db) {
    cfg_db_remove(db);
  }

  db = cfg_db_add();
  cfg_db_link_schema(db, &schema);

  abuf_clear(&out);
}
예제 #4
0
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));
}
예제 #5
0
/**
 * 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);
}