Exemplo n.º 1
0
static int cmd_niconfig(int argc, char** argv) {

	if(argc == 1) {
		int pos = 0;
		NetworkInterface* ni_inter = ni_get(0);
		uint32_t inter_ip = (uint32_t)(uint64_t)ni_config_get(ni_inter, "ip");
		uint32_t inter_gateway = (uint32_t)(uint64_t)ni_config_get(ni_inter, "gw");
		uint32_t inter_netmask = (uint32_t)(uint64_t)ni_config_get(ni_inter, "mask");
		uint16_t inter_port = (uint16_t)(uint64_t)ni_config_get(ni_inter, "pn.lb.port");
		
		NetworkInterface* ni_intra = ni_get(1);
		uint32_t intra_ip = (uint32_t)(uint64_t)ni_config_get(ni_intra, "ip");
		uint32_t intra_gateway = (uint32_t)(uint64_t)ni_config_get(ni_intra, "gw");
		uint32_t intra_netmask = (uint32_t)(uint64_t)ni_config_get(ni_intra, "mask");
		uint16_t intra_port = (uint16_t)(uint64_t)ni_config_get(ni_intra, "pn.lb.config.port");
		pos += sprintf(cmd_result, "inter IP:%d.%d.%d.%d Gateway:%d.%d.%d.%d Mask:%d.%d.%d.%d Port:%d\n", (inter_ip >> 24) & 0xff, (inter_ip >> 16) & 0xff, (inter_ip >> 8) & 0xff, inter_ip & 0xff,
		(inter_gateway >> 24) & 0xff, (inter_gateway >> 16) & 0xff, (inter_gateway >> 8) & 0xff, inter_gateway & 0xff, 
		(inter_netmask >> 24) & 0xff, (inter_netmask >> 16) & 0xff, (inter_netmask >> 8) & 0xff, inter_netmask & 0xff, 
		inter_port);
		pos += sprintf(cmd_result + pos, "intra IP:%d.%d.%d.%d Gateway:%d.%d.%d.%d Mask:%d.%d.%d.%d ConfigPort:%d\n", (intra_ip >> 24) & 0xff, (intra_ip >> 16) & 0xff, (intra_ip >> 8) & 0xff, intra_ip & 0xff, 
		(intra_gateway >> 24) & 0xff, (intra_gateway >> 16) & 0xff, (intra_gateway >> 8) & 0xff, intra_gateway & 0xff, 
		(intra_netmask >> 24) & 0xff, (intra_netmask >> 16) & 0xff, (intra_netmask >> 8) & 0xff, intra_netmask & 0xff, 
		intra_port);
		return 0;

	} else if(argc > 3) {
Exemplo n.º 2
0
bool socket_add(NetworkInterface* ni, uint32_t ip, uint16_t port, Socket* socket) {
	Map* sockets = ni_config_get(ni, SOCKETS);
	if(!sockets) {
		sockets = map_create(16, NULL, NULL, ni->pool);
		if(!sockets) {
			printf("Can'nt create socket table\n");
			return false;
		}

		if(!ni_config_put(ni, SOCKETS, sockets)) {
			map_destroy(sockets);
			return false;
		}
	}

	uint64_t key = (uint64_t)ip << 32 | (uint64_t)port;
	if(!map_put(sockets, (void*)key, socket)) {
		if(map_is_empty(sockets)) {
			map_destroy(sockets);
			ni_config_remove(ni, SOCKETS);
		}
		return false;
	}

	return true;
}
Exemplo n.º 3
0
Service* service_alloc(Endpoint* service_endpoint) {
	bool service_add(NetworkInterface* ni, Service* service) {
		Map* services = ni_config_get(ni, SERVICES);
		if(!services) {
			services = map_create(16, NULL, NULL, ni->pool);
			if(!services)
				return false;
			if(!ni_config_put(ni, SERVICES, services))
				return false;
		}

		uint64_t key = (uint64_t)service->endpoint.protocol << 48 | (uint64_t)service->endpoint.addr << 16 | (uint64_t)service->endpoint.port;

		if(!map_put(services, (void*)key, service)) {
			if(map_is_empty(services)) {
				ni_config_remove(ni, SERVICES);
				map_destroy(services);
			}

			return false;
		} 
		printf("here???\n");

		return true;
	}
Exemplo n.º 4
0
static Endpoint* rip_alloc(NetworkInterface* ni) {
	static int robin;
	
	List* rips = ni_config_get(ni, "pn.lb.rips");
	int idx = (robin++) % list_size(rips);
	
	return list_get(rips, idx);
}
Exemplo n.º 5
0
static void rip_add(uint32_t addr, uint16_t port) {
	Endpoint* endpoint = malloc(sizeof(Endpoint));
	endpoint->addr = addr;
	endpoint->port = port;
	
	NetworkInterface* ni_intra = ni_get(1);
	List* rips = ni_config_get(ni_intra, "pn.lb.rips");
	list_add(rips, endpoint);
}
Exemplo n.º 6
0
Socket* socket_get(NetworkInterface* ni, uint32_t ip, uint16_t port) {
	Map* sockets = ni_config_get(ni, SOCKETS);
	if(!sockets)
		return NULL;

	uint64_t key = (uint64_t)ip << 32 | (uint64_t)port;

	return map_get(sockets, (void*)key);
}
Exemplo n.º 7
0
bool socket_remove(NetworkInterface* ni, uint32_t ip, uint16_t port) {
	Map* sockets = ni_config_get(ni, SOCKETS);
	if(!sockets)
		return false;

	uint64_t key = (uint64_t)ip << 32 | (uint64_t)port;
	Socket* socket = map_remove(sockets, (void*)key);
	if(!socket)
		return false;

	socket_delete(ni, socket);

	if(map_is_empty(sockets)) {
		map_destroy(sockets);
		ni_config_remove(ni, SOCKETS);
	}

	return true;
}