# [Solved] Two Huawei 3372h simultaneous operation

## orion777

I'm a newbee in gentoo, so sorry for stupid questions if exist.

The problem what I want to solve is that 3G/4G modem works fine only if: 1) cell tower signal strength is sufficient 2) cell is not overloaded.

To overcome these problems I want to try to use 2 dongles Huawei 3372h simultaneously with different cellular network operators SIM cards. 

Now I need tot use both dongles in parallel by sending similar packets thru both dongles. Google answer me that PRP (Parallel Redundancy Protocol) actually do what I want. The software solution were found at zhaw university: they provide software based PRP Open Source Stack. It work under linux only, so here am. There are no problem to build it, but now I have a number of problems.

1. Problem.

Both Huawei 3372h works in HILINK mode and are reprogrammed manually. Both have same MAC. The MobileBrServ was successfully installed and works fine with one dongle inserted. Internet also is accessible. But when two dongles are inserted, one of them is left inactive. If I bring it up by choosing tham in Networkmanager Applet 1.4.2 under available, the second one goes down.

```
 ifconfig

eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

        ether 00:1c:23:25:60:49  txqueuelen 1000  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

        device interrupt 17  

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        ether 0c:5b:8f:27:9a:64  txqueuelen 1000  (Ethernet)

        RX packets 24  bytes 8893 (8.6 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.8.100  netmask 255.255.255.0  broadcast 192.168.8.255

        inet6 fe80::69a:c53c:2cd2:485d  prefixlen 64  scopeid 0x20<link>

        ether 0c:5b:8f:27:9a:64  txqueuelen 1000  (Ethernet)

        RX packets 37  bytes 5496 (5.3 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 49  bytes 4605 (4.4 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 1  (Local Loopback)

        RX packets 56  bytes 4088 (3.9 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 56  bytes 4088 (3.9 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.1.117  netmask 255.255.255.0  broadcast 192.168.1.255

        inet6 fe80::5939:1e60:e5e2:aa04  prefixlen 64  scopeid 0x20<link>

        ether 00:1c:bf:4a:7b:9d  txqueuelen 1000  (Ethernet)

        RX packets 33716  bytes 29749519 (28.3 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 28812  bytes 4309356 (4.1 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

```

where eth1 and eth2 are these dongles. 

Now I suppose that it does not work because of identical MAC address. Ok, try to change it

```
 ifconfig eth1 down

ifconfig eth1 hw ether 02:01:02:03:04:05

ifconfig eth1 up

```

The result looks fine: eth1 now has different MAC.

```
 eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

        ether 00:1c:23:25:60:49  txqueuelen 1000  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

        device interrupt 17  

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        ether 02:01:02:03:04:05  txqueuelen 1000  (Ethernet)

        RX packets 68  bytes 29841 (29.1 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.8.100  netmask 255.255.255.0  broadcast 192.168.8.255

        inet6 fe80::69a:c53c:2cd2:485d  prefixlen 64  scopeid 0x20<link>

        ether 0c:5b:8f:27:9a:64  txqueuelen 1000  (Ethernet)

        RX packets 93  bytes 31709 (30.9 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 53  bytes 4845 (4.7 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 1  (Local Loopback)

        RX packets 56  bytes 4088 (3.9 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 56  bytes 4088 (3.9 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.1.117  netmask 255.255.255.0  broadcast 192.168.1.255

        inet6 fe80::5939:1e60:e5e2:aa04  prefixlen 64  scopeid 0x20<link>

        ether 00:1c:bf:4a:7b:9d  txqueuelen 1000  (Ethernet)

        RX packets 33797  bytes 29784693 (28.4 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 28813  bytes 4309420 (4.1 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

```

Unfortunately, eth1 still has no IP and is down. The NetworkManager Applet still give a possibility to select only one of them. I'm really confused, please help!

2. Problem

Ok, lets imagine that both dongles are now operating. Now lets start virtual PRP (for the given example I use eth2 and wlan0 as they are active)

```
 ./prp_pcap_tap_userspace wlan0 eth2
```

Now ifconfig reports that new network interface prp1 is available:

```
Gentoo-Punkts ~ # ifconfig

eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

        ether 00:1c:23:25:60:49  txqueuelen 1000  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

        device interrupt 17  

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        ether 02:01:02:03:04:05  txqueuelen 1000  (Ethernet)

        RX packets 112  bytes 50789 (49.5 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth2: flags=5059<UP,BROADCAST,RUNNING,NOARP,PROMISC,ALLMULTI,MULTICAST>  mtu 1500

        inet 192.168.8.100  netmask 255.255.255.0  broadcast 192.168.8.255

        ether 02:1c:bf:4a:7b:9d  txqueuelen 1000  (Ethernet)

        RX packets 138  bytes 52685 (51.4 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 108  bytes 8744 (8.5 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 1  (Local Loopback)

        RX packets 56  bytes 4088 (3.9 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 56  bytes 4088 (3.9 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

prp1: flags=4675<UP,BROADCAST,RUNNING,ALLMULTI,MULTICAST>  mtu 1494

        inet6 fe80::21c:bfff:fe4a:7b9d  prefixlen 64  scopeid 0x20<link>

        ether 00:1c:bf:4a:7b:9d  txqueuelen 1000  (Ethernet)

        RX packets 28  bytes 2019 (1.9 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 9  bytes 758 (758.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4995<UP,BROADCAST,NOARP,PROMISC,ALLMULTI,MULTICAST>  mtu 1500

        inet 192.168.1.117  netmask 255.255.255.0  broadcast 192.168.1.255

        ether 02:1c:bf:4a:7b:9d  txqueuelen 1000  (Ethernet)

        RX packets 33886  bytes 29819407 (28.4 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 28815  bytes 4309544 (4.1 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

```

But the NetworkManager Applet reports that there are NO any prp1 available. This problem were checked on PCLinuxOS_2011 and its network manages is able to show prp1 as available choice. What is the solution for gentoo?

Also, maybe I am completely wrong, maybe I have to use something like BONDING feature in gentoo (was founded it in gentoo handbook)? Just to remember: the task is to develop extremely stable connection. Active - Reserved networks solutions cannot be used because these network switching takes some time, but the time delays are not allowed. That why I was taken PRP as a reference.. 

Please note: I am not a network engineer, I don't receive any money for this (this is my university project which is a possible solution for the problem), also I am a newbee in gentoo (I know only some basics in linux).

Thanks for Your time!Last edited by orion777 on Mon Apr 10, 2017 7:50 am; edited 2 times in total

----------

## khayyam

orion777 ...

I expect NetworkManager is the issue here, it's designed with "usability" in mind (which equates to doing what it thinks needs to happen). I don't use it, so can't make any suggestions.

I don't know about PRP Open Source Stack, but you might be interested in MultipathTCP (a kernel patch).

best ... khay

----------

## orion777

Thank You about MPTCP. After a brief reading its looks to me as something similar to bonding active-backup (from gentoo handbook) (as I understood from the webpage attached video: one network interface is disabled - then second goes on and so). Maybe I am wrong?..

What network manager do You suggest? I need some manager to work with wifi, or maybe nmtui is sufficient? 

How to select desired interface what should to be used from already up interfaces? In windows I was modified IP tables by using command route https://technet.microsoft.com/ru-ru/library/bb490991.aspx : first delete all routes, than add route with wanted network card IP and it will use only this specified network card to transmit something (all cards still are capable to receive). Maybe same must be done in gentoo?

----------

## orion777

Actually, I don't know what is happening... now I specify 

fconfig eth2 hw ether 0c:5b:8f:27:7a:64

instead of hw ether 02:01:02:03:04:05 which was specified in the previous example.. 

and now both dongles (eth1 and eth2) are working!

But, when I enable PRP software emulation of the network card (prp1 in ifconfig), it cannot be added into NetworkManager 1.4.2. I was trying to use Edit connections - wired and so.. but there are no prp1 option.. Also I was trying to /etc/init.d/NetworkManager restart , but still no prp1 option  :Sad: 

```
eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

        ether 00:1c:23:25:60:49  txqueuelen 1000  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

        device interrupt 17  

eth1: flags=5059<UP,BROADCAST,RUNNING,NOARP,PROMISC,ALLMULTI,MULTICAST>  mtu 1500

        inet 192.168.8.101  netmask 255.255.255.0  broadcast 192.168.8.255

        inet6 fe80::c5b:8fff:fe27:9a64  prefixlen 64  scopeid 0x20<link>

        ether 0e:5b:8f:27:9a:64  txqueuelen 1000  (Ethernet)

        RX packets 388  bytes 140289 (137.0 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 620  bytes 60731 (59.3 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth2: flags=5059<UP,BROADCAST,RUNNING,NOARP,PROMISC,ALLMULTI,MULTICAST>  mtu 1500

        inet 192.168.8.102  netmask 255.255.255.0  broadcast 192.168.8.255

        inet6 fe80::bb03:5c8a:881c:d3ea  prefixlen 64  scopeid 0x20<link>

        inet6 fe80::c5b:8fff:fe27:9a64  prefixlen 64  scopeid 0x20<link>

        ether 0e:5b:8f:27:9a:64  txqueuelen 1000  (Ethernet)

        RX packets 290  bytes 132582 (129.4 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 299  bytes 23274 (22.7 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 1  (Local Loopback)

        RX packets 72  bytes 5256 (5.1 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 72  bytes 5256 (5.1 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

prp1: flags=4675<UP,BROADCAST,RUNNING,ALLMULTI,MULTICAST>  mtu 1494

        inet 192.168.8.100  netmask 255.255.255.0  broadcast 192.168.8.255

        inet6 fe80::e5b:8fff:fe27:9a64  prefixlen 64  scopeid 0x20<link>

        ether 0c:5b:8f:27:9a:64  txqueuelen 1000  (Ethernet)

        RX packets 582  bytes 201424 (196.7 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 16  bytes 1751 (1.7 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.1.117  netmask 255.255.255.0  broadcast 192.168.1.255

        inet6 fe80::5939:1e60:e5e2:aa04  prefixlen 64  scopeid 0x20<link>

        ether 00:1c:bf:4a:7b:9d  txqueuelen 1000  (Ethernet)

        RX packets 12703  bytes 10276972 (9.8 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 9634  bytes 1567915 (1.4 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
```

----------

## orion777

Problem is solved.

Both Huawei 3372H in HiLINK mode (default mode) operates as a NAT and DHCP servers.Both dongles has same settings. One dongle settings should be changed: different dongle IP address should be entered (NOT 192.168.8.1 because this IP will becomes gateway address, but two identical gateways is bad idea) and different DHCP range (to get different learned IP for both dongles). This allows both active dongles simultaneous operation.

----------

