Ejemplo n.º 1
0
int main(int argc, char **argv)
{
    int c;
    char *host   = ((char*)(DEFAULT_HOST));
    char *user = 0;
    char *server = ((char*)(DEFAULT_SERVER));
    char *rtable = ((char*)(DEFAULT_RTABLE));
    char *sr_template = NULL;
    unsigned int port = DEFAULT_PORT;
    unsigned int topo = DEFAULT_TOPO;
    char *logfile = 0;
    struct sr_instance sr;

    sr.f_interface[0] = 'n';
    sr.f_interface[1] = 'o';
    sr.f_interface[2] = '\0';

    sr.number_of_lsus = 5;


    printf("Using %s\n", VERSION_INFO);

    while ((c = getopt(argc, argv, "hs:v:p:u:t:r:l:T:f:c:")) != EOF)
    {
        switch (c)
        {
            case 'h':
                usage(argv[0]);
                exit(0);
                break;
            case 'p':
                port = atoi((char *) optarg);
                break;
            case 't':
                topo = atoi((char *) optarg);
                break;
            case 'v':
                host = optarg;
                break;
            case 'u':
                user = optarg;
                break;
            case 's':
                server = optarg;
                break;
            case 'l':
                logfile = optarg;
                break;
            case 'r':
                rtable = optarg;
                break;
            case 'T':
                sr_template = optarg;
                break;

            case 'f':
                for (unsigned int i = 0; i < strlen(optarg); i++)
                {
                    sr.f_interface[i] = optarg[i];
                }
                sr.f_interface[strlen(optarg)] = '\0';
                break;

            case 'c':
                sr.number_of_lsus = atoi((char *) optarg);
                break;

        } /* switch */
    } /* -- while -- */

    /* -- zero out sr instance -- */
    sr_init_instance(&sr);

    /* -- set up routing table from file -- */
    if(sr_template == NULL) {
        sr.sr_template[0] = '\0';
        sr_load_rt_wrap(&sr, rtable);
    }
    else
        strncpy(sr.sr_template, sr_template, 30);

    sr.topo_id = topo;
    strncpy(sr.host,host,32);

    if(! user )
    { sr_set_user(&sr); }
    else
    { strncpy(sr.user, user, 32); }

    /* -- set up file pointer for logging of raw packets -- */
    if(logfile != 0)
    {
        sr.logfile = sr_dump_open(logfile,0,PACKET_DUMP_SIZE);
        if(!sr.logfile)
        {
            fprintf(stderr,"Error opening up dump file %s\n",
                    logfile);
            exit(1);
        }
    }

    Debug("Client %s connecting to Server %s:%d\n", sr.user, server, port);
    if(sr_template)
        Debug("Requesting topology template %s\n", sr_template);
    else {
        Debug("Requesting topology %d\n", topo);
        port = 12345; /* DGU TMP: use old port (no auth needed) */
        Debug("(falling back to original port for -t type connection)\n");
    }

    /* connect to server and negotiate session */
    if(sr_connect_to_server(&sr,port,server) == -1)
    {
        return 1;
    }

    if(sr_template != NULL) { /* we've recv'd the rtable now, so read it in */
        Debug("Connected to new instantiation of topology template %s\n", sr_template);
        sr_load_rt_wrap(&sr, ((char*)("rtable.vrhost")));
    }

    /* call router init (for arp subsystem etc.) */
    sr_init(&sr);

    /* -- whizbang main loop ;-) */
    while( sr_read_from_server(&sr) == 1);

    sr_destroy_instance(&sr);

    return 0;
}/* -- main -- */
Ejemplo n.º 2
0
int main(int argc, char **argv)
{
    int c;
    char *host   = DEFAULT_HOST;
    char *client = 0;
    char *server = DEFAULT_SERVER;
    char *rtable = DEFAULT_RTABLE;
    unsigned int port = DEFAULT_PORT;
    unsigned int topo = DEFAULT_TOPO;
    char *logfile = 0;
    struct sr_instance sr;

    while ((c = getopt(argc, argv, "hs:v:p:c:t:r:l:")) != EOF)
    {
        switch (c) 
        {
            case 'h':
                usage(argv[0]); 
                exit(0);
                break;
            case 'p':
                port = atoi((char *) optarg);
                break;
            case 't':
                topo = atoi((char *) optarg);
                break;
            case 'v':
                host = optarg; 
                break;
            case 'c':
                client = optarg; 
                break;
            case 's':
                server = optarg; 
                break;
            case 'l':
                logfile = optarg; 
                break;
            case 'r':
                rtable = optarg; 
                break;
        } /* switch */
    } /* -- while -- */

    /* -- zero out sr instance -- */
    sr_init_instance(&sr);

    /* -- set up routing table from file -- */
    if(sr_load_rt(&sr, rtable) != 0)
    {
        fprintf(stderr,"Error setting up routing table from file %s\n",
                rtable);
        exit(1);
    }


    printf("Loading routing table\n");
    printf("---------------------------------------------\n");
    sr_print_routing_table(&sr);
    printf("---------------------------------------------\n");

    sr.topo_id = topo;
    strncpy(sr.host,host,32);

    if(! client )
    { sr_set_user(&sr); }
    else
    { strncpy(sr.user, client, 32); }

    /* -- set up file pointer for logging of raw packets -- */
    if(logfile != 0)
    {
        sr.logfile = sr_dump_open(logfile,0,PACKET_DUMP_SIZE);  
        if(!sr.logfile)
        {
            fprintf(stderr,"Error opening up dump file %s\n",
                    logfile);
            exit(1);
        }
    }

    Debug("Client %s connecting to Server %s:%d\n", sr.user, server, port);
    Debug("Requesting topology %d\n", topo);

    /* connect to server and negotiate session */
    if(sr_connect_to_server(&sr,port,server) == -1)
    {
        return 1;
    }

    /* call router init (for arp subsystem etc.) */
    sr_init(&sr);
    
    /* -- whizbang main loop ;-) */
    while( sr_read_from_server(&sr) == 1);
   
    sr_destroy_instance(&sr);

    return 0;
}/* -- main -- */