1

Temat: lede i mwan3

W miare świeży trunk lede (r418). Mam dwa łącza. Drugie, zapasowe to E3372 w trybie ncm. Plik /lib/netifd/proto/ncm.sh poprawiany ręcznie aby wspierać metric itd. W configu network:

config interface 'ply'
        option proto 'ncm'
        option device '/dev/ttyUSB0'
        option apn 'internet'
        option metric '20'
        option dns '8.8.8.8 8.8.4.4'
        option peerdns '0'
        option family 'ipv4'
        option ipv6 '0'

Co dziwne aby mwan3 widział interfejs 'ply' musze w jego configu zdefiniować 'ply_4':

config interface 'ply_4'
        option enabled '1'
        list track_ip '8.8.4.4'
        list track_ip '8.8.8.8'
        list track_ip '208.67.222.222'
        list track_ip '208.67.220.220'
        option reliability '1'
        option count '1'
        option up '8'
        option timeout '4'
        option interval '10'
        option down '6'

Kłopot jest taki, że mwan3 nie potrafi takiego 'ply_4' podnieść jak się rozłączy. Jak się domyślam _4 i _6 to jakieś 'ukryte' interfejsy ipv4 i ipv6 więc kombinowałem z różnymi ustawieniami family, ipv6 '0' itp.
Pierwszy interfejs - wan (eth1) nie ma tego problemu - mogę w mwan3 używać 'wan'.
Czy mwan3 stał się niekompatybilny z lede/ncm?

2

Odp: lede i mwan3

Może nie być, zgłoś to.

Twój ply tak prawdę mówiąc robi połączenie po ncm a później woła samodzielnie w tle następny interfejs - ply_4 z dhcp żeby adres pobrać (i tak samo dla ipv6 woła ply_6). Więc nie możesz samodzielnie tego podnieść bo bez ply nie istnieje ply_4.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3 (edytowany przez marek 2016-08-29 14:50:09)

Odp: lede i mwan3

Udało mi się zmusić mwan3 do pracy z ncm ale musiałem trochę wyrzeźbić. Piszę z nadzieją, że ktoś wskaże jak można to było zrobić lepiej.

Wcześniej próbowałem używać funkcji network_find_wan zamiast dodawania "_4" ale funkcja działała sensownie tylko przy podniesionym interfejsie inaczej zwraca "wan".

Patch dla /lib/mwan3/mwan3.sh:

--- mwan3.sh_org        2016-08-28 22:35:11.187322358 +0200
+++ mwan3.sh    2016-08-28 22:35:11.180655688 +0200
@@ -122,16 +122,22 @@
 
 mwan3_create_iface_iptables()
 {
-       local id family src_ip src_ipv6
+       local id family src_ip src_ipv6 if_main if_proto
 
        config_get family $1 family ipv4
        mwan3_get_iface_id id $1
 
        [ -n "$id" ] || return 0
+       network_get_protocol if_proto $1
 
        if [ "$family" == "ipv4" ]; then
+               if [ "$if_proto" == "ncm" ]; then
+                       if_main=$1"_4"
+               else
+                       if_main=$1
+               fi
 
-               network_get_ipaddr src_ip $1
+               network_get_ipaddr src_ip $if_main
 
                $IPS -! create mwan3_connected list:set
 
@@ -231,16 +237,22 @@
 
 mwan3_create_iface_route()
 {
-       local id route_args
+       local id route_args if_proto if_main
 
        config_get family $1 family ipv4
        mwan3_get_iface_id id $1
 
        [ -n "$id" ] || return 0
 
+       network_get_protocol if_proto $1
        if [ "$family" == "ipv4" ]; then
-
-               network_get_gateway route_args $1
+                if [ "$if_proto" == "ncm" ]; then
+                        if_main=$1"_4"
+                else
+                        if_main=$1
+                fi
+       
+               network_get_gateway route_args $if_main
                route_args="via $route_args dev $2"
 
                $IP4 route flush table $id

Podobna zmiana potrzebna w /etc/hotplug.d/iface/15-mwan3

--- 15-mwan3_org        2016-08-29 15:42:45.727976375 +0200
+++ 15-mwan3    2016-08-29 15:42:02.888413194 +0200
@@ -22,14 +22,21 @@
 [ -x /usr/sbin/ip6tables ] || exit 7
 [ -x /usr/bin/logger ] || exit 8
 
-local family gateway
+local family gateway if_proto if_main
 
 config_get family $INTERFACE family ipv4
+network_get_protocol if_proto $INTERFACE
+
+if [ "$if_proto" == "ncm" ]; then
+       if_main=$INTERFACE"_4"
+else
+       if_main=$INTERFACE
+fi
 
 if [ "$family" == "ipv4" ]; then
-       network_get_gateway gateway $INTERFACE
+       network_get_gateway gateway $if_main
 elif [ "$family" == "ipv6" ]; then
-       network_get_gateway6 gateway $INTERFACE
+       network_get_gateway6 gateway $if_main
 fi
 
 [ -n "$gateway" ] || exit 9

Nie dodawałem obsługi ipv6 bo nie używam i wyglądałoby jeszcze gorzej.

4

Odp: lede i mwan3

Ale może zgłosił byś to autora projektu?

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.