blob: 9b550139b52de52b4bf2d853de98c0b2fca0bb8f [file] [log] [blame]
Joe Hershberger4c197242015-03-22 17:09:15 -05001/*
2 * Copyright (c) 2015 National Instruments
3 *
4 * (C) Copyright 2015
5 * Joe Hershberger <joe.hershberger@ni.com>
6 *
7 * SPDX-License-Identifier: GPL-2.0
8 */
9
10#include <common.h>
11#include <dm.h>
12#include <dm/test.h>
13#include <dm/ut.h>
14#include <fdtdec.h>
15#include <malloc.h>
16#include <net.h>
17
18DECLARE_GLOBAL_DATA_PTR;
19
20static int dm_test_eth(struct dm_test_state *dms)
21{
22 NetPingIP = string_to_ip("1.1.2.2");
23
24 setenv("ethact", "eth@10002000");
25 ut_assertok(NetLoop(PING));
26 ut_asserteq_str("eth@10002000", getenv("ethact"));
27
28 setenv("ethact", "eth@10003000");
29 ut_assertok(NetLoop(PING));
30 ut_asserteq_str("eth@10003000", getenv("ethact"));
31
32 setenv("ethact", "eth@10004000");
33 ut_assertok(NetLoop(PING));
34 ut_asserteq_str("eth@10004000", getenv("ethact"));
35
36 return 0;
37}
38DM_TEST(dm_test_eth, DM_TESTF_SCAN_FDT);
Joe Hershberger279d2f62015-03-22 17:09:16 -050039
40static int dm_test_eth_alias(struct dm_test_state *dms)
41{
42 NetPingIP = string_to_ip("1.1.2.2");
43 setenv("ethact", "eth0");
44 ut_assertok(NetLoop(PING));
45 ut_asserteq_str("eth@10002000", getenv("ethact"));
46
47 setenv("ethact", "eth1");
48 ut_assertok(NetLoop(PING));
49 ut_asserteq_str("eth@10004000", getenv("ethact"));
50
51 /* Expected to fail since eth2 is not defined in the device tree */
52 setenv("ethact", "eth2");
53 ut_assertok(NetLoop(PING));
54 ut_asserteq_str("eth@10002000", getenv("ethact"));
55
56 setenv("ethact", "eth5");
57 ut_assertok(NetLoop(PING));
58 ut_asserteq_str("eth@10003000", getenv("ethact"));
59
60 return 0;
61}
62DM_TEST(dm_test_eth_alias, DM_TESTF_SCAN_FDT);
Joe Hershbergeraa52edd2015-03-22 17:09:17 -050063
64static int dm_test_eth_prime(struct dm_test_state *dms)
65{
66 NetPingIP = string_to_ip("1.1.2.2");
67
68 /* Expected to be "eth@10003000" because of ethprime variable */
69 setenv("ethact", NULL);
70 setenv("ethprime", "eth5");
71 ut_assertok(NetLoop(PING));
72 ut_asserteq_str("eth@10003000", getenv("ethact"));
73
74 /* Expected to be "eth@10002000" because it is first */
75 setenv("ethact", NULL);
76 setenv("ethprime", NULL);
77 ut_assertok(NetLoop(PING));
78 ut_asserteq_str("eth@10002000", getenv("ethact"));
79
80 return 0;
81}
82DM_TEST(dm_test_eth_prime, DM_TESTF_SCAN_FDT);
Joe Hershbergerf340e542015-03-22 17:09:18 -050083
84static int dm_test_eth_rotate(struct dm_test_state *dms)
85{
86 char ethaddr[18];
87
88 /* Invalidate eth1's MAC address */
89 NetPingIP = string_to_ip("1.1.2.2");
90 strcpy(ethaddr, getenv("eth1addr"));
91 setenv("eth1addr", NULL);
92
93 /* Make sure that the default is to rotate to the next interface */
94 setenv("ethact", "eth@10004000");
95 ut_assertok(NetLoop(PING));
96 ut_asserteq_str("eth@10002000", getenv("ethact"));
97
98 /* If ethrotate is no, then we should fail on a bad MAC */
99 setenv("ethact", "eth@10004000");
100 setenv("ethrotate", "no");
101 ut_asserteq(-1, NetLoop(PING));
102 ut_asserteq_str("eth@10004000", getenv("ethact"));
103
104 /* Restore the env */
105 setenv("eth1addr", ethaddr);
106 setenv("ethrotate", NULL);
107
108 /* Invalidate eth0's MAC address */
109 strcpy(ethaddr, getenv("ethaddr"));
110 setenv(".flags", "ethaddr");
111 setenv("ethaddr", NULL);
112
113 /* Make sure we can skip invalid devices */
114 setenv("ethact", "eth@10004000");
115 ut_assertok(NetLoop(PING));
116 ut_asserteq_str("eth@10004000", getenv("ethact"));
117
118 /* Restore the env */
119 setenv("ethaddr", ethaddr);
120 setenv(".flags", NULL);
121
122 return 0;
123}
124DM_TEST(dm_test_eth_rotate, DM_TESTF_SCAN_FDT);