mirror of
https://github.com/traviscross/mtr.git
synced 2024-09-21 18:37:10 +00:00
sockaddr - save a cast accessing the port
This commit is contained in:
parent
08750eb444
commit
5c5603d68e
@ -92,7 +92,7 @@ void construct_addr_port(
|
|||||||
int port)
|
int port)
|
||||||
{
|
{
|
||||||
memcpy(addr_with_port, addr, sizeof(struct sockaddr_storage));
|
memcpy(addr_with_port, addr, sizeof(struct sockaddr_storage));
|
||||||
*(uint16_t *)sockaddr_port_offset(addr) = htons(port);
|
*sockaddr_port_offset(addr) = htons(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Construct a header for IP version 4 */
|
/* Construct a header for IP version 4 */
|
||||||
@ -210,8 +210,8 @@ void set_udp_ports(
|
|||||||
|
|
||||||
udp->checksum = 0;
|
udp->checksum = 0;
|
||||||
}
|
}
|
||||||
*(uint16_t *)sockaddr_port_offset(&probe->local_addr) = udp->srcport;
|
*sockaddr_port_offset(&probe->local_addr) = udp->srcport;
|
||||||
*(uint16_t *)sockaddr_port_offset(&probe->remote_addr) = udp->dstport;
|
*sockaddr_port_offset(&probe->remote_addr) = udp->dstport;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Prepend pseudoheader to the udp datagram and calculate checksum */
|
/* Prepend pseudoheader to the udp datagram and calculate checksum */
|
||||||
|
@ -88,10 +88,10 @@ void handle_inner_udp_packet(
|
|||||||
if (probe->remote_addr.ss_family != remote_addr->ss_family)
|
if (probe->remote_addr.ss_family != remote_addr->ss_family)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (udp->dstport != *(uint16_t *)sockaddr_port_offset(&probe->remote_addr) )
|
if (udp->dstport != *sockaddr_port_offset(&probe->remote_addr) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (udp->srcport != *(uint16_t *)sockaddr_port_offset(&probe->local_addr) )
|
if (udp->srcport != *sockaddr_port_offset(&probe->local_addr) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
void *saddr, *daddr;
|
void *saddr, *daddr;
|
||||||
|
@ -110,7 +110,7 @@ int resolve_probe_addresses(
|
|||||||
if (param->protocol == IPPROTO_ICMP) {
|
if (param->protocol == IPPROTO_ICMP) {
|
||||||
if ( (src_sockaddr->ss_family == AF_INET && !net_state->platform.ip4_socket_raw) ||
|
if ( (src_sockaddr->ss_family == AF_INET && !net_state->platform.ip4_socket_raw) ||
|
||||||
(src_sockaddr->ss_family == AF_INET6 && !net_state->platform.ip6_socket_raw) )
|
(src_sockaddr->ss_family == AF_INET6 && !net_state->platform.ip6_socket_raw) )
|
||||||
*(uint16_t *)sockaddr_port_offset(src_sockaddr) = htons(getpid());
|
*sockaddr_port_offset(src_sockaddr) = htons(getpid());
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -319,7 +319,7 @@ int find_source_addr(
|
|||||||
the connect will fail. We aren't actually sending
|
the connect will fail. We aren't actually sending
|
||||||
anything to the port.
|
anything to the port.
|
||||||
*/
|
*/
|
||||||
*(uint16_t *)sockaddr_port_offset(&dest_with_port) = htons(1);
|
*sockaddr_port_offset(&dest_with_port) = htons(1);
|
||||||
len = sockaddr_addr_size(&dest_with_port);
|
len = sockaddr_addr_size(&dest_with_port);
|
||||||
|
|
||||||
sock = socket(destaddr->ss_family, SOCK_DGRAM, IPPROTO_UDP);
|
sock = socket(destaddr->ss_family, SOCK_DGRAM, IPPROTO_UDP);
|
||||||
@ -361,7 +361,7 @@ int find_source_addr(
|
|||||||
Zero the port, as we may later use this address to finding, and
|
Zero the port, as we may later use this address to finding, and
|
||||||
we don't want to use the port from the socket we just created.
|
we don't want to use the port from the socket we just created.
|
||||||
*/
|
*/
|
||||||
*(uint16_t *)sockaddr_port_offset(&srcaddr) = 0;
|
*sockaddr_port_offset(&srcaddr) = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -65,9 +65,9 @@ int send_packet(
|
|||||||
} else {
|
} else {
|
||||||
send_socket = net_state->platform.ip6_txrx_udp_socket;
|
send_socket = net_state->platform.ip6_txrx_udp_socket;
|
||||||
if (param->dest_port) {
|
if (param->dest_port) {
|
||||||
*(uint16_t *)sockaddr_port_offset(sockaddr) = htons(param->dest_port);
|
*sockaddr_port_offset(sockaddr) = htons(param->dest_port);
|
||||||
} else {
|
} else {
|
||||||
*(uint16_t *)sockaddr_port_offset(sockaddr) = sequence;
|
*sockaddr_port_offset(sockaddr) = sequence;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -86,9 +86,9 @@ int send_packet(
|
|||||||
} else if (param->protocol == IPPROTO_UDP) {
|
} else if (param->protocol == IPPROTO_UDP) {
|
||||||
send_socket = net_state->platform.ip4_txrx_udp_socket;
|
send_socket = net_state->platform.ip4_txrx_udp_socket;
|
||||||
if (param->dest_port) {
|
if (param->dest_port) {
|
||||||
*(uint16_t *)sockaddr_port_offset(sockaddr) = htons(param->dest_port);
|
*sockaddr_port_offset(sockaddr) = htons(param->dest_port);
|
||||||
} else {
|
} else {
|
||||||
*(uint16_t *)sockaddr_port_offset(sockaddr) = sequence;
|
*sockaddr_port_offset(sockaddr) = sequence;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ unsigned int sockaddr_size(const void *x)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *sockaddr_port_offset(const void *x)
|
in_port_t *sockaddr_port_offset(const void *x)
|
||||||
{
|
{
|
||||||
if( x == NULL )
|
if( x == NULL )
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -3,4 +3,4 @@ unsigned int sockaddr_size(const void *x);
|
|||||||
void *sockaddr_addr_offset(const void *x);
|
void *sockaddr_addr_offset(const void *x);
|
||||||
unsigned int sockaddr_addr_size(const void *x);
|
unsigned int sockaddr_addr_size(const void *x);
|
||||||
|
|
||||||
void *sockaddr_port_offset(const void *x);
|
in_port_t *sockaddr_port_offset(const void *x);
|
||||||
|
Loading…
Reference in New Issue
Block a user