Changeset View
Changeset View
Standalone View
Standalone View
tests/sys/netinet/libalias/util.c
- This file was added.
#include <atf-c.h> | |||||
#include <stdio.h> | |||||
#include <stdlib.h> | |||||
#include <netinet/in.h> | |||||
#include "util.h" | |||||
void | |||||
hexdump(void *p, size_t len) { | |||||
size_t i; | |||||
unsigned char *c = p; | |||||
for (i = 0; i < len; i++) { | |||||
printf(" %02x", c[i]); | |||||
switch (i & 0xf) { | |||||
case 0xf: printf("\n"); break; | |||||
case 0x8: printf(" "); break; | |||||
default: break; | |||||
} | |||||
} | |||||
if ((i & 0xf) != 0x0) | |||||
printf("\n"); | |||||
} | |||||
struct ip * | |||||
ip_packet(struct in_addr src, struct in_addr dst, u_char protocol, size_t len) { | |||||
struct ip * p; | |||||
ATF_REQUIRE(len >= 64 && len <= IP_MAXPACKET); | |||||
p = calloc(1, len); | |||||
ATF_REQUIRE(p != NULL); | |||||
p->ip_v = IPVERSION; | |||||
p->ip_hl = sizeof(*p)/4; | |||||
p->ip_len = htons(len); | |||||
p->ip_ttl = IPDEFTTL; | |||||
p->ip_src = src; | |||||
p->ip_dst = dst; | |||||
p->ip_p = protocol; | |||||
ATF_REQUIRE(p->ip_hl == 5); | |||||
return (p); | |||||
} | |||||
struct udphdr * | |||||
set_udp(struct ip *p, u_short sport, u_short dport) { | |||||
struct udphdr *u = (void *)((uint32_t *)(void *)p + p->ip_hl); | |||||
int payload = ntohs(p->ip_len) - 4*p->ip_hl; | |||||
ATF_REQUIRE(payload >= (int)sizeof(*u)); | |||||
p->ip_p = IPPROTO_UDP; | |||||
u->uh_sport = htons(sport); | |||||
u->uh_dport = htons(dport); | |||||
u->uh_ulen = htons(payload); | |||||
return (u); | |||||
} | |||||