コード例 #1
0
static int process_overlapping_pfx(struct bgpcorsaro_pfxmonitor_state_t *state,
                                   const bgpstream_record_t *bs_record,
                                   const bgpstream_elem_t *elem)
{
  char log_buffer[MAX_LOG_BUFFER_LEN] = "";
  bgpstream_as_path_seg_t *origin_seg = NULL;
  uint32_t origin_asn = 0;

  if (elem->type == BGPSTREAM_ELEM_TYPE_WITHDRAWAL) {
    /* remove pfx/peer from state structure */
    rm_pfx_peer(state, &elem->prefix, elem->peer_asnumber);
  } else /* (announcement or rib) */
  {
    /* get the origin asn (sets and confederations are ignored) */
    origin_seg = bgpstream_as_path_get_origin_seg(elem->aspath);
    if (origin_seg == NULL || origin_seg->type != BGPSTREAM_AS_PATH_SEG_ASN) {
      fprintf(stderr, "WARN: ignoring AS sets and confederations\n");
    } else {
      /* valid origin ASN */
      origin_asn = ((bgpstream_as_path_seg_asn_t *)origin_seg)->asn;
      if (set_pfx_peer_origin(state, &elem->prefix, elem->peer_asnumber,
                              origin_asn) != 0) {
        return -1;
      }
    }
  }

  /* we always print all the info to the log */
  bgpstream_record_elem_snprintf(log_buffer, MAX_LOG_BUFFER_LEN, bs_record,
                                 elem);
  wandio_printf(state->outfile, "%s\n", log_buffer);
  return 0;
}
コード例 #2
0
ファイル: bgpreader.c プロジェクト: alhaol/bgpstream
static int print_elem(bgpstream_record_t *bs_record, bgpstream_elem_t *elem)
{
  assert(bs_record);
  assert(elem);
  int len = 65536;

  if(bgpstream_record_elem_snprintf(elem_buf, len, bs_record, elem) != NULL)
    {
      printf("%s\n", elem_buf);
      return 0;
    }

  return -1;
}