{"id":21020183,"url":"https://github.com/bringhurst/vde","last_synced_at":"2026-04-21T22:35:02.544Z","repository":{"id":137019158,"uuid":"12575161","full_name":"bringhurst/vde","owner":"bringhurst","description":"VDE mirror (not updated automatically)","archived":false,"fork":false,"pushed_at":"2013-09-03T21:18:47.000Z","size":1004,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-02T03:19:48.103Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bringhurst.png","metadata":{"files":{"readme":"README","changelog":"Changelog","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-09-03T21:18:33.000Z","updated_at":"2013-12-07T02:18:06.000Z","dependencies_parsed_at":"2023-03-13T20:46:24.374Z","dependency_job_id":null,"html_url":"https://github.com/bringhurst/vde","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bringhurst/vde","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bringhurst%2Fvde","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bringhurst%2Fvde/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bringhurst%2Fvde/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bringhurst%2Fvde/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bringhurst","download_url":"https://codeload.github.com/bringhurst/vde/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bringhurst%2Fvde/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32113234,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T11:25:29.218Z","status":"ssl_error","status_checked_at":"2026-04-21T11:25:28.499Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-19T10:36:04.894Z","updated_at":"2026-04-21T22:35:02.505Z","avatar_url":"https://github.com/bringhurst.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"VDEv2: Virtual Distributed Ethernet.\n\n(c) 2003/2004/2005/2006 Renzo Davoli\nLong long time ago based on uml-router Copyright 2002 Yon Uriarte and Jeff Dike\nqemu-vde-HOWTO is (c) by Jim Brown\nNotice: Virtual Distributed Ethernet is not related in any way with\nwww.vde.com (\"Verband der Elektrotechnik, Elektronik und Informationstechnik\"\ni.e. the German \"Association for Electrical, Electronic \u0026 Information \nTechnologies\").\n\nComponents of the VDE architecture:\n- VDE switches: virtual counterpart of ethernet switches.\n- VDE cables: virtual counterpart of a crossed-cable used to connect two switches.\n\n- VDE 2 includes:\n- switch management both from console and from a \"unix socket terminal\"\n- VLAN 801.1q *almost* compatible\n- FSTP (fast spanning tree) already incomplete and currently not tested for 802.1d/w/s\n  compatibility. under development. (vde_switch must be compiled with the FSTP flag on)\n\nUsing VDE:\n- All units connected to the VDE see each other as they were on a real ethernet.\n- A real Linux box can be connected to the VDE using a tap interface (TUNTAP)  \n  (packets can be further routed using standard linux methods). \n- It is possible to join two VDE switches -- also running on different\n  real conputers -- using virtual VDE cables\n- UML (user-mode-linux) virtual machines can be connected to the VDE\n- MPS (MIPS emulated machines (c) Morsiani/Davoli) can be connected \nto the virtual VDE.\n\nExamples of VDE uses:\n- With VDE it is possible to create a virtual network of UML machines running\non several real computer\n- VDE can be used to create tunnels (even crossing masquerated networks)\n- VDE can provide mobility support. Changing a VDE cable with another does not\naffect the communications in place. The new VDE cable can use a completely \ndifferent path on the real net. VDE supports also multiple concurrent VDE cables\nbetween a pair of VDE-switches during the hand-off. This eliminates when possible\nhich-ups of communications due to hand-offs.\n\nHOWTO and basic command syntax (for a complete explanation RTM):\n\nvde-switch [ -unix control-socket ] [ -tap tuntap-device ] [ -hub ] [-daemon]\nThis command creates a VDE switch. \n-unix control-socket\n\tThe control socket is the socket used for local processes to create a new\n\tconnection. The default value is /tmp/vde.ctl.\n\tUser-mode-linux default value is /tmp/uml.ctl, so if you want to use vde \n\twith UML you can: (1) use \"-unix /tmp/uml.ctl\" for vde-switch (2) use \n\t\"eth0=daemon,,/tmp/vde.ctl\" for UML \n-tap tuntap-device\n\tthe vde-switch is connected to the specified tap interface.\n\tUsusally it is reserved for root as /dev/net/tun is not writable.\n\t(It is dangerous to have /dev/net/tun writable by ordinary users).\n-hub\n\tthe vde-switch works as a hub (all packets are broadcast on all interfaces.\n-daemon\n\tthe switch works as a daemon: it runs in background, it uses syslog \n\tfor error management. \n\nvde-plug [-p port] [socketname]\nA vde-cable is composed by two vde-plug and a \"cable\". A vde-plug connects its\nstandard input and output to a switch.\nsocketname is the control-socket of the switch the plug must be connected to \n(default value /tmp/vde.ctl).\n-p port. To use a specific port of the switch. The first available port is\nassaigned when not specified. It is possibl eto connect several cables to the\nsame prot: Cables connected to the same port represent several path\nfor the same destination.\n\ndpipe cmd1 [arg1] = cmd2 [arg2]\nit is the double pipe command (it is here just becouse it is not provided by\nshells).\ncmd1 and cmd2 are executed, the stdout of cmd1 if pipe connected to the stdin of\ncmd2 and viceversa. (the symbol = is intended as a pair of communication pipes\nbetween the two processes.\n\nHOW TO:\n- (1) SETUP A DAEMON:\n(as root)\n# vde_switch -tap tap0 -mod 777 -daemon\n# ifconfig tap0 192.168.0.254\n\nif you want to have routing to the Internet you can use standard routing\ncommands on the host machine e.g.:\n# echo \"1\" \u003e /proc/sys/net/ipv4/ip_forward\n# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE\n\nfor ipv6\n# echo \"1\" \u003e /proc/sys/net/ipv6/conf/eth0/forwarding \n# radvd\n\nradvd must be configured to broadcast the correct prefix for the tap0 subnet\n\t\n----- example of /etc/radvd.conf file\ninterface tap0\n{\n   AdvSendAdvert on;\n   MaxRtrAdvInterval 120;\n#put here your prefix.\n   prefix 1111:2222:3333:4444::/64 \n   { \n\t   AdvOnLink on;\n\t   AdvAutonomous on;\n\t   AdvRouterAddr on;\n\t\t\t\t\t\t\t       \n   };\n};\n------ end of example\n\n- (2) SETUP A SECOND DAEMON\n(no need for root access)\n\n% vde_switch /tmp/my.ctl\n\n(add - daemon if you want to run it in background)\n\n- (3) CONNECT TWO LOCAL SWITCHES TOGETHER\n\n% dpipe vde_plug = vde_plug /tmp/my.ctl\n(or\n% dpipe vde_plug /tmp/my.ctl = vde_plug \n)\n\nconnects the vde_switch with ctl socket /tmp/vde.ctl with the other using\n/tmp/my.ctl.\n\n- (3) CONNECT TWO REMOTE SWITCHES TOGETHER\n\nYou need a tool to interconnect stdin stdout of two remote processes.\ne.g.\n\n% dpipe vde_plug /tmp/my.ctl = ssh remote_machine vde_plug\n\nconnects the vde_switch with ctl socket /tmp/vde.ctl on the remote_machine\nwith the local switch using /tmp/my.ctl.\n\nIt is possible to use other tools in place of ssh like netcat.\nIn this latter case the communication is not secure.\n\n- (4) CREATION OF TUNNELS.\n(it needs kernel support for policy routing)\n\nSetup two daemon as described in (1).\nIn this example 192.168.0.1 is the tap0 address on the server side.\nRoute the traffic to the Internet on the tunnel server side.\n\nOn the tunnel client side:\n\t- in the example 100.200.201.202 is the IP address on eth0\n\tand 100.200.201.254 is the default gateway.\n\t- create a specific rule for the eth0 routing\n\t\tip rule add from 100.200.201.202 table eth0-table\n\t(please note that eth0-table must be listed in /etc/iproute2/rt_tables)\n\t\tip route del default via 100.200.201.254\n\t\tip route add default via 100.200.201.254 table eth0-table\n\tthe previous default route will be the def. route just for the\n\tpackets originated with the eth0 inteface address.\n\t- connect the two vde-switch together:\n\t\tdpipe vde-plug = ssh -b 100.200.201.202 server-machine vde-plug\n\t- setup an appropriate IP address for tap0 interface (or get it by dhcp\n\t \tif set up on server side). (e.g. 192.168.0.10)\n\t- use tap0 as the default interface:\n\t\tip route add default via 192.168.0.1\n\n- (5) SUPPORT FOR MOBILITY\n\nCreate a tunnel like in 4 using a group number on the vde-cable:\n\tdpipe vde-plug -g 1 = ssh -b 100.200.201.202 server-machine vde-plug -g 1\n\nCreate a second tunnel (say on ppp0 addr. 100.100.101.102 gateway 100.100.101.254)\n\t# ip rule add from 100.100.101.102 table ppp0-table\n\t# ip route add default via 100.100.101.254 table ppp0-table\n\nConnect the a second cable using the same group number:\n\t# dpipe vde-plug -g 1 = ssh -b 100.100.101.102 server-machine vde-plug -g 1\nDisconnect the first cable (kill the processes of the first cable)\n\n\tAll the traffic get rerouted on the new vde-cable (thus to another path\n\ton the rel network. Connections in place are unaffected by the change.\n\tSeveral cables of the same group can be in place during the handoff phase\n\tbut note that this ends up in duplicated packets that can slow down\n\tthe communication.\n\nPlease note also that the vde-switches do not manage (yet) the minimum spanning \ntree protocol thus a loop in the topology can lead to inconsistent MAC forward \ntables and to network saturation.\n\nCopyright 2003/2004/2005/2006/2011 Renzo Davoli\nThis product includes software developed by Danny Gasparovski and Fabrice \nBallard (slirp support).\nAcknowlegments:\nThanks to Marco Giordani, Leonardo Macchia for their useful help for debugging.\nImported code by Danny Gasparovsky, Fabrice Ballard.\nThanks to Giuseppe Della Bianca \u003cbepi@adria.it\u003e for many bug reports, and\npatch proposals.\nThanks to Daniel P. Barrange \u003cberrange at redhat dot com\u003e for several patches\nand the management of group ownership.\nCode organization, bugfixes, autotool support Mattia Belletti.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbringhurst%2Fvde","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbringhurst%2Fvde","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbringhurst%2Fvde/lists"}