137 lines
4.4 KiB
C
137 lines
4.4 KiB
C
/*
|
|
* Copyright (c) 2016 Intel Corporation.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef __NET_TESTING_H
|
|
#define __NET_TESTING_H
|
|
|
|
#include <contiki/ipv6/uip-ds6-route.h>
|
|
#include <contiki/ip/uip.h>
|
|
#include <contiki/ipv6/uip-ds6.h>
|
|
|
|
#if defined(CONFIG_NETWORKING_WITH_15_4)
|
|
#define net_testing_server_mac { 0x5e, 0x25, 0xe2, 0xff, 0xfe, 0x15, 0x01, 0x01 }
|
|
#define net_testing_client_mac { 0xc1, 0x1e, 0x47, 0xff, 0xfe, 0x15, 0x02, 0x02 }
|
|
#else
|
|
#define net_testing_server_mac { 0x5e, 0x25, 0xe2, 0x15, 0x01, 0x01 }
|
|
#define net_testing_client_mac { 0xc1, 0x1e, 0x47, 0x15, 0x02, 0x02 }
|
|
#endif
|
|
|
|
|
|
#if NET_TESTING_SERVER
|
|
/* The peer is the client in our case. Just invent a mac
|
|
* address for it because lower parts of the stack cannot set it
|
|
* in this test as we do not have any radios.
|
|
*/
|
|
static uint8_t net_testing_peer_mac[] = net_testing_client_mac;
|
|
|
|
/* This is my mac address
|
|
*/
|
|
static uint8_t net_testing_my_mac[] = net_testing_server_mac;
|
|
|
|
#else /* NET_TESTING_SERVER */
|
|
|
|
static uint8_t net_testing_peer_mac[] = net_testing_server_mac;
|
|
|
|
/* This is my mac address
|
|
*/
|
|
static uint8_t net_testing_my_mac[] = net_testing_client_mac;
|
|
#endif
|
|
|
|
|
|
#if defined(CONFIG_NETWORKING_WITH_IPV6)
|
|
#if defined(CONFIG_NET_TESTING_USE_RFC3849_ADDRESSES)
|
|
/* The 2001:db8::/32 is the private address space for documentation RFC 3849 */
|
|
#if defined(NET_TESTING_SERVER)
|
|
#define MY_IPADDR { { { 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1 } } }
|
|
#define PEER_IPADDR { { { 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2 } } }
|
|
#else /* NET_TESTING_SERVER */
|
|
#define MY_IPADDR { { { 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2 } } }
|
|
#define PEER_IPADDR { { { 0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x1 } } }
|
|
#endif
|
|
#else
|
|
#if NET_TESTING_SERVER
|
|
#define MY_IPADDR { { { 0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0x5c, 0x25, 0xe2, 0xff, 0xfe, 0x15, 0x01, 0x01 } } }
|
|
#define PEER_IPADDR { { { 0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0xc3, 0x1e, 0x47, 0xff, 0xfe, 0x15, 0x02, 0x02 } } }
|
|
#else
|
|
#define PEER_IPADDR { { { 0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0x5c, 0x25, 0xe2, 0xff, 0xfe, 0x15, 0x01, 0x01 } } }
|
|
#define MY_IPADDR { { { 0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0xc3, 0x1e, 0x47, 0xff, 0xfe, 0x15, 0x02, 0x02 } } }
|
|
#endif
|
|
#endif
|
|
|
|
static const struct in6_addr net_testing_in6addr_peer = PEER_IPADDR;
|
|
static struct in6_addr net_testing_in6addr_my = MY_IPADDR;
|
|
|
|
#else /* CONFIG_NETWORKING_WITH_IPV6 */
|
|
|
|
/* The 192.0.2.0/24 is the private address space for documentation RFC 5737 */
|
|
#define MY_IPADDR { { { 192, 0, 2, 2 } } }
|
|
|
|
#endif
|
|
|
|
|
|
/* Generic routines for Qemu testing with slip */
|
|
|
|
static inline void net_testing_setup(void)
|
|
{
|
|
net_set_mac(net_testing_my_mac, sizeof(net_testing_my_mac));
|
|
|
|
#if defined(CONFIG_NETWORKING_WITH_IPV4)
|
|
{
|
|
uip_ipaddr_t addr;
|
|
uip_ipaddr(&addr, 192, 0, 2, 2);
|
|
uip_sethostaddr(&addr);
|
|
}
|
|
#endif
|
|
|
|
#if defined(CONFIG_NETWORKING_WITH_IPV6)
|
|
{
|
|
uip_ipaddr_t *addr;
|
|
|
|
/* Set the routes and neighbor cache only if we do not have
|
|
* neighbor discovery enabled. This setting should only be
|
|
* used if running in qemu and using slip (tun device).
|
|
*/
|
|
const uip_lladdr_t *lladdr = (const uip_lladdr_t *)&net_testing_peer_mac;
|
|
|
|
addr = (uip_ipaddr_t *)&net_testing_in6addr_peer;
|
|
uip_ds6_defrt_add(addr, 0);
|
|
|
|
/* We cannot send to peer unless it is in neighbor
|
|
* cache. Neighbor cache should be populated automatically
|
|
* but do it here so that test works from first packet.
|
|
*/
|
|
uip_ds6_nbr_add(addr, lladdr, 0, NBR_REACHABLE);
|
|
|
|
addr = (uip_ipaddr_t *)&net_testing_in6addr_my;
|
|
uip_ds6_addr_add(addr, 0, ADDR_MANUAL);
|
|
|
|
uip_ds6_prefix_add(addr, 64, 0);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
static inline void net_testing_set_reply_address(struct net_buf *buf)
|
|
{
|
|
/* Set the mac address of the peer in net_buf because
|
|
* there is no radio layer involved in this test app.
|
|
* Normally there is no need to do this.
|
|
*/
|
|
memcpy(&ip_buf_ll_src(buf), &net_testing_peer_mac,
|
|
sizeof(ip_buf_ll_src(buf)));
|
|
}
|
|
|
|
#endif /* __NET_TESTING_H */
|