+Tom Rini +Heinrich Schuchardt too Hi Ehsan,
On Wed, 29 Mar 2023 at 04:15, Ehsan Mohandesi <[email protected]> wrote: > > Hi Simon, > > > -----Original Message----- > > From: Simon Glass <[email protected]> > > Sent: Monday, March 27, 2023 3:15 PM > > To: Ehsan Mohandesi <[email protected]> > > Cc: [email protected]; [email protected]; [email protected]; > > [email protected] > > Subject: [EXTERNAL] Re: How to add eth1 to test device tree? > > > > Hi Ehsan, > > > > On Tue, 28 Mar 2023 at 08:58, Ehsan Mohandesi > > <[email protected]> wrote: > > > > > > Hi All, > > > > > > When running the sandbox tests, I want to know how to enable eth1 in > > > order to be able to test network features. > > > > > > The following command is used to run sandbox tests. > > > > > > ./test/py/test.py -k testname.py > > > > > > I am specifically interested in running the network tests. > > > > > > ./test/py/test.py -k test_net.py > > > > > > These Python tests use test.dts device tree which does not have eth1 > > > in it. I can replace the test.dts file with sandbox.dts to enable eth1 > > > and run the network tests; however, I think there should be a better > > > way to do it. > > > > > > Can anyone help me with this issue? > > > > > > When running U-Boot, the -T option could be used to tell it to use the > > > test.dts or -D to use sandbox.dts; however, there is no such option > > > when running test.py. > > > > > > Eth1 is needed in order to enable the network. Enabling the sandbox > > > network is explained after line 250 in doc/arch/sandbox.rst. > > > > > > For more information, the following is the list of network interfaces > > > when each device tree is used. > > > > > > ** > > > > > > *arch/sandbox/dts/sandbox.dts** > > > *Net: eth0: host_lo, *eth1: host_eth0*, eth2: host_br1, eth3: > > > eth@10002000 > > > > > > *arch/sandbox/dts/test.dts* > > > > > > Net: eth0: eth@10002000, eth5: eth@10003000, eth3: sbe5, eth6: > > > eth@10004000, eth4: dsa-test-eth, eth2: lan0, eth7: lan1 > > > > > > > You should write tests in C where possible. See [1]. > > > > If you are just trying to try something out locally, then you can run a > > sandbox > > test without Python. See [2]. You can use the -D flag as usual. Of course > > you > > can't > > > > Network tests should generate their own traffic and check it internally, > > rather > > than relying on the real network features of the host machine. You can see > > test/dm/eth.c for that > > > > For local hacking you can change u_boot_console_sandbox.py.get_spawn() > > to pass -D instead of the -d xxx it currently does. > > > > So it depends on what you are trying to do. > > > > Regards, > > Simon > > > > [1] https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fu- > > boot.readthedocs.io%2Fen%2Flatest%2Fdevelop%2Ftests_writing.html&data=0 > > 5%7C01%7Cemohandesi%40microsoft.com%7Ccb2205b7fa56490d6b0008db2ef > > ff21e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C63815544908078 > > 1196%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzI > > iLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=qi8G4i64eXd > > S4VpzMz9F5LL3BcEh0C87%2BvsTBg4IRic%3D&reserved=0 > > [2] https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fu- > > boot.readthedocs.io%2Fen%2Flatest%2Fdevelop%2Ftests_sandbox.html%23run > > ning-sandbox-tests- > > directly&data=05%7C01%7Cemohandesi%40microsoft.com%7Ccb2205b7fa564 > > 90d6b0008db2efff21e%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C > > 638155449080781196%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMD > > AiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&s > > data=YiBTpwZ4sjvKAu9H%2B4%2BBGFJUjoe3zT5pERDtBA5oDms%3D&reserved > > =0 > > Let me add a little bit of information on my change and how I want to test it. > I have implemented the IPv6 network discovery and have sent it upstream. Now > I am working on writing the sandbox tests. I have implemented some tests in C > and one in Python when using C was not possible. > Tests written in C are in test/dm/eth.c and they use fake networks as you > have instructed. > Test written in Python is in test/py/tests/test_net.py. The Python test is > similar to the DHCP and TFTP tests where they deal with real network traffic. > My question is how those tests succeed. Do they use eth1? For them to > succeed, they need to be connected to a DHCP server or other servers. How do > the users run such tests? OK I understand now. There is a u-boot-test-hooks repo [1] which provides these details, as they are specific to the environment you are using. For example, in 'travis-ci/u_boot_boardenv_qemu_x86_64_na.py' you will see: import os import travis_tftp env__net_uses_pci = True env__net_dhcp_server = True env__net_tftp_readable_file = travis_tftp.file2env('u-boot') env__efi_loader_helloworld_file = travis_tftp.file2env('lib/efi_loader/helloworld.efi') env__efi_loader_check_smbios = True env__efi_loader_grub_file = travis_tftp.file2env('grub_x64.efi') env__efi_fit_tftp_file = { "dn" : os.environ['UBOOT_TRAVIS_BUILD_DIR'], } This sets up some environment vars which are read by the test in conftest.py You can see an example that uses USB ethernet in the swarren-lx1 directory. Note that these tests use 'real' boards, not sandbox. That's because we don't have emulation of a TFTP server, etc. in sandbox, at least so far. They do run in CI, e.g. see qemu-x86_64, and you can run them locally, either by setting up the test hooks, or by manually running qemu with suitable args taken from conf.qemu-x86_64_na for example. Regards, Simon [1] https://source.denx.de/u-boot/u-boot-test-hooks

