Shift more internal ports to new interface

This commit is contained in:
Jeremy Lakeman 2014-01-29 16:53:19 +10:30
parent 6f75d93460
commit 20e2b2fdd7
3 changed files with 23 additions and 39 deletions

View File

@ -201,10 +201,10 @@ int load_subscriber_address(struct subscriber *subscriber)
/* Collection of unicast echo responses to detect working links */ /* Collection of unicast echo responses to detect working links */
int int
overlay_mdp_service_probe(struct internal_mdp_header *header, overlay_mdp_frame *mdp) overlay_mdp_service_probe(struct internal_mdp_header *header, struct overlay_buffer *payload)
{ {
IN(); IN();
if (mdp->out.src.port!=MDP_PORT_ECHO){ if (header->source_port!=MDP_PORT_ECHO){
WARN("Probe packets should be returned from remote echo port"); WARN("Probe packets should be returned from remote echo port");
RETURN(-1); RETURN(-1);
} }
@ -212,14 +212,14 @@ overlay_mdp_service_probe(struct internal_mdp_header *header, overlay_mdp_frame
if (header->source->reachable == REACHABLE_SELF) if (header->source->reachable == REACHABLE_SELF)
RETURN(0); RETURN(0);
uint8_t interface = mdp->out.payload[0]; uint8_t interface = ob_get(payload);
struct socket_address addr; struct socket_address addr;
addr.addrlen = mdp->out.payload_length - 1; addr.addrlen = ob_remaining(payload);
if (addr.addrlen > sizeof(addr.store)) if (addr.addrlen > sizeof(addr.store))
RETURN(-1); RETURN(-1);
bcopy(&mdp->out.payload[1], &addr.addr, addr.addrlen); ob_get_bytes(payload, (unsigned char*)&addr.addr, addr.addrlen);
RETURN(link_unicast_ack(header->source, &overlay_interfaces[interface], &addr)); RETURN(link_unicast_ack(header->source, &overlay_interfaces[interface], &addr));
OUT(); OUT();
@ -286,20 +286,17 @@ static void overlay_append_unicast_address(struct subscriber *subscriber, struct
} }
} }
int overlay_mdp_service_stun_req(overlay_mdp_frame *mdp) int overlay_mdp_service_stun_req(struct internal_mdp_header *header, struct overlay_buffer *payload)
{ {
if (config.debug.overlayrouting) if (config.debug.overlayrouting)
DEBUGF("Processing STUN request from %s", alloca_tohex_sid_t(mdp->out.src.sid)); DEBUGF("Processing STUN request from %s", alloca_tohex_sid_t(header->source->sid));
struct overlay_buffer *payload = ob_static(mdp->out.payload, mdp->out.payload_length);
ob_limitsize(payload, mdp->out.payload_length);
overlay_mdp_frame reply; overlay_mdp_frame reply;
bzero(&reply, sizeof(reply)); bzero(&reply, sizeof(reply));
reply.packetTypeAndFlags=MDP_TX; reply.packetTypeAndFlags=MDP_TX;
reply.out.dst.sid = mdp->out.src.sid; reply.out.dst.sid = header->source->sid;
reply.out.src.sid = mdp->out.dst.sid; reply.out.src.sid = header->destination?header->destination->sid:my_subscriber->sid;
reply.out.src.port=MDP_PORT_STUNREQ; reply.out.src.port=MDP_PORT_STUNREQ;
reply.out.dst.port=MDP_PORT_STUN; reply.out.dst.port=MDP_PORT_STUN;
reply.out.queue=OQ_MESH_MANAGEMENT; reply.out.queue=OQ_MESH_MANAGEMENT;
@ -330,31 +327,27 @@ int overlay_mdp_service_stun_req(overlay_mdp_frame *mdp)
overlay_mdp_dispatch(&reply, NULL); overlay_mdp_dispatch(&reply, NULL);
} }
ob_free(replypayload); ob_free(replypayload);
ob_free(payload);
return 0; return 0;
} }
int overlay_mdp_service_stun(overlay_mdp_frame *mdp) int overlay_mdp_service_stun(struct internal_mdp_header *header, struct overlay_buffer *payload)
{ {
struct overlay_buffer *buff = ob_static(mdp->out.payload, mdp->out.payload_length);
ob_limitsize(buff, mdp->out.payload_length);
if (config.debug.overlayrouting) if (config.debug.overlayrouting)
DEBUGF("Processing STUN info from %s", alloca_tohex_sid_t(mdp->out.src.sid)); DEBUGF("Processing STUN info from %s", alloca_tohex_sid_t(header->source->sid));
while(ob_remaining(buff)>0){ while(ob_remaining(payload)>0){
struct subscriber *subscriber=NULL; struct subscriber *subscriber=NULL;
// TODO explain addresses, link expiry time, resolve differences between addresses... // TODO explain addresses, link expiry time, resolve differences between addresses...
if (overlay_address_parse(NULL, buff, &subscriber)){ if (overlay_address_parse(NULL, payload, &subscriber)){
break; break;
} }
struct socket_address addr; struct socket_address addr;
addr.addrlen = sizeof(addr.inet); addr.addrlen = sizeof(addr.inet);
addr.inet.sin_family = AF_INET; addr.inet.sin_family = AF_INET;
addr.inet.sin_addr.s_addr = ob_get_ui32(buff); addr.inet.sin_addr.s_addr = ob_get_ui32(payload);
addr.inet.sin_port = ob_get_ui16(buff); addr.inet.sin_port = ob_get_ui16(payload);
if (!subscriber || (subscriber->reachable!=REACHABLE_NONE)) if (!subscriber || (subscriber->reachable!=REACHABLE_NONE))
continue; continue;
@ -365,8 +358,6 @@ int overlay_mdp_service_stun(overlay_mdp_frame *mdp)
release_destination_ref(destination); release_destination_ref(destination);
} }
} }
ob_free(buff);
return 0; return 0;
} }

View File

@ -122,7 +122,7 @@ int overlay_mdp_service_rhizomerequest(struct internal_mdp_header *header, struc
return rhizome_mdp_send_block(header->source, bidp, version, fileOffset, bitmap, blockLength); return rhizome_mdp_send_block(header->source, bidp, version, fileOffset, bitmap, blockLength);
} }
int overlay_mdp_service_rhizomeresponse(struct overlay_buffer *payload) int overlay_mdp_service_rhizomeresponse(struct internal_mdp_header *UNUSED(header), struct overlay_buffer *payload)
{ {
IN(); IN();
@ -366,6 +366,10 @@ void overlay_mdp_bind_internal_services()
mdp_bind_internal(NULL, MDP_PORT_RHIZOME_REQUEST, overlay_mdp_service_rhizomerequest); mdp_bind_internal(NULL, MDP_PORT_RHIZOME_REQUEST, overlay_mdp_service_rhizomerequest);
mdp_bind_internal(NULL, MDP_PORT_RHIZOME_MANIFEST_REQUEST, overlay_mdp_service_manifest_requests); mdp_bind_internal(NULL, MDP_PORT_RHIZOME_MANIFEST_REQUEST, overlay_mdp_service_manifest_requests);
mdp_bind_internal(NULL, MDP_PORT_RHIZOME_SYNC, overlay_mdp_service_rhizome_sync); mdp_bind_internal(NULL, MDP_PORT_RHIZOME_SYNC, overlay_mdp_service_rhizome_sync);
mdp_bind_internal(NULL, MDP_PORT_RHIZOME_RESPONSE, overlay_mdp_service_rhizomeresponse);
mdp_bind_internal(NULL, MDP_PORT_PROBE, overlay_mdp_service_probe);
mdp_bind_internal(NULL, MDP_PORT_STUNREQ, overlay_mdp_service_stun_req);
mdp_bind_internal(NULL, MDP_PORT_STUN, overlay_mdp_service_stun);
} }
int overlay_mdp_try_internal_services( int overlay_mdp_try_internal_services(
@ -388,17 +392,6 @@ int overlay_mdp_try_internal_services(
case MDP_PORT_TRACE: case MDP_PORT_TRACE:
overlay_mdp_fill_legacy(header, payload, &mdp); overlay_mdp_fill_legacy(header, payload, &mdp);
RETURN(overlay_mdp_service_trace(&mdp)); RETURN(overlay_mdp_service_trace(&mdp));
case MDP_PORT_PROBE:
overlay_mdp_fill_legacy(header, payload, &mdp);
RETURN(overlay_mdp_service_probe(header, &mdp));
case MDP_PORT_STUNREQ:
overlay_mdp_fill_legacy(header, payload, &mdp);
RETURN(overlay_mdp_service_stun_req(&mdp));
case MDP_PORT_STUN:
overlay_mdp_fill_legacy(header, payload, &mdp);
RETURN(overlay_mdp_service_stun(&mdp));
case MDP_PORT_RHIZOME_RESPONSE:
RETURN(overlay_mdp_service_rhizomeresponse(payload));
} }
/* Unbound socket. We won't be sending ICMP style connection refused /* Unbound socket. We won't be sending ICMP style connection refused

View File

@ -513,9 +513,9 @@ void monitor_poll(struct sched_ent *alarm);
void rhizome_fetch_poll(struct sched_ent *alarm); void rhizome_fetch_poll(struct sched_ent *alarm);
void rhizome_server_poll(struct sched_ent *alarm); void rhizome_server_poll(struct sched_ent *alarm);
int overlay_mdp_service_stun_req(overlay_mdp_frame *mdp); int overlay_mdp_service_stun_req(struct internal_mdp_header *header, struct overlay_buffer *payload);
int overlay_mdp_service_stun(overlay_mdp_frame *mdp); int overlay_mdp_service_stun(struct internal_mdp_header *header, struct overlay_buffer *payload);
int overlay_mdp_service_probe(struct internal_mdp_header *header, overlay_mdp_frame *mdp); int overlay_mdp_service_probe(struct internal_mdp_header *header, struct overlay_buffer *payload);
time_ms_t limit_next_allowed(struct limit_state *state); time_ms_t limit_next_allowed(struct limit_state *state);
int limit_is_allowed(struct limit_state *state); int limit_is_allowed(struct limit_state *state);