Para aqueles que estão familiarizados com a construção de módulos Linux ou Linux em particular, aqui está outra possível correção.
Isso adiciona uma correção ao módulo linux rndis_host para corrigir o endereço mac corrompido e torna-o novamente uma solução plug-and-play para tethering.
Curiosamente, alguém já adicionou uma solução alternativa para o endereço mac 'desarrumado' em rndis_host.c. Infelizmente não cobre o case com o Samsung S7. Eu adicionei as seguintes linhas:
int
generic_rndis_bind(struct usbnet *dev, struct usb_interface *intf, int flags)
{
...
if (bp[0] & 0x02)
eth_hw_addr_random(net);
else
ether_addr_copy(net->dev_addr, bp);
// correct Samsung S7 'zero' mac address
if ( (bp[0]==0) && (bp[1]==0) && (bp[2]==0) /*&& (bp[3]==0) && (bp[4]==0) && (bp[5]==0)*/ ) {
// invalid mac address ==> generate one
eth_hw_addr_random(net);
}
// end of my fix
Agora reconstrua o módulo do kernel e substitua-o pelo original 'rndis_host.ko.xz' e execute 'depmod -a'. Eu sugiro para reiniciar ou, pelo menos, remover o módulo antigo: 'rmmod rndis_host'
Espero que isso funcione para você. Agora apenas conecte seu Smamsung S7 e ative o tethering. Agora ele deve carregar o novo módulo rndis_host e criar a configuração correta da interface e as rotas necessárias automaticamente.
# ifconfig enp0s20u3
enp0s20u3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.42.253 netmask 255.255.255.0 broadcast 192.168.42.255
inet6 fe80::f970:b67b:661f:254c prefixlen 64 scopeid 0x20<link>
ether 92:06:fe:75:9e:43 txqueuelen 1000 (Ethernet)
RX packets 100 bytes 35951 (35.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 135 bytes 31911 (31.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.42.129 0.0.0.0 UG 0 0 0 enp0s20u3
192.168.42.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s20u3
Aqui uma comparação do que eu corrigi:
# diff -u rndis_host.c.ORIG rndis_host.c
--- rndis_host.c.ORIG 2017-04-05 15:19:01.353765062 -0700
+++ rndis_host.c 2017-04-05 15:18:37.327765272 -0700
@@ -434,6 +434,13 @@
else
ether_addr_copy(net->dev_addr, bp);
+//--------- correct Samsung S7 'zero' mac address -------------------------------------------------//
+ if ( (bp[0]==0) && (bp[1]==0) && (bp[2]==0) /*&& (bp[3]==0) && (bp[4]==0) && (bp[5]==0)*/ ) {
+ // invalid mac address ==> generate one
+ eth_hw_addr_random(net);
+ }
+//----- end of correction--------------------------------------------------------------------------//
+
/* set a nonzero filter to enable data transfers */
memset(u.set, 0, sizeof *u.set);
u.set->msg_type = cpu_to_le32(RNDIS_MSG_SET);