From fa7fde87db0732f7906bccf8cfda08b66a9c4faf Mon Sep 17 00:00:00 2001 From: Daniel Barlow Date: Tue, 14 May 2024 22:19:34 +0100 Subject: [PATCH] add hacky wwan service with hardcoding all over --- examples/l2tp.nix | 12 ++++-------- modules/cdc-ncm/default.nix | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/examples/l2tp.nix b/examples/l2tp.nix index e755a89..34354ff 100644 --- a/examples/l2tp.nix +++ b/examples/l2tp.nix @@ -31,12 +31,10 @@ in rec { ]; hostname = "thing"; - services.dhcpc = - let iface = config.hardware.networkInterfaces.lan; - in svc.network.dhcp.client.build { - interface = iface; - dependencies = [ config.services.hostname ]; - }; + services.dhcpc = svc.network.dhcp.client.build { + interface = config.services.wwan; + dependencies = [ config.services.hostname ]; + }; services.sshd = svc.ssh.build { }; @@ -85,6 +83,4 @@ in rec { passwd = lib.mkForce secrets.root.passwd; openssh.authorizedKeys.keys = secrets.root.keys; }; - - } diff --git a/modules/cdc-ncm/default.nix b/modules/cdc-ncm/default.nix index 0e030f2..97970e9 100644 --- a/modules/cdc-ncm/default.nix +++ b/modules/cdc-ncm/default.nix @@ -1,5 +1,8 @@ -{ config, ... }: -{ +{ config, pkgs, lib, ... }: +let + inherit (pkgs.liminix.services) oneshot; + svc = config.system.service; +in { config = { kernel.config = { USB_NET_HUAWEI_CDC_NCM = "y"; @@ -8,6 +11,33 @@ USB_SERIAL_OPTION = "y"; }; + # https://www.0xf8.org/2017/01/flashing-a-huawei-e3372h-4g-lte-stick-from-hilink-to-stick-mode/ + + services.wwan = let + chat = lib.escapeShellArgs [ + "" "AT" + "OK" "ATZ" + "OK" "AT+CGDCONT=1,\"IP\",\"data.uk\"" + "OK" "AT+CGACT=1,1" + # caret is special to chat, so needs escaping in AT commands + "OK" "AT\\^AUTHDATA=1,2,\"1p\",\"one2one\",\"user\"" + "OK" "AT\\^NDISDUP=1,1" # ,\"data.uk\",\"user\",\"one2one\",2" + ]; + modemConfig = oneshot { + name = "modem-configure"; + up = '' + sleep 2 + ${pkgs.usb-modeswitch}/bin/usb_modeswitch -v 12d1 -p 14fe --huawei-new-mode + sleep 5 + ${pkgs.ppp}/bin/chat -s -v ${chat} 0<>/dev/ttyUSB0 1>&0 + ''; + down = "chat -v '' ATZ OK &0"; + }; + in svc.network.link.build { + ifname = "wwan0"; + dependencies = [ modemConfig ]; + }; + # an ncm ethernet adaptor does # * usb modeswitch # * AT commands @@ -19,4 +49,3 @@ # https://stackoverflow.com/questions/5477882/how-to-i-detect-whether-a-tty-belonging-to-a-gsm-3g-modem-is-a-data-or-control-p }; } -