예제 #1
0
static bool test_4to6(l4_protocol l4_proto)
{
	struct tuple incoming, outgoing;
	bool success = true;

	incoming.src.addr.ipv4 = remote_ipv4;
	incoming.dst.addr.ipv4 = local_ipv4;
	incoming.src.l4_id = 123; /* Whatever */
	incoming.dst.l4_id = 80; /* Lookup will use this. */
	incoming.l3_proto = L3PROTO_IPV4;
	incoming.l4_proto = l4_proto;

	if (l4_proto != L4PROTO_ICMP) {
		success &= assert_equals_int(VER_CONTINUE, tuple5(&incoming, &outgoing), "Function5 call");
		success &= assert_equals_u16(123, outgoing.src.l4_id, "Source port");
		success &= assert_equals_u16(1500, outgoing.dst.l4_id, "Destination port");
	} else {
		success &= assert_equals_int(VER_CONTINUE, tuple3(&incoming, &outgoing), "Function3 call");
		success &= assert_equals_u16(1500, outgoing.icmp_id, "ICMP ID");
	}
	success &= assert_equals_ipv6(&local_ipv6, &outgoing.src.addr.ipv6, "Source address");
	success &= assert_equals_ipv6(&remote_ipv6, &outgoing.dst.addr.ipv6, "Destination address");
	success &= assert_equals_u16(L3PROTO_IPV6, outgoing.l3_proto, "Layer-3 protocol");
	success &= assert_equals_u8(l4_proto, outgoing.l4_proto, "Layer-4 protocol");

	return success;
}
예제 #2
0
bool validate_ipv6_hdr(struct ipv6hdr *hdr, u16 payload_len, u8 nexthdr, struct tuple *tuple6)
{
    bool success = true;

    success &= assert_equals_u8(6, hdr->version, "IPv6hdr-version");
    success &= assert_equals_u8(0, hdr->priority, "IPv6hdr-priority");
    success &= assert_equals_u8(0, hdr->flow_lbl[0], "IPv6hdr-flow lbl[0]");
    success &= assert_equals_u8(0, hdr->flow_lbl[1], "IPv6hdr-flow lbl[1]");
    success &= assert_equals_u8(0, hdr->flow_lbl[2], "IPv6hdr-flow lbl[2]");
    success &= assert_equals_u16(payload_len, be16_to_cpu(hdr->payload_len), "IPv6hdr-payload len");
    success &= assert_equals_u8(nexthdr, hdr->nexthdr, "IPv6hdr-nexthdr");
    /* success &= assert_equals_u8(, hdr->hop_limit, "IPv6hdr-hop limit"); */
    success &= assert_equals_ipv6(&tuple6->src.addr6.l3, &hdr->saddr, "IPv6hdr-src address");
    success &= assert_equals_ipv6(&tuple6->dst.addr6.l3, &hdr->daddr, "IPv6hdr-dst address");

    return success;
}
예제 #3
0
bool test_addr_4to6(struct in_addr *src, struct ipv6_prefix *prefix, struct in6_addr *expected)
{
	struct in6_addr actual;
	bool success = true;

	success &= assert_true(addr_4to6(src, prefix, &actual), "Append IPv4-result");
	success &= assert_equals_ipv6(expected, &actual, "Append IPv4-out.");

	return success;
}
예제 #4
0
static bool test_4to6(bool (*function)(struct tuple *, struct tuple *),
		u_int8_t in_l4_protocol, u_int8_t out_l4_protocol)
{
	struct tuple incoming, outgoing;
	bool success = true;

	incoming.src.addr.ipv4 = remote_ipv4;
	incoming.dst.addr.ipv4 = local_ipv4;
	incoming.src.l4_id = 123; // Whatever
	incoming.dst.l4_id = 80; // Lookup will use this.
	incoming.l3_proto = PF_INET;
	incoming.l4_proto = in_l4_protocol;

	success &= assert_true(function(&incoming, &outgoing), "Function call");
	success &= assert_equals_ipv6(&local_ipv6, &outgoing.src.addr.ipv6, "Source address");
	success &= assert_equals_ipv6(&remote_ipv6, &outgoing.dst.addr.ipv6, "Destination address");
	success &= assert_equals_u16(PF_INET6, outgoing.l3_proto, "Layer-3 protocol");
	success &= assert_equals_u8(out_l4_protocol, outgoing.l4_proto, "Layer-4 protocol");
	// TODO (test) need to test ports?

	return success;
}
예제 #5
0
bool test_transport_address_ipv6( void )
{
    struct in6_addr addr6;
    struct ipv6_tuple_address ta;
    bool success = true;

    /* Build an IPv6 transport address from address & port */
    if (!str_to_addr6_verbose(IPV6_TRANSPORT_ADDR, &addr6))
		return false;
    transport_address_ipv6( addr6, IPV6_TRANSPORT_PORT, &ta );
    
    success &= assert_equals_ipv6(&ta.address, &addr6 ,
        "Check that the address part of an IPv6 transport address is correct.");
    success &= assert_equals_u16( ta.l4_id, IPV6_TRANSPORT_PORT ,
        "Check that the port part of an IPv6 transport address is correct.");
    
    return success;
}
예제 #6
0
bool test_embed_ipv4_in_ipv6( void )
{
    struct in_addr embeddable4;
    struct in6_addr embed6;
    struct in6_addr embedded6;
    bool success = true;

    if (pool6_init(NULL, 9) != 0)
    	return false;
    success &= str_to_addr4_verbose(IPV4_EMBEDDABLE_ADDR, &embeddable4);
    success &= str_to_addr6_verbose(IPV6_EMBEDDED_ADDR, &embedded6);
    
    success &= assert_true(append_ipv4( &embeddable4, &embed6 ) , 
        "Check that we can embed an IPv4 address inside of an IPv6 address correctly.");
    success &= assert_equals_ipv6( &embed6 , &embedded6 , 
        "Verify that the IPv4 was embedded into a IPv6 address is correct.");
    
    return success;
}