1bfacad7dSJoe Hershberger /* 2bfacad7dSJoe Hershberger * Copyright (c) 2015 National Instruments 3bfacad7dSJoe Hershberger * 4bfacad7dSJoe Hershberger * (C) Copyright 2015 5bfacad7dSJoe Hershberger * Joe Hershberger <joe.hershberger@ni.com> 6bfacad7dSJoe Hershberger * 7bfacad7dSJoe Hershberger * SPDX-License-Identifier: GPL-2.0 8bfacad7dSJoe Hershberger */ 9bfacad7dSJoe Hershberger 10bfacad7dSJoe Hershberger #include <common.h> 11bfacad7dSJoe Hershberger #include <dm.h> 12bfacad7dSJoe Hershberger #include <dm/test.h> 13bfacad7dSJoe Hershberger #include <dm/ut.h> 14bfacad7dSJoe Hershberger #include <fdtdec.h> 15bfacad7dSJoe Hershberger #include <malloc.h> 16bfacad7dSJoe Hershberger #include <net.h> 17bfacad7dSJoe Hershberger 18bfacad7dSJoe Hershberger DECLARE_GLOBAL_DATA_PTR; 19bfacad7dSJoe Hershberger 20bfacad7dSJoe Hershberger static int dm_test_eth(struct dm_test_state *dms) 21bfacad7dSJoe Hershberger { 22bfacad7dSJoe Hershberger NetPingIP = string_to_ip("1.1.2.2"); 23bfacad7dSJoe Hershberger 24bfacad7dSJoe Hershberger setenv("ethact", "eth@10002000"); 25bfacad7dSJoe Hershberger ut_assertok(NetLoop(PING)); 26bfacad7dSJoe Hershberger ut_asserteq_str("eth@10002000", getenv("ethact")); 27bfacad7dSJoe Hershberger 28bfacad7dSJoe Hershberger setenv("ethact", "eth@10003000"); 29bfacad7dSJoe Hershberger ut_assertok(NetLoop(PING)); 30bfacad7dSJoe Hershberger ut_asserteq_str("eth@10003000", getenv("ethact")); 31bfacad7dSJoe Hershberger 32bfacad7dSJoe Hershberger setenv("ethact", "eth@10004000"); 33bfacad7dSJoe Hershberger ut_assertok(NetLoop(PING)); 34bfacad7dSJoe Hershberger ut_asserteq_str("eth@10004000", getenv("ethact")); 35bfacad7dSJoe Hershberger 36bfacad7dSJoe Hershberger return 0; 37bfacad7dSJoe Hershberger } 38bfacad7dSJoe Hershberger DM_TEST(dm_test_eth, DM_TESTF_SCAN_FDT); 39e58780dcSJoe Hershberger 40e58780dcSJoe Hershberger static int dm_test_eth_alias(struct dm_test_state *dms) 41e58780dcSJoe Hershberger { 42e58780dcSJoe Hershberger NetPingIP = string_to_ip("1.1.2.2"); 43e58780dcSJoe Hershberger setenv("ethact", "eth0"); 44e58780dcSJoe Hershberger ut_assertok(NetLoop(PING)); 45e58780dcSJoe Hershberger ut_asserteq_str("eth@10002000", getenv("ethact")); 46e58780dcSJoe Hershberger 47e58780dcSJoe Hershberger setenv("ethact", "eth1"); 48e58780dcSJoe Hershberger ut_assertok(NetLoop(PING)); 49e58780dcSJoe Hershberger ut_asserteq_str("eth@10004000", getenv("ethact")); 50e58780dcSJoe Hershberger 51e58780dcSJoe Hershberger /* Expected to fail since eth2 is not defined in the device tree */ 52e58780dcSJoe Hershberger setenv("ethact", "eth2"); 53e58780dcSJoe Hershberger ut_assertok(NetLoop(PING)); 54e58780dcSJoe Hershberger ut_asserteq_str("eth@10002000", getenv("ethact")); 55e58780dcSJoe Hershberger 56e58780dcSJoe Hershberger setenv("ethact", "eth5"); 57e58780dcSJoe Hershberger ut_assertok(NetLoop(PING)); 58e58780dcSJoe Hershberger ut_asserteq_str("eth@10003000", getenv("ethact")); 59e58780dcSJoe Hershberger 60e58780dcSJoe Hershberger return 0; 61e58780dcSJoe Hershberger } 62e58780dcSJoe Hershberger DM_TEST(dm_test_eth_alias, DM_TESTF_SCAN_FDT); 636536b9bbSJoe Hershberger 646536b9bbSJoe Hershberger static int dm_test_eth_prime(struct dm_test_state *dms) 656536b9bbSJoe Hershberger { 666536b9bbSJoe Hershberger NetPingIP = string_to_ip("1.1.2.2"); 676536b9bbSJoe Hershberger 686536b9bbSJoe Hershberger /* Expected to be "eth@10003000" because of ethprime variable */ 696536b9bbSJoe Hershberger setenv("ethact", NULL); 706536b9bbSJoe Hershberger setenv("ethprime", "eth5"); 716536b9bbSJoe Hershberger ut_assertok(NetLoop(PING)); 726536b9bbSJoe Hershberger ut_asserteq_str("eth@10003000", getenv("ethact")); 736536b9bbSJoe Hershberger 746536b9bbSJoe Hershberger /* Expected to be "eth@10002000" because it is first */ 756536b9bbSJoe Hershberger setenv("ethact", NULL); 766536b9bbSJoe Hershberger setenv("ethprime", NULL); 776536b9bbSJoe Hershberger ut_assertok(NetLoop(PING)); 786536b9bbSJoe Hershberger ut_asserteq_str("eth@10002000", getenv("ethact")); 796536b9bbSJoe Hershberger 806536b9bbSJoe Hershberger return 0; 816536b9bbSJoe Hershberger } 826536b9bbSJoe Hershberger DM_TEST(dm_test_eth_prime, DM_TESTF_SCAN_FDT); 83*7d104eabSJoe Hershberger 84*7d104eabSJoe Hershberger static int dm_test_eth_rotate(struct dm_test_state *dms) 85*7d104eabSJoe Hershberger { 86*7d104eabSJoe Hershberger char ethaddr[18]; 87*7d104eabSJoe Hershberger 88*7d104eabSJoe Hershberger /* Invalidate eth1's MAC address */ 89*7d104eabSJoe Hershberger NetPingIP = string_to_ip("1.1.2.2"); 90*7d104eabSJoe Hershberger strcpy(ethaddr, getenv("eth1addr")); 91*7d104eabSJoe Hershberger setenv("eth1addr", NULL); 92*7d104eabSJoe Hershberger 93*7d104eabSJoe Hershberger /* Make sure that the default is to rotate to the next interface */ 94*7d104eabSJoe Hershberger setenv("ethact", "eth@10004000"); 95*7d104eabSJoe Hershberger ut_assertok(NetLoop(PING)); 96*7d104eabSJoe Hershberger ut_asserteq_str("eth@10002000", getenv("ethact")); 97*7d104eabSJoe Hershberger 98*7d104eabSJoe Hershberger /* If ethrotate is no, then we should fail on a bad MAC */ 99*7d104eabSJoe Hershberger setenv("ethact", "eth@10004000"); 100*7d104eabSJoe Hershberger setenv("ethrotate", "no"); 101*7d104eabSJoe Hershberger ut_asserteq(-1, NetLoop(PING)); 102*7d104eabSJoe Hershberger ut_asserteq_str("eth@10004000", getenv("ethact")); 103*7d104eabSJoe Hershberger 104*7d104eabSJoe Hershberger /* Restore the env */ 105*7d104eabSJoe Hershberger setenv("eth1addr", ethaddr); 106*7d104eabSJoe Hershberger setenv("ethrotate", NULL); 107*7d104eabSJoe Hershberger 108*7d104eabSJoe Hershberger /* Invalidate eth0's MAC address */ 109*7d104eabSJoe Hershberger strcpy(ethaddr, getenv("ethaddr")); 110*7d104eabSJoe Hershberger setenv(".flags", "ethaddr"); 111*7d104eabSJoe Hershberger setenv("ethaddr", NULL); 112*7d104eabSJoe Hershberger 113*7d104eabSJoe Hershberger /* Make sure we can skip invalid devices */ 114*7d104eabSJoe Hershberger setenv("ethact", "eth@10004000"); 115*7d104eabSJoe Hershberger ut_assertok(NetLoop(PING)); 116*7d104eabSJoe Hershberger ut_asserteq_str("eth@10004000", getenv("ethact")); 117*7d104eabSJoe Hershberger 118*7d104eabSJoe Hershberger /* Restore the env */ 119*7d104eabSJoe Hershberger setenv("ethaddr", ethaddr); 120*7d104eabSJoe Hershberger setenv(".flags", NULL); 121*7d104eabSJoe Hershberger 122*7d104eabSJoe Hershberger return 0; 123*7d104eabSJoe Hershberger } 124*7d104eabSJoe Hershberger DM_TEST(dm_test_eth_rotate, DM_TESTF_SCAN_FDT); 125