コード例 #1
0
ファイル: pppoe.c プロジェクト: dirkmueller/hwinfo
static void
discovery (int n, PPPoEConnection* conns)
{
    int a;

    if (open_interfaces (n, conns))
    {
	for (a = 0; a < MAX_ATTEMPTS; a++)
	{
	    ADD2LOG ("Attempt number %d\n", a + 1);

	    if (!send_padi (n, conns))
		break;

	    if (wait_for_pado (n, conns))
		break;
	}
    }

    close_intefaces (n, conns);
}
コード例 #2
0
int main(int argc, char** argv) {

	int listening_socket;
	int socket_to_client;
	int yes_local;
	in_port_t port_num;
	struct sockaddr_in local_addr;
	struct sockaddr_in client_addr;
	socklen_t client_len;
	int num_netfpgas;
	struct nf2device *nf2devices[10];

	yes_local=1;

	DPRINTF("Starting proxy...\n");

	if (argc < 4) {
		printf("Usage: reg_proxy_server <num_NetFPGAs> <ip_addr> <port_num>\n");
		printf("   num_NetFPGAs is the number of netfpga card in the system.\n");
		printf("   ip_addr is the address to accept connections on.\n");
		printf("   port_num is the port number to accept connections on.\n");
		exit(0);
	}

	/* get the parameters for the proxy */
	if (!inet_aton(argv[2], &local_addr.sin_addr)) {
		perror("inet_aton");
		fprintf(stderr, "Error: IP address specified is invalid.\n");
		exit(1);
	}

	port_num = strtol(argv[3], NULL, 0);
	if (errno == EINVAL || errno == ERANGE || port_num < 1024 || port_num > 65535) {
	  fprintf(stderr, "Error: port number has to be between 1024 and 65535. Saw %s.\n", argv[3]);
		exit(1);
	}

	num_netfpgas = strtol(argv[1], NULL, 0);
	if (num_netfpgas < 0 || num_netfpgas > 10) {
	  fprintf(stderr, "Error: Number of NetFPGAs has to be between 1 and 10. Saw %s.\n", argv[1]);
		exit(1);
	}
	DPRINTF("Args have been parsed. num_netfpgas=%d\n", num_netfpgas);

	open_interfaces(nf2devices, num_netfpgas);
	DPRINTF("Interfaces now open.\n");

	DPRINTF("Starting a connection...\n");

	/* fill in the local address struct */
	memset(&local_addr, 0, sizeof(SA));
	local_addr.sin_family = AF_INET;
	local_addr.sin_port = htons(port_num);

	/* get a socket fd */
	if ( (listening_socket = socket(PF_INET, SOCK_STREAM, 0)) < 0) {
		perror("socket");
DPRINTF();
				exit(1);
	}

	/* allow reuse to get around port in use problem */
	if (setsockopt(listening_socket, SOL_SOCKET, SO_REUSEADDR, &yes_local,
			sizeof(int)) == -1) {
		perror("setsockopt");
DPRINTF();
        		exit(1);
	}

	/* bind the socket to a port */
	if (bind(listening_socket, (SA *)&local_addr, sizeof(SA)) < 0) {
		perror("bind");
		DPRINTF("Exiting...\n");
		exit(1);
	}

	DPRINTF("Socket is now bound to port %d\n", port_num);

	/* start listening to connections */
	if (listen(listening_socket, 10) < 0) {
		perror("listen");
DPRINTF();
        		close(listening_socket);
		exit(1);
	}

	DPRINTF("Now listening to connections\n");

	/* loop until we are interrupted, servicing every request */
	while (1) {
		client_len=sizeof(client_addr);
		/* accept the connection and start parsing */
		if ( (socket_to_client = accept(listening_socket, (SA *) &client_addr,
				&client_len)) < 0) {
DPRINTF();
            			perror("accept");
			continue;
		}

		DPRINTF("Accepted connection from client");

		/* read the request, parse,
		 * send response back to client */
		if (parse_request(socket_to_client, nf2devices, num_netfpgas) < 0) {
DPRINTF();
            			fprintf(stderr, "Error parsing the request\n");
		}
		close(socket_to_client);
	}

	return 0;
}