X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=tests%2Ftest-sflow.c;h=8f9ccf473d3b5bc1d6434eec6070da805caaccb5;hb=600766e877efa2713b9c87d127f7190d8ab48da9;hp=3e3c45014f699f572fb7889a07da8d8edb475220;hpb=bdd0bd2873415838643e42a1e4c08319fe8d3b8b;p=cascardo%2Fovs.git diff --git a/tests/test-sflow.c b/tests/test-sflow.c index 3e3c45014..8f9ccf473 100644 --- a/tests/test-sflow.c +++ b/tests/test-sflow.c @@ -63,6 +63,7 @@ static unixctl_cb_func test_sflow_exit; #define SFLOW_TAG_PKT_TUNNEL4_IN 1024 #define SFLOW_TAG_PKT_TUNNEL_VNI_OUT 1029 #define SFLOW_TAG_PKT_TUNNEL_VNI_IN 1030 +#define SFLOW_TAG_PKT_MPLS 1006 /* string sizes */ #define SFL_MAX_PORTNAME_LEN 255 @@ -113,6 +114,7 @@ struct sflow_xdr { uint32_t TUNNEL4_IN; uint32_t TUNNEL_VNI_OUT; uint32_t TUNNEL_VNI_IN; + uint32_t MPLS; uint32_t IFCOUNTERS; uint32_t LACPCOUNTERS; uint32_t OPENFLOWPORT; @@ -239,7 +241,7 @@ process_counter_sample(struct sflow_xdr *x) printf("\n"); } if (x->offset.LACPCOUNTERS) { - uint8_t *mac; + struct eth_addr *mac; union { ovs_be32 all; struct { @@ -252,11 +254,11 @@ process_counter_sample(struct sflow_xdr *x) sflowxdr_setc(x, x->offset.LACPCOUNTERS); printf("LACPCOUNTERS"); - mac = (uint8_t *)sflowxdr_str(x); - printf(" sysID="ETH_ADDR_FMT, ETH_ADDR_ARGS(mac)); + mac = (void *)sflowxdr_str(x); + printf(" sysID="ETH_ADDR_FMT, ETH_ADDR_ARGS(*mac)); sflowxdr_skip(x, 2); - mac = (uint8_t *)sflowxdr_str(x); - printf(" partnerID="ETH_ADDR_FMT, ETH_ADDR_ARGS(mac)); + mac = (void *)sflowxdr_str(x); + printf(" partnerID="ETH_ADDR_FMT, ETH_ADDR_ARGS(*mac)); sflowxdr_skip(x, 2); printf(" aggID=%"PRIu32, sflowxdr_next(x)); state.all = sflowxdr_next_n(x); @@ -264,12 +266,12 @@ process_counter_sample(struct sflow_xdr *x) printf(" actorOper=0x%"PRIx32, state.v.actorOper); printf(" partnerAdmin=0x%"PRIx32, state.v.partnerAdmin); printf(" partnerOper=0x%"PRIx32, state.v.partnerOper); - printf(" LACPUDsRx=%"PRIu32, sflowxdr_next(x)); + printf(" LACPDUsRx=%"PRIu32, sflowxdr_next(x)); printf(" markerPDUsRx=%"PRIu32, sflowxdr_next(x)); printf(" markerRespPDUsRx=%"PRIu32, sflowxdr_next(x)); printf(" unknownRx=%"PRIu32, sflowxdr_next(x)); printf(" illegalRx=%"PRIu32, sflowxdr_next(x)); - printf(" LACPUDsTx=%"PRIu32, sflowxdr_next(x)); + printf(" LACPDUsTx=%"PRIu32, sflowxdr_next(x)); printf(" markerPDUsTx=%"PRIu32, sflowxdr_next(x)); printf(" markerRespPDUsTx=%"PRIu32, sflowxdr_next(x)); printf("\n"); @@ -379,6 +381,32 @@ process_flow_sample(struct sflow_xdr *x) printf( " tunnel_out_vni=%"PRIu32, sflowxdr_next(x)); } + if (x->offset.MPLS) { + uint32_t addr_type, stack_depth, ii; + ovs_be32 mpls_lse; + sflowxdr_setc(x, x->offset.MPLS); + /* OVS only sets the out_stack. The rest will be blank. */ + /* skip next hop address */ + addr_type = sflowxdr_next(x); + sflowxdr_skip(x, addr_type == SFLOW_ADDRTYPE_IP6 ? 4 : 1); + /* skip in_stack */ + stack_depth = sflowxdr_next(x); + sflowxdr_skip(x, stack_depth); + /* print out_stack */ + stack_depth = sflowxdr_next(x); + for(ii = 0; ii < stack_depth; ii++) { + mpls_lse=sflowxdr_next_n(x); + printf(" mpls_label_%"PRIu32"=%"PRIu32, + ii, mpls_lse_to_label(mpls_lse)); + printf(" mpls_tc_%"PRIu32"=%"PRIu32, + ii, mpls_lse_to_tc(mpls_lse)); + printf(" mpls_ttl_%"PRIu32"=%"PRIu32, + ii, mpls_lse_to_ttl(mpls_lse)); + printf(" mpls_bos_%"PRIu32"=%"PRIu32, + ii, mpls_lse_to_bos(mpls_lse)); + } + } + if (x->offset.SWITCH) { sflowxdr_setc(x, x->offset.SWITCH); printf(" in_vlan=%"PRIu32, sflowxdr_next(x)); @@ -578,6 +606,10 @@ process_datagram(struct sflow_xdr *x) sflowxdr_mark_unique(x, &x->offset.TUNNEL_VNI_IN); break; + case SFLOW_TAG_PKT_MPLS: + sflowxdr_mark_unique(x, &x->offset.MPLS); + break; + /* Add others here... */ } @@ -634,7 +666,7 @@ test_sflow_main(int argc, char *argv[]) int error; int sock; - proctitle_init(argc, argv); + ovs_cmdl_proctitle_init(argc, argv); set_program_name(argv[0]); service_start(&argc, &argv); parse_options(argc, argv); @@ -651,7 +683,7 @@ test_sflow_main(int argc, char *argv[]) } daemon_save_fd(STDOUT_FILENO); - daemonize_start(); + daemonize_start(false); error = unixctl_server_create(NULL, &server); if (error) { @@ -685,6 +717,8 @@ test_sflow_main(int argc, char *argv[]) unixctl_server_wait(server); poll_block(); } + ofpbuf_uninit(&buf); + unixctl_server_destroy(server); } static void @@ -701,7 +735,7 @@ parse_options(int argc, char *argv[]) VLOG_LONG_OPTIONS, {NULL, 0, NULL, 0}, }; - char *short_options = long_options_to_short_options(long_options); + char *short_options = ovs_cmdl_long_options_to_short_options(long_options); for (;;) { int c = getopt_long(argc, argv, short_options, long_options, NULL);