gns3 / ubridge Goto Github PK
View Code? Open in Web Editor NEWBridge for UDP tunnels, Ethernet, TAP and VMnet interfaces.
License: GNU General Public License v3.0
Bridge for UDP tunnels, Ethernet, TAP and VMnet interfaces.
License: GNU General Public License v3.0
Just some simple things.
For more advanced features, I would prefer to use tc (traffic control) on Linux.
Hi guys,
I am experiencing some problems while trying to bring up a docker container within GNS3. After running gns3server with '-d' I found the output:
2021-03-24 19:01:48 ERROR route.py:242 Uncaught exception detected: <class 'KeyError'>
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/gns3server/compute/base_node.py", line 631, in _ubridge_send
await self._ubridge_hypervisor.send(command)
File "/usr/lib/python3.8/site-packages/gns3server/utils/asyncio/init.py", line 163, in wrapper
return await f(oself, *args, **kwargs)
File "/usr/lib/python3.8/site-packages/gns3server/ubridge/ubridge_hypervisor.py", line 259, in send
raise UbridgeError(data[-1][4:])
gns3server.ubridge.ubridge_error.UbridgeError: could not complete netlink transaction
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/gns3server/compute/docker/docker_vm.py", line 914, in _add_ubridge_connection
await self._ubridge_send('docker move_to_ns {ifc} {ns} eth{adapter}'.format(ifc=adapter.host_ifc,
File "/usr/lib/python3.8/site-packages/gns3server/compute/base_node.py", line 633, in _ubridge_send
raise UbridgeError("Error while sending command '{}': {}: {}".format(command, e, self._ubridge_hypervisor.read_stdout()))
gns3server.ubridge.ubridge_error.UbridgeError: Error while sending command 'docker move_to_ns tap-gns3-e0 27347 eth0': could not complete netlink transaction: uBridge version 0.9.18 running with libpcap version 1.10.0 (with TPACKET_V3)
Hypervisor TCP control server started (IP 0.0.0.0 port 36283).
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/gns3server/compute/docker/docker_vm.py", line 478, in start
await self._add_ubridge_connection(nio, adapter_number)
File "/usr/lib/python3.8/site-packages/gns3server/compute/docker/docker_vm.py", line 918, in _add_ubridge_connection
raise UbridgeNamespaceError(e)
gns3server.ubridge.ubridge_error.UbridgeNamespaceError: Error while sending command 'docker move_to_ns tap-gns3-e0 27347 eth0': could not complete netlink transaction: uBridge version 0.9.18 running with libpcap version 1.10.0 (with TPACKET_V3)
Hypervisor TCP control server started (IP 0.0.0.0 port 36283).
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/gns3server/web/route.py", line 198, in control_schema
await func(request, response)
File "/usr/lib/python3.8/site-packages/gns3server/handlers/api/compute/docker_handler.py", line 89, in start
await container.start()
File "/usr/lib/python3.8/site-packages/gns3server/compute/docker/docker_vm.py", line 484, in start
logdata = await self._get_log()
File "/usr/lib/python3.8/site-packages/gns3server/compute/docker/docker_vm.py", line 1141, in _get_log
result = await self.manager.query("GET", "containers/{}/logs".format(self._cid), params={"stderr": 1, "stdout": 1})
File "/usr/lib/python3.8/site-packages/gns3server/compute/docker/init.py", line 114, in query
if response.headers['CONTENT-TYPE'] == 'application/json':
KeyError: 'CONTENT-TYPE'
I've executed ubridge hypervisor mode and accessed it by telnet. The docker move_to_ns command does not work in my environment. Please, could someone help to fix this?
Thanks in advance
Regards
I cannot compile ubridge on FreeBSD 11.0-RELEASE:
gns3:/root/ubridge
11:42:08 # uname -a
FreeBSD gns3 11.0-RELEASE-p1 FreeBSD 11.0-RELEASE-p1 #0 r306420: Thu Sep 29 01:43:23 UTC 2016 [email protected]:/usr/obj/usr/src/sys/GENERIC amd64
gns3:/root/ubridge
11:43:38 # gmake
gcc -O3 -Wall -c -o nio_udp.o nio_udp.c
nio_udp.c: In function 'udp_connect':
nio_udp.c:70:13: error: dereferencing pointer to incomplete type
sin->sin_family = PF_INET;
^
nio_udp.c:71:13: error: dereferencing pointer to incomplete type
sin->sin_port = htons(local_port);
^
nio_udp.c:72:54: error: dereferencing pointer to incomplete type
ptr = &((struct sockaddr_in *) res->ai_addr)->sin_addr;
^
nio_udp.c:81:14: error: dereferencing pointer to incomplete type
sin6->sin6_family = PF_INET6;
^
nio_udp.c:82:14: error: dereferencing pointer to incomplete type
sin6->sin6_port = htons(local_port);
^
nio_udp.c:83:55: error: dereferencing pointer to incomplete type
ptr = &((struct sockaddr_in6 *) res->ai_addr)->sin6_addr;
^
gmake: *** [: nio_udp.o] Error 1
I've installed gmake, gcc, libpcap, and all other dependencies I could find.
Am I doing something wrong, is this not meant to be compiled on FreeBSD, or is this a bug?
Edit: I've attached a log with all installed packages and a monospace version of above logs.
log.txt
Is there any way to involve ubridge in this from within GNS3 GUI ?
I just built GNS3 gui/server v2.0.3 and the related utilities from source and while testing noticed there is no network traffic from IOU(IOL) nodes, other types of nodes are not affected (at least the ones I tested: dynamips, qemu), wireshark shows 0 packets coming from IOU.
Since master (bf19d3a) doesn't work and tag v0.9.11 does I did a git bisect and the culprit seems to be commit bbf32f7 (Implement filter support. Fixes #16.).
This is on Linux, Fedora 24, using a local gns server.
do I have to use the SYSTEM_INIPARSER
option in the latest version?
Line 68 in 8d4e394
because when I enable it I get these errors while compiling:
diff
output btw initparser.c and your src/iniparser/iniparser.c:
diff -ur a/iniparser.c b/iniparser.c
--- a/iniparser.c 2019-05-17 12:06:17.204073297 +0300
+++ b/iniparser.c 2019-05-17 12:06:39.879468506 +0300
@@ -8,7 +8,6 @@
/*--------------------------------------------------------------------------*/
/*---------------------------- Includes ------------------------------------*/
#include <ctype.h>
-#include <stdarg.h>
#include "iniparser.h"
/*---------------------------- Defines -------------------------------------*/
@@ -58,27 +57,18 @@
/*-------------------------------------------------------------------------*/
/**
- @brief Duplicate a string
- @param s String to duplicate
- @return Pointer to a newly allocated string, to be freed with free()
+ @brief Copy string in a newly mallocced area
+ @param str String to copy.
+ @return str Copied version of the given string allocated with malloc
- This is a replacement for strdup(). This implementation is provided
- for systems that do not have it.
+ Original strdup is not portable, need to implement our own
*/
/*--------------------------------------------------------------------------*/
-static char * xstrdup(const char * s)
+static char * _strdup(const char *s)
{
- char * t ;
- size_t len ;
- if (!s)
- return NULL ;
-
- len = strlen(s) + 1 ;
- t = (char*) malloc(len) ;
- if (t) {
- memcpy(t, s, len) ;
- }
- return t ;
+ char * copy = (char*) malloc(strlen(s));
+ strcpy(copy, s);
+ return copy ;
}
/*-------------------------------------------------------------------------*/
@@ -88,7 +78,7 @@
@return unsigned New size of the string.
*/
/*--------------------------------------------------------------------------*/
-static unsigned strstrip(char * s)
+unsigned strstrip(char * s)
{
char *last = NULL ;
char *dest = s;
@@ -110,41 +100,6 @@
/*-------------------------------------------------------------------------*/
/**
- @brief Default error callback for iniparser: wraps `fprintf(stderr, ...)`.
- */
-/*--------------------------------------------------------------------------*/
-static int default_error_callback(const char *format, ...)
-{
- int ret;
- va_list argptr;
- va_start(argptr, format);
- ret = vfprintf(stderr, format, argptr);
- va_end(argptr);
- return ret;
-}
-
-static int (*iniparser_error_callback)(const char*, ...) = default_error_callback;
-
-/*-------------------------------------------------------------------------*/
-/**
- @brief Configure a function to receive the error messages.
- @param errback Function to call.
-
- By default, the error will be printed on stderr. If a null pointer is passed
- as errback the error callback will be switched back to default.
- */
-/*--------------------------------------------------------------------------*/
-void iniparser_set_error_callback(int (*errback)(const char *, ...))
-{
- if (errback) {
- iniparser_error_callback = errback;
- } else {
- iniparser_error_callback = default_error_callback;
- }
-}
-
-/*-------------------------------------------------------------------------*/
-/**
@brief Get number of sections in a dictionary
@param d Dictionary to examine
@return int Number of sections found in dictionary
@@ -339,8 +294,7 @@
if (! iniparser_find_entry(d, s)) return nkeys;
seclen = (int)strlen(s);
- strlwc(s, keym, sizeof(keym));
- keym[seclen] = ':';
+ sprintf(keym, "%s:", s);
for (j=0 ; j<d->size ; j++) {
if (d->key[j]==NULL)
@@ -378,8 +332,7 @@
if (! iniparser_find_entry(d, s)) return NULL;
seclen = (int)strlen(s);
- strlwc(s, keym, sizeof(keym));
- keym[seclen] = ':';
+ sprintf(keym, "%s:", s);
i = 0;
@@ -426,11 +379,11 @@
/*-------------------------------------------------------------------------*/
/**
- @brief Get the string associated to a key, convert to an long int
+ @brief Get the string associated to a key, convert to an int
@param d Dictionary to search
@param key Key string to look for
@param notfound Value to return in case of error
- @return long integer
+ @return integer
This function queries a dictionary for a key. A key as read from an
ini file is given as "section:key". If the key cannot be found,
@@ -451,46 +404,13 @@
Credits: Thanks to A. Becker for suggesting strtol()
*/
/*--------------------------------------------------------------------------*/
-long int iniparser_getlongint(const dictionary * d, const char * key, long int notfound)
+int iniparser_getint(const dictionary * d, const char * key, int notfound)
{
const char * str ;
str = iniparser_getstring(d, key, INI_INVALID_KEY);
if (str==INI_INVALID_KEY) return notfound ;
- return strtol(str, NULL, 0);
-}
-
-
-/*-------------------------------------------------------------------------*/
-/**
- @brief Get the string associated to a key, convert to an int
- @param d Dictionary to search
- @param key Key string to look for
- @param notfound Value to return in case of error
- @return integer
-
- This function queries a dictionary for a key. A key as read from an
- ini file is given as "section:key". If the key cannot be found,
- the notfound value is returned.
-
- Supported values for integers include the usual C notation
- so decimal, octal (starting with 0) and hexadecimal (starting with 0x)
- are supported. Examples:
-
- "42" -> 42
- "042" -> 34 (octal -> decimal)
- "0x42" -> 66 (hexa -> decimal)
-
- Warning: the conversion may overflow in various ways. Conversion is
- totally outsourced to strtol(), see the associated man page for overflow
- handling.
-
- Credits: Thanks to A. Becker for suggesting strtol()
- */
-/*--------------------------------------------------------------------------*/
-int iniparser_getint(const dictionary * d, const char * key, int notfound)
-{
- return (int)iniparser_getlongint(d, key, notfound);
+ return (int)strtol(str, NULL, 0);
}
/*-------------------------------------------------------------------------*/
@@ -640,7 +560,7 @@
char * line = NULL;
size_t len ;
- line = xstrdup(input_line);
+ line = _strdup(input_line);
len = strstrip(line);
sta = LINE_UNPROCESSED ;
@@ -657,14 +577,9 @@
strlwc(section, section, len);
sta = LINE_SECTION ;
} else if (sscanf (line, "%[^=] = \"%[^\"]\"", key, value) == 2
- || sscanf (line, "%[^=] = '%[^\']'", key, value) == 2) {
- /* Usual key=value with quotes, with or without comments */
- strstrip(key);
- strlwc(key, key, len);
- /* Don't strip spaces from values surrounded with quotes */
- sta = LINE_VALUE ;
- } else if (sscanf (line, "%[^=] = %[^;#]", key, value) == 2) {
- /* Usual key=value without quotes, with or without comments */
+ || sscanf (line, "%[^=] = '%[^\']'", key, value) == 2
+ || sscanf (line, "%[^=] = %[^;#]", key, value) == 2) {
+ /* Usual key=value, with or without comments */
strstrip(key);
strlwc(key, key, len);
strstrip(value);
@@ -711,7 +626,7 @@
The returned dictionary must be freed using iniparser_freedict().
*/
/*--------------------------------------------------------------------------*/
-dictionary * iniparser_load(const char * ininame)
+dictionary * iniparser_load(const char * ininame, load_options options)
{
FILE * in ;
@@ -725,12 +640,11 @@
int len ;
int lineno=0 ;
int errs=0;
- int mem_err=0;
dictionary * dict ;
if ((in=fopen(ininame, "r"))==NULL) {
- iniparser_error_callback("iniparser: cannot open %s\n", ininame);
+ fprintf(stderr, "iniparser: cannot open %s\n", ininame);
return NULL ;
}
@@ -749,14 +663,14 @@
while (fgets(line+last, ASCIILINESZ-last, in)!=NULL) {
lineno++ ;
len = (int)strlen(line)-1;
- if (len<=0)
+ if (len==0)
continue;
/* Safety check against buffer overflows */
if (line[len]!='\n' && !feof(in)) {
- iniparser_error_callback(
- "iniparser: input line too long in %s (%d)\n",
- ininame,
- lineno);
+ fprintf(stderr,
+ "iniparser: input line too long in %s (%d)\n",
+ ininame,
+ lineno);
dictionary_del(dict);
fclose(in);
return NULL ;
@@ -784,20 +698,27 @@
break ;
case LINE_SECTION:
- mem_err = dictionary_set(dict, section, NULL);
+ errs = dictionary_set(dict, section, NULL);
break ;
case LINE_VALUE:
sprintf(tmp, "%s:%s", section, key);
- mem_err = dictionary_set(dict, tmp, val);
+ errs = dictionary_set(dict, tmp, val) ;
break ;
case LINE_ERROR:
- iniparser_error_callback(
- "iniparser: syntax error in %s (%d):\n-> %s\n",
- ininame,
- lineno,
- line);
+
+ if(options & HIDE_ERRORED_LINE_CONTENT) {
+ fprintf(stderr, "iniparser: syntax error in %s (%d)\n",
+ ininame,
+ lineno);
+ }
+ else {
+ fprintf(stderr, "iniparser: syntax error in %s (%d):\n",
+ ininame,
+ lineno);
+ fprintf(stderr, "-> %s\n", line);
+ }
errs++ ;
break;
@@ -806,8 +727,8 @@
}
memset(line, 0, ASCIILINESZ);
last=0;
- if (mem_err<0) {
- iniparser_error_callback("iniparser: memory allocation failure\n");
+ if (errs<0) {
+ fprintf(stderr, "iniparser: memory allocation failure\n");
break ;
}
}
Hi,
I'm using Debian buster
when I add a virtual machine (which I pull from docker) I get this error uBridge requires root access or the capability to interact with network adapters
I've installed ubridge
and it has permission.
for example, I tried ubridge -H 5000
and it works.
if I add a virtual machine from virtual box everything is okay, so my problem is with Docker
what should I do?
GNS3 gui/server 2.0.3
ubridge 0.9.11
GNS3 is launched, but no project is open:
Opening an existing 2.0.3 project with a single non running IOS-XRv 6.1.2 qemu node:
Checking which process needs so much CPU:
ubridge should NOT be running, since no node is currently running.
If I load another project with other type(s) of qemu node, such as ASAv or CSR 1000v, ubridge is not running.
VERSION string in ubridge.h not updated, still "0.9.8".
ubridge 0.9.11 and 0.9.12, GNS3 version 2.0.4dev1 on Darwin (64-bit)
While TAP connections work in GNS3 v1.5, I wasn't able to use them on GNS3 V2.0, see also https://www.gns3.com/qa/how-to-connect-os-x-terminal-to-
Test project, router and cloud are running on the local OS X:
Other than in linux the TAP interfaces are not automatically detected in OS X. I have to use "/dev/tap0", otherwise the TAP device won't open, "tap0" as TAP device doesn't work.
After opening the TAP device I configured 10.1.1.1/24 on OS X and 10.1.1.100/24 on the router. But the router sees no (really 0) packets from OS X. Therefore no communication can happen.
In debug mode the ubridge.log looks like this:
/Users/behlers/GNS3/projects/osxtap/project-files/builtin/831e1592-8482-4b13-8605-2cfcca83c5c3# cat ubridge.log
recv: Input/output error
Hypervisor TCP control server started (IP 192.168.1.10 port 50638).
UDP tunnel connecting from local port 10000 to IPv4 addresss 192.168.1.10 on port 10001
Source NIO listener thread for 831e1592-8482-4b13-8605-2cfcca83c5c3-3 has started
Destination NIO listener thread for 831e1592-8482-4b13-8605-2cfcca83c5c3-3 has started
Destination NIO listener thread for 831e1592-8482-4b13-8605-2cfcca83c5c3-3 has stopped
Received 60 bytes on bridge '831e1592-8482-4b13-8605-2cfcca83c5c3-3' (source NIO)
0000: ff ff ff ff ff ff c2 01 03 bf 00 00 08 06 00 01 ................
0010: 08 00 06 04 00 02 c2 01 03 bf 00 00 0a 01 01 64 ...............d
0020: ff ff ff ff ff ff 0a 01 01 64 00 00 00 00 00 00 .........d......
0030: 00 00 00 00 00 00 00 00 00 00 00 00 ............
The hypervisor shows the following:
/Users/behlers/GNS3/projects/osxtap/project-files/builtin/831e1592-8482-4b13-8605-2cfcca83c5c3# telnet 192.168.1.10 50638
Trying 192.168.1.10...
Connected to imac.lan.
Escape character is '^]'.
bridge list
101 831e1592-8482-4b13-8605-2cfcca83c5c3-3 (NIOs = 2)
100-OK
bridge show 831e1592-8482-4b13-8605-2cfcca83c5c3-3
101 bridge '831e1592-8482-4b13-8605-2cfcca83c5c3-3' is running
101 Source NIO: 10000:192.168.1.10:10001
101 Destination NIO: /dev/tap0
100-OK
This will improve the performance a little bit.
https://blog.cloudflare.com/how-to-receive-a-million-packets/
http://man7.org/linux/man-pages/man2/sched_setaffinity.2.html
So we only have one tool to maintain.
Sorry my English
I have problems
Hello, I have the following problem.
MacOS Mojave
I receive this message when connecting the Switch L2"default" to the cloud
Server error from http://127.0.0.1:8000: SW1: unable to create generic ethernet NIO
SOLVED!!
sudo chown root:admin /Applications/GNS3.app/Contents/MacOS/ubridge
sudo chmod 4750 /Applications/GNS3.app/Contents/MacOS/ubridge
sudo chown root /Applications/GNS3.app/Contents/Resources/dynamips
sudo chmod +s /Applications/GNS3.app/Contents/Resources/dynamips
The readme file says that 'bridge stats' should show the stats. That does not work.
The documentation is is also not consistent with the actual output of 'hypervisor cmd_list hypervisor', which says that the command is 'bridge get_stats'.
bridge stats DYNAMIPS-20002-20003
202-Unknown command 'stats'
bridge get_stats DYNAMIPS-20002-20003
101 Source NIO: IN: 21489 packets (1339583 bytes) OUT: 33437 packets (2643643 bytes)
101 Destination NIO: IN: 33437 packets (2643643 bytes) OUT: 21489 packets (1339583 bytes)
100-OK
I have a version of the infamous GNS3 Windows 10 host Cloud not working. I have a couple details about the issue I haven't seen in my searching though.
It does work for my regular LAN NIC. The router device I'm using (Mikrotik CHR) can DHCP from the LAN in my house and talk to the internet just like any other computer here in another room.
That's the only interface it works with. I've tried TAPs(media set to always connected and app controlled), Loopbacks(created by GNS#'s loopback-manager.cmd), and a couple additional VMNetX's (created via GNS3's vmnet-manager.cmd).
I finally gave in and worked around it as recommended in
#43
Anyway, while troubleshooting, here's the interesting thing I found:
With the ubridge tunnel going from GNS3 VM (running the router device) to the local GNS3 server (running the Cloud) the get_stats hypervisor command shows packets properly flowing through the UDP tunnel but the "out bytes" count on one side is always 0.
101 4e2a2ee8-10d8-40a5-963b-3f1ef57d9ac1-1 (NIOs = 2)
100-OK
bridge show 4e2a2ee8-10d8-40a5-963b-3f1ef57d9ac1-1
101 bridge '4e2a2ee8-10d8-40a5-963b-3f1ef57d9ac1-1' is running
101 Source NIO: 10033:192.168.80.128:10053
101 Destination NIO: \Device\NPF_{3C5AB807-29F3-451A-B155-4F4CDCC2C11B}
100-OK
bridge get_stats 4e2a2ee8-10d8-40a5-963b-3f1ef57d9ac1-1
101 Source NIO: IN: 167 packets (8550 bytes) OUT: 197 packets (29284 bytes)
101 Destination NIO: IN: 197 packets (29284 bytes) OUT: 167 packets (0 bytes)
100-OK
Not many packets are shown in the captured stats above but I had previously ran pings from each end and let it run over night. Thousands of packets and bytes matched all around except for OUT on the host going to the Loopback device.
Also, sniffing with wireshark supports the idea the bytes output to the host are empty. I can see both directions of traffic in wireshark capturing via GNS3 (right click on link and start capture). But, if I run wireshark and sniff on the actual Loopback adapter on the Host, I see only outgoing packets. No frames ever make it to host.
The stats and sniffing was the same for TAP, loopbacks and VMnet devices I tried. Firewall was completely disabled for domain,public and private. I also added a ubridge.exe exception just to be sure.
Maybe the 'empty" packets output I've added above will help someone figure something out, or point me where to dig deeper.
Hi, the following line has a typo:
Line 97 in 634062b
It says "addresss" instead of "address".
Thanks,
Octavio.
Debian bullseye
gns"-gui/server 2.2.6
gns3-ubridge 0.9.17
The "A" node is a cloud with the configuration displayed in the window on the right.
Launching GNS3 leads to the GUI log:
GNS3 management console.
Running GNS3 version 2.2.6 on Linux (64-bit) with Python 3.7.7 Qt 5.12.5 and PyQt 5.14.1.
Copyright (c) 2006-2020 GNS3 Technologies.
Use Help -> GNS3 Doctor to detect common issues.
=> Running GNS3 as root is not recommended and could be dangerous
uBridge process has stopped, return code: 1
uBridge version 0.9.17 running with libpcap version 1.9.1 (with TPACKET_V3)
Hypervisor TCP control server started (IP 127.0.0.1 port 42091).
UDP tunnel connecting from local port 10079 to IPv4 address 127.0.0.1 on port 10078
UDP tunnel connecting from local port 10077 to IPv4 address 127.0.0.1 on port 10076
Source NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-0 has started
Destination NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-0 has started
UDP tunnel connecting from local port 10081 to IPv4 address 127.0.0.1 on port 10080
UDP tunnel connecting from local port 10034 to IPv4 address 127.0.0.1 on port 10035
Source NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-1 has started
Destination NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-1 has started
UDP tunnel connecting from local port 10083 to IPv4 address 127.0.0.1 on port 10082
UDP tunnel connecting from local port 10072 to IPv4 address 127.0.0.1 on port 10073
Destination NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-2 has started
Source NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-2 has started
UDP tunnel connecting from local port 10085 to IPv4 address 127.0.0.1 on port 10084
UDP tunnel connecting from local port 10074 to IPv4 address 127.0.0.1 on port 10075
Destination NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-3 has started
Source NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-3 has started
UDP tunnel connecting from local port 10087 to IPv4 address 127.0.0.1 on port 10086
UDP tunnel connecting from local port 10032 to IPv4 address 127.0.0.1 on port 10033
Source NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-4 has started
Destination NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-4 has started
UDP tunnel connecting from local port 10089 to IPv4 address 127.0.0.1 on port 10088
UDP tunnel connecting from local port 10052 to IPv4 address 127.0.0.1 on port 10053
Source NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-5 has started
Destination NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-5 has started
UDP tunnel connecting from local port 10091 to IPv4 address 127.0.0.1 on port 10090
UDP tunnel connecting from local port 10068 to IPv4 address 127.0.0.1 on port 10069
Source NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-6 has started
UDP tunnel connecting from local port 10093 to IPv4 address 127.0.0.1 on port 10092
UDP tunnel connecting from local port 10004 to IPv4 address 127.0.0.1 on port 10005
Source NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-7 has started
Destination NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-6 has started
Destination NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-7 has started
UDP tunnel connecting from local port 10095 to IPv4 address 127.0.0.1 on port 10094
UDP tunnel connecting from local port 10062 to IPv4 address 127.0.0.1 on port 10063
Source NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-8 has started
UDP tunnel connecting from local port 10097 to IPv4 address 127.0.0.1 on port 10096
UDP tunnel connecting from local port 10046 to IPv4 address 127.0.0.1 on port 10047
Source NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-9 has started
Destination NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-8 has started
Destination NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-9 has started
UDP tunnel connecting from local port 10099 to IPv4 address 127.0.0.1 on port 10098
UDP tunnel connecting from local port 10010 to IPv4 address 127.0.0.1 on port 10011
Source NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-10 has started
Destination NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-10 has started
recv: Connection refused
Destination NIO listener thread for QEMU-0426fff2-2efc-4f93-90fd-620735a54f3f-4 has stopped because of an error: Invalid argument
uBridge process has stopped, return code: 1
uBridge version 0.9.17 running with libpcap version 1.9.1 (with TPACKET_V3)
Hypervisor TCP control server started (IP 127.0.0.1 port 45795).
UDP tunnel connecting from local port 10103 to IPv4 address 127.0.0.1 on port 10102
UDP tunnel connecting from local port 10035 to IPv4 address 127.0.0.1 on port 10034
Source NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-0 has started
Destination NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-0 has started
UDP tunnel connecting from local port 10105 to IPv4 address 127.0.0.1 on port 10104
UDP tunnel connecting from local port 10066 to IPv4 address 127.0.0.1 on port 10067
Source NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-1 has started
Destination NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-1 has started
UDP tunnel connecting from local port 10107 to IPv4 address 127.0.0.1 on port 10106
UDP tunnel connecting from local port 10006 to IPv4 address 127.0.0.1 on port 10007
Destination NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-2 has started
Source NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-2 has started
UDP tunnel connecting from local port 10109 to IPv4 address 127.0.0.1 on port 10108
UDP tunnel connecting from local port 10060 to IPv4 address 127.0.0.1 on port 10061
Source NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-3 has started
Destination NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-3 has started
UDP tunnel connecting from local port 10111 to IPv4 address 127.0.0.1 on port 10110
UDP tunnel connecting from local port 10020 to IPv4 address 127.0.0.1 on port 10021
Source NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-4 has started
Destination NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-4 has started
UDP tunnel connecting from local port 10113 to IPv4 address 127.0.0.1 on port 10112
UDP tunnel connecting from local port 10070 to IPv4 address 127.0.0.1 on port 10071
Destination NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-5 has started
Source NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-5 has started
UDP tunnel connecting from local port 10115 to IPv4 address 127.0.0.1 on port 10114
UDP tunnel connecting from local port 10044 to IPv4 address 127.0.0.1 on port 10045
Destination NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-6 has started
Source NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-6 has started
recv: Connection refused
Destination NIO listener thread for QEMU-5ea19190-702a-44cf-9a4c-5807c98197fd-0 has stopped because of an error: Invalid argument
No such issue in the exact environment with:
gns3-gui/server 2.2.5
gns3-ubridge 0.9.16
You get the following message if you attach to a TAP more than once:
unable to create NIO TAP for bridge 'cfc22796-ad24-4101-ab1e-eedffdf623c5-0': create_nio_tap: unable to open TAP device tap0 (Device or resource busy)
I have issues using the cloud node to connect virtual devices to the host.
I can narrow down the problem using a simple test with the cloud node (on the host) and a VPCS:
Therefore, I think the problem is somewhere in the connection through the GNS3 VM.
I tried several versions of pcap and npcap with both installed, only winpcap or only npcap with compatibility mode. I also tried using different versions of ubridge (0.9.10,0.9.11,0.9.13). Using different GNS3 versions (2.0.0,2.0.3,2.1.0b1) also didn't result in any success.
More details on the connectivity tests I did: GNS3 forum
Thanks,
Dominik
Would be nice to have a simple NAT. Any volunteer? ;)
Hi
On debian jessie, make command does this error message
gcc -O3 -Wall -DLINUX_RAW -c -o src/parse.o src/parse.c
gcc -O3 -Wall -DLINUX_RAW -c -o src/packet_filter.o src/packet_filter.c
src/packet_filter.c: In function 'create_filter':
src/packet_filter.c:224:4: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
for (filter_table_t *plookup = lookup_table;
^
src/packet_filter.c:224:4: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
<builtin>: recipe for target 'src/packet_filter.o' failed
make: *** [src/packet_filter.o] Error 1
gcc -O3 -Wall -DLINUX_RAW -c -o src/packet_filter.o src/packet_filter.c
src/packet_filter.c: In function 'create_filter':
src/packet_filter.c:224:4: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
for (filter_table_t *plookup = lookup_table;
^
src/packet_filter.c:224:4: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
<builtin>: recipe for target 'src/packet_filter.o' failed
make: *** [src/packet_filter.o] Error 1
To solve, you can modify the Makefile to add to the variable "CFLAGS" the value "-std=gnu99"
CFLAGS = -O3 -Wall -std=gnu99
It's say __local_ctype_ptr is missing
After deleting an IOU bridge with delay filter enable
Hi~
Sub-interface with 802.1q tag in FortiGate VM 5.4.4 (KVM) on GNS3 1.5.3 doesn't work. I upgrade ubridge to version 0.9.11, but it still doesn't work. I try to create two 5.4.4 VM instances with same config in KVM by virt-manager, then connect them to same bridge. And It works well. My OS is Ubuntu 16.04. I am not sure if this issue is related to ubridge function?
The ubridge package for bionic is missing from the repository.
It's better for security reasons.
But by default it should be bind to 0.0.0.0 to keep compatibility
⋊> ~/D/ubridge on master ◦ make 14:13:27
gcc -O3 -Wall -DLINUX_RAW -c -o ubridge.o ubridge.c
gcc -O3 -Wall -DLINUX_RAW -c -o nio.o nio.c
gcc -O3 -Wall -DLINUX_RAW -c -o nio_udp.o nio_udp.c
gcc -O3 -Wall -DLINUX_RAW -c -o nio_unix.o nio_unix.c
gcc -O3 -Wall -DLINUX_RAW -c -o nio_ethernet.o nio_ethernet.c
gcc -O3 -Wall -DLINUX_RAW -c -o nio_tap.o nio_tap.c
gcc -O3 -Wall -DLINUX_RAW -c -o iniparser/iniparser.o iniparser/iniparser.c
gcc -O3 -Wall -DLINUX_RAW -c -o iniparser/dictionary.o iniparser/dictionary.c
gcc -O3 -Wall -DLINUX_RAW -c -o parse.o parse.c
In file included from parse.c:33:0:
nio_linux_raw.h:29:5: error: unknown type name ‘uint16_t’
uint16_t vlan_tp_id;
^~~~~~~~
nio_linux_raw.h:30:5: error: unknown type name ‘uint16_t’
uint16_t vlan_tci;
^~~~~~~~
: recipe for target 'parse.o' failed
make: *** [parse.o] Error 1
add "#include <stdint.h>" to the nio_linux_raw.h
make success
So bridges can be dynamically added/removed without reloading the config file (which is not supported on Windows because SIGHUP is not implemented on this platform).
Three warnings in src/iniparser/iniparser.c
are shown when building ubridge, here a full log: https://ci.appveyor.com/project/gns3-build/ubridge/builds/32494335
cc -O3 -Wall -IWpdPack\Include -c -o src/iniparser/iniparser.o src/iniparser/iniparser.c
In file included from src/iniparser/iniparser.c:10:
src/iniparser/iniparser.c: In function ‘iniparser_load’:
src/iniparser/iniparser.c:766:52: warning: array subscript has type ‘char’ [-Wchar-subscripts]
766 | ((line[len]=='\n') || (isspace(line[len])))) {
| ~~~~^~~~~
src/iniparser/iniparser.c:791:32: warning: ‘sprintf’ may write a terminating nul past the end of the destination [-Wformat-overflow=]
791 | sprintf(tmp, "%s:%s", section, key);
| ^
src/iniparser/iniparser.c:791:13: note: ‘sprintf’ output between 2 and 2050 bytes into a destination of size 2049
791 | sprintf(tmp, "%s:%s", section, key);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Guys, seriously.
Hi
To seek the bug "C99 or C11 mode" , i see the function "create_filter" of "packet_filter.c"
Will this function be more efficience if the "for" instruction exports the calcul of "lookup_table + sizeof(lookup_table) / sizeof(lookup_table[0])" in a variable before the "for" ?
It would be really nice if there was a way to get udp tunnel to do a ping/pong test to verify data sent was received. I had a compute node die and migrated everything over to another box. I aliased the ip (ip address add bla dev bla) with the old server to the new server (ens3.66 had .100 and .101 (100 old 101 new)) and was able to load the gui without issue but couldn't' figure out why I couldn't communicate outside of gns3. Even devices on the same switch couldn't communicate. This is with the gui connecting to .100 address.
After a lot of trouble shooting I removed the gns3 home dir and found I could attach devices to the network. In the end and I still don't understand why,the issue was the udp tunnels ubridge creates were not able to communicate. Even after blowing away all iptables rules. After disabling the host line that bound gns3 to a 2nd IP on the interface I was then able to attach VMs to the network and get data.
I've never questioned my GNS3 know how so much in one day. :D
Hello,
First things first:
Let's say that I connect the cable from the Windows Server to the ethernet switch and it works for a while. Then, out of nowhere (I don't touch anything) it losses the connection.
I did some digging and noticed that GNS3 changed the network adapter to vmnet10, as espected and If I sniff traffic while it's working I see bidirectional traffic on vmnet10 and the ubridge encapsulated packets.
When it stops working, I see only the Windows Server ARP requests in vmnet10, while in the ubridge tunnel I see both arp request and replies... as if it somehow stopped injecting packets in vmnet10. The bridge is still listed, though:
bridge list
100-OK
bridge list
101 ethernet0.vnet (NIOs = 2)
100-OK
bridge show ethernet0.vnet
101 bridge 'ethernet0.vnet' is running
101 Source NIO: \Device\NPF_{320C4731-9E0D-4777-AF47-D696FB43FB55}
101 Destination NIO: 10003:192.168.11.1:10004
100-OK
bridge get_stats ethernet0.vnet
101 Source NIO: IN: 100 packets (9502 bytes) OUT: 100 packets (0 bytes)
101 Destination NIO: IN: 100 packets (20250 bytes) OUT: 100 packets (9502 bytes)
100-OK
bridge list
101 ethernet0.vnet (NIOs = 2)
100-OK
bridge show ethernet0.vnet
101 bridge 'ethernet0.vnet' is running
101 Source NIO: \Device\NPF_{320C4731-9E0D-4777-AF47-D696FB43FB55}
101 Destination NIO: 10003:192.168.11.1:10004
100-OK
bridge get_stats ethernet0.vnet
101 Source NIO: IN: 152 packets (13334 bytes) OUT: 138 packets (0 bytes)
101 Destination NIO: IN: 139 packets (24530 bytes) OUT: 152 packets (13334 bytes)
100-OK
bridge get_stats ethernet0.vnet
101 Source NIO: IN: 161 packets (13712 bytes) OUT: 138 packets (0 bytes)
101 Destination NIO: IN: 139 packets (24530 bytes) OUT: 161 packets (13712 bytes)
100-OK
bridge get_stats ethernet0.vnet
101 Source NIO: IN: 168 packets (14006 bytes) OUT: 138 packets (0 bytes)
101 Destination NIO: IN: 139 packets (24530 bytes) OUT: 168 packets (14006 bytes)
100-OK
bridge get_stats ethernet0.vnet
101 Source NIO: IN: 173 packets (14216 bytes) OUT: 138 packets (0 bytes)
101 Destination NIO: IN: 139 packets (24530 bytes) OUT: 173 packets (14216 bytes)
100-OK
bridge get_stats ethernet0.vnet
101 Source NIO: IN: 175 packets (14300 bytes) OUT: 138 packets (0 bytes)
101 Destination NIO: IN: 139 packets (24530 bytes) OUT: 175 packets (14300 bytes)
100-OK
bridge get_stats ethernet0.vnet
101 Source NIO: IN: 179 packets (14468 bytes) OUT: 138 packets (0 bytes)
101 Destination NIO: IN: 139 packets (24530 bytes) OUT: 179 packets (14468 bytes)
100-OK
I repeated the stats command when I lost connectivity.
FWIW, I've attached the packet captures. Feel free to ask if you need anything else, I can reproduce the problem in minutes.
Max
captures.zip
Sorry my English
I have problems
Hello, I have the following problem.
I get this message
Bridge requires root access or capability to interact with network adapters
I'm using Palo Alto vmware
What Do I?
2 ideas:
As ubridge since 0.13 always shows the version on startup, ubridge -v
gives a little strange output:
/Users/behlers/GNS3/source/ubridge# ./ubridge -v
uBridge version 0.9.13 running with libpcap version 1.5.3 - Apple version 54
ubridge version 0.9.13
Maybe ubridge -v could just exit, as the version is already shown. But I don't know, if GNS3 parses the output. But then the first line could result in some unwanted bugs.
Hi there,
It appears ubridge 0.9.13 is unable to detect and run tap interfaces for GNS 2.1.11 MacOS 10.14.2. I started GNS3 as root and when I set up a test project with a Cisco IOS router and cloud/tap interface on the local OS X, I get the following error when I attempt to connect the router to the cloud's tap interface:
Error while sending command 'bridge add_nio_tap 5c076a45-9514-4f40-996a-3cf29b80f03b-5 "/dev/tap4"': unable to create NIO TAP for bridge '5c076a45-9514-4f40-996a-3cf29b80f03b-5': uBridge version 0.9.13 running with libpcap version 1.8.1 -- Apple version 79.200.4
Hypervisor TCP control server started (IP 127.0.0.1 port 57658).
UDP tunnel connecting from local port 10001 to IPv4 addresss 127.0.0.1 on port 10000
create_nio_tap: unable to open TAP device /dev/tap4 (No such file or directory)
Tap interface driver installed is tun tap and I've been able to manually bring up the tap interfaces and assign IPs for respective tap interfaces and it all works fine. So the issue appears to be with ubridge. Is this a known issue? Please is there a fix or workaround?
We use setuid on OSX only. For additional security we could implement something like this.
https://www.safaribooksonline.com/library/view/secure-programming-cookbook/0596003943/ch01s03.html
The OS X binary of release 0.9.16 shows version 0.9.17. As this binary is also included in the OS X package of GNS3 v2.1.19 (GNS3-2.1.19.dmg) the GNS3 package is also affected.
While this doesn't result in any bugs, it's quite unfortunate, that one can't rely on the version string displayed.
/Users/behlers# Downloads/ubridge-osx
uBridge version 0.9.17 running with libpcap version 1.8.1 -- Apple version 79.20.1
The Linux binary shows the correct version string, I haven't checked the windows binary.
send() returns an EINVAL Invalid argument
error if a network adapter goes down (when bound an adapter it is using) which means that the thread in charge of copying data just stops.
https://github.com/GNS3/ubridge/blob/master/src/ubridge.c#L107L119
uBridge keeps running, nothing is reported to the GNS3 server and only a log entry is created. This issue also impacts GNS3/gns3-server#1634
I think there are 2 ways to recover from this:
In file included from packet_filter.c:23:
./packet_filter.h:39:4: error: unknown type name 'u_int'
u_int type;
^
1 error generated.
make: *** [packet_filter.o] Error 1
Line 160 in 50ef75a
The check is wrong, should be:
if (strlen(if1) >= IFNAMSIZ || strlen(if2) >= IFNAMSIZ) {
This causes that when you allocate more than 100 ports to containers, the name exceeds the allowed length, but instead of receiving an message saying that the name is too long, you get a cryptic:
could not complete nettling transaction
vagrant@gns3-iouvm:~$ telnet localhost 4242
bridge create b7052cc1-d49f-4e3f-844c-d53622cebafe-0
100-bridge 'b7052cc1-d49f-4e3f-844c-d53622cebafe-0' created
bridge add_nio_udp b7052cc1-d49f-4e3f-844c-d53622cebafe-0 30001 127.0.0.1 30000
UDP tunnel connecting from local port 30001 to IPv4 addresss 127.0.0.1 on port 30000
100-NIO UDP added to bridge 'b7052cc1-d49f-4e3f-844c-d53622cebafe-0'
bridge add_nio_linux_raw b7052cc1-d49f-4e3f-844c-d53622cebafe-0 "eth0"
100-NIO Linux raw added to bridge 'b7052cc1-d49f-4e3f-844c-d53622cebafe-0'
bridge start b7052cc1-d49f-4e3f-844c-d53622cebafe-0
100-bridge 'b7052cc1-d49f-4e3f-844c-d53622cebafe-0' started
Destination NIO listener thread for b7052cc1-d49f-4e3f-844c-d53622cebafe-0 has started
Segmentation fault (core dumped) ubridge -H 4242
Performances could potentially be increased using "zero copy" networking features on Linux (PACKET_RX_RING or PACKET_TX_RING).
Some examples can be found there:
https://github.com/vieites4/rawsockets/blob/master/docs/snippets/packet_mmap.c
http://codemonkeytips.blogspot.ca/2011/07/asynchronous-packet-socket-reading-with.html
http://yusufonlinux.blogspot.ca/2010/11/data-link-access-and-zero-copy.html
ubridge 0.9.16 (GNS 2.2.5) doesn't work with tap interfaces on OS X
I am having a problem with the same issue as Issues # 55.
Issues #55 did n’t give me a solution,
Please check again.
How can I connect?
Error while sending command 'bridge add_nio_tap 70f9e6d6-f9d5-4d20-8af9-24796f3b2054-9 "/ dev / tap0"': unable to create NIO TAP for bridge '70f9e6d6-f9d5-4d20-8af9-24796f3b2054-9': uBridge version 0.9 .16 running with libpcap version 1.8.1-Apple version 79.250.1
Hypervisor TCP control server started (IP localhost port 64869).
UDP tunnel connecting from local port 10000 to IPv4 addresses 127.0.0.1 on port 10001
create_nio_tap: unable to open TAP device / dev / tap0 (No such file or directory)
Cannot modify a cloud that is already connected.
—————————
My environment is as follows.
ubridge 0.9.16
GNS 2.2.5
OS X: 10.14.5 Mojave
—————————
The reproduction method is as follows.
==================
1.tuntap install
brew cask install tuntap
2.GNS3 Setting
GNS3 → Cloud → Configure → TAP interfaces
/ dev / tap0 add
3.Cabling
Cloud ———— cisco (Router)
==================
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.