Esempio n. 1
0
static void print_get_dscp(pcp_flow_t* f)
{
    size_t cnt=0;
     pcp_flow_info_t *info_buf = NULL;
     pcp_flow_info_t *ret = pcp_flow_get_info(f, &cnt);
     info_buf=ret;

     printf("%-20s %5s %3s %5s %s\n",
             "Int. IP", "DSCP",
             "Res", "State","Ends");
     for (; cnt>0; cnt--, ret++) {
         char ntop_buff[INET6_ADDRSTRLEN];
         char timebuf[32];
         printf("%-20s %5d %3d %5s %s",
                 inet_ntop(AF_INET6, &ret->int_ip, ntop_buff,
                     sizeof(ntop_buff)),
                 (int)ret->learned_dscp,
                 (int)ret->pcp_result_code,
                 decode_fresult(ret->result),
                 ret->recv_lifetime_end == 0 ? " -\n" :
                         ctime_r(&ret->recv_lifetime_end, timebuf)); //LCOV_EXCL_LINE
     }
     if (info_buf) {
         free(info_buf);
     }
}
Esempio n. 2
0
static int check_flow_info(pcp_flow_t* f)
{
    size_t cnt=0;
    pcp_flow_info_t *info_buf = NULL;
    pcp_flow_info_t *ret = pcp_flow_get_info(f,&cnt);
    int ret_val = 2;
    info_buf=ret;
    for (; cnt>0; cnt--, ret++) {
        switch(ret->result)
        {
        case pcp_state_succeeded:
            printf("\nFlow signaling succeeded.\n");
            ret_val = 0;
            break;
        case pcp_state_short_lifetime_error:
            printf("\nFlow signaling failed. Short lifetime error received.\n");
            ret_val = 3;
            break;
        case pcp_state_failed:
            printf("\nFlow signaling failed.\n");
            ret_val = 4;
            break;
        default:
            continue;
        }
        break;
    }

    if (info_buf) {
        free(info_buf);
    }

    return ret_val;
}
Esempio n. 3
0
static void print_ext_addr(pcp_flow_t* f)
{
    size_t cnt=0;
    pcp_flow_info_t *info_buf = NULL;
    pcp_flow_info_t *ret = pcp_flow_get_info(f,&cnt);
    info_buf=ret;

    printf("%-20s %-4s %-20s %5s   %-20s %5s   %-20s %5s %3s %5s %s\n",
            "PCP Server IP",
            "Prot",
            "Int. IP", "port",
            "Dst. IP", "port",
            "Ext. IP", "port",
            "Res", "State","Ends");
    for (; cnt>0; cnt--, ret++) {
        char ntop_buffs[4][INET6_ADDRSTRLEN];
        char timebuf[32];

        printf("%-20s %-4s %-20s %5hu   %-20s %5hu   %-20s %5hu %3d %5s %s",
                inet_ntop(AF_INET6, &ret->pcp_server_ip, ntop_buffs[0],
                    sizeof(ntop_buffs[0])),
                ret->protocol == IPPROTO_TCP ? "TCP" : (
                   ret->protocol == IPPROTO_UDP ? "UDP" : "UNK"),
                inet_ntop(AF_INET6, &ret->int_ip, ntop_buffs[1],
                    sizeof(ntop_buffs[1])),
                ntohs(ret->int_port),
                inet_ntop(AF_INET6, &ret->dst_ip, ntop_buffs[2],
                    sizeof(ntop_buffs[2])),
                ntohs(ret->dst_port),
                inet_ntop(AF_INET6, &ret->ext_ip, ntop_buffs[3],
                    sizeof(ntop_buffs[3])),
                ntohs(ret->ext_port),
                ret->pcp_result_code,
                decode_fresult(ret->result),
                ret->recv_lifetime_end == 0 ? " -\n" :
                        ctime_r(&ret->recv_lifetime_end, timebuf));
    }
    if (info_buf) {
        free(info_buf);
    }
}
Esempio n. 4
0
int main(void)
{
    pcp_flow_t *f1, *f2;
    pcp_ctx_t *ctx;

    pcp_log_level = PCP_DEBUG_NONE;

    PD_SOCKET_STARTUP();
    //test pcp_init & terminate
    ctx = pcp_init(DISABLE_AUTODISCOVERY, NULL);
    TEST(get_pcp_server(ctx, 0)==NULL);
    pcp_terminate(ctx, 1);
    ctx = pcp_init(ENABLE_AUTODISCOVERY, NULL);
    TEST(get_pcp_server(ctx, 0)!=NULL);
    pcp_terminate(ctx, 1);
    TEST(get_pcp_server(ctx, 0)==NULL);

    ctx = pcp_init(DISABLE_AUTODISCOVERY, NULL);
    TEST(pcp_add_server(ctx, Sock_pton("127.0.0.1:5351"), 2)==0);
#ifdef PCP_USE_IPV6_SOCKET
    TEST(pcp_add_server(ctx, Sock_pton("[::1]:5351"), 1)==1);
#endif
    pcp_terminate(ctx, 1);

#ifdef PCP_SADSCP
    //TEST learn DSCP
    {
        pcp_flow_t* l1;
        ctx = pcp_init(DISABLE_AUTODISCOVERY, NULL);
        TEST((l1=pcp_learn_dscp(ctx, 1,1,1,NULL))==NULL); //NO PCP server to send req

        TEST(pcp_add_server(ctx, Sock_pton("127.0.0.1:5351"), 2)==0);
        TEST((l1=pcp_learn_dscp(ctx, 1,1,1,NULL))!=NULL);
        TEST(l1->kd.operation==PCP_OPCODE_SADSCP);
        TEST(l1->sadscp_app_name==NULL);
        TEST(l1->sadscp.app_name_length==0);
        TEST(l1->sadscp.toler_fields==84);
        pcp_close_flow(l1);
        pcp_delete_flow(l1);

        TEST((l1=pcp_learn_dscp(ctx, 2,2,2,"test"))!=NULL);
        TEST(l1->sadscp.app_name_length==4);
        TEST(strncmp(l1->sadscp_app_name,"test",l1->sadscp.app_name_length)==0);
        TEST(l1->sadscp.toler_fields==168);

        pcp_terminate(ctx, 1);
    }
#endif

    ctx = pcp_init(DISABLE_AUTODISCOVERY, NULL);
    TEST(pcp_add_server(ctx, Sock_pton("127.0.0.1:5351"), 2)==0);
    TEST((pcp_new_flow(ctx, Sock_pton("[::1]:1234"), Sock_pton("[::1]"), NULL,
            IPPROTO_TCP, 100, NULL))==NULL);

    pcp_pulse(NULL, NULL);
    pcp_pulse(ctx, NULL);
    pcp_flow_get_info(NULL, NULL, NULL);

    //PCP PEER/MAP tests
    TEST(pcp_new_flow(NULL, NULL, NULL, NULL, 0, 0, NULL)==NULL);
    TEST(pcp_new_flow(ctx, NULL, NULL, NULL, 0, 0, NULL)==NULL);

    TEST((f1=pcp_new_flow(ctx, Sock_pton("127.0.0.1:1234"), Sock_pton("127.0.0.1"), NULL,
            IPPROTO_TCP, 100, NULL))!=NULL);
    TEST((f2=pcp_new_flow(ctx, Sock_pton("127.0.0.1:1234"), NULL, NULL,
            IPPROTO_TCP, 100, NULL))!=NULL);
    pcp_flow_set_prefer_failure_opt(f2);
    pcp_flow_set_prefer_failure_opt(f2);

    pcp_flow_set_lifetime(f1, 1000);
    TEST((f1->lifetime)>=99);
    TEST((f1->timeout.tv_sec>0)||(f1->timeout.tv_usec>0));

    f1->timeout.tv_sec=0;
    f1->timeout.tv_usec=0;
    pcp_flow_set_lifetime(f1, 0);
    TEST(f1->lifetime==0);
    TEST((f1->timeout.tv_sec>0)||(f1->timeout.tv_usec>0));

    pcp_set_3rd_party_opt(f1,NULL);

    printf("Tests succeeded.\n\n");

    PD_SOCKET_CLEANUP();
    return 0;
}