7 with (import ./names-and-numbers.nix);
 
   9   inherit (config.users) users;
 
  10   modemmanager = pkgs.modemmanager-1-18;
 
  12 #modemmanager = pkgs.modemmanager-1-20-4;
 
  14   networking.nftables.ruleset = ''
 
  17         iifname ${lteIface} jump input-net
 
  18         iifname ${lteIface} log level warn prefix "input-net: " counter drop
 
  21         ip daddr 10.151.0.1 tcp dport 8080 counter accept \
 
  22           comment "mmsd: Prixtel/SFR"
 
  25         oifname ${lteIface} jump output-net
 
  26         oifname ${lteIface} log level warn prefix "output-net: " counter drop
 
  28       chain forward-to-net {
 
  30       chain forward-from-net {
 
  32       chain forward-to-net { }
 
  33       chain forward-from-net { }
 
  35         iifname { ${wifiIface}, ${eth1Iface}, ${eth2Iface}, ${eth3Iface} } oifname ${lteIface} goto forward-to-net
 
  36         iifname ${lteIface} oifname { ${wifiIface}, ${eth1Iface}, ${eth2Iface}, ${eth3Iface} } goto forward-from-net
 
  41         iifname { ${wifiIface}, ${eth1Iface}, ${eth2Iface}, ${eth3Iface} } oifname ${lteIface} masquerade
 
  45   services.mmsd.enable = true;
 
  46   services.mmsd.extraArgs = [ "--debug" ];
 
  47   systemd.services.ModemManager.serviceConfig.ExecStart = lib.mkForce [
 
  49     # See https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/780
 
  50     "${modemmanager}/bin/ModemManager --debug"
 
  52   systemd.services.NetworkManager.wants = [ "ModemManager.service" ];
 
  53   services.dbus.packages = [ pkgs.dconf ];
 
  54   programs.dconf.enable = true;
 
  55   environment.etc."NetworkManager/system-connections/Prixtel.nmconnection" = {
 
  60       uuid=b223f550-dff1-4ba3-9755-cd4557faaa5a
 
  63       autoconnect-priority=999
 
  75       dhcp-send-hostname=false
 
  79       addr-gen-mode=stable-privacy
 
  81       dhcp-send-hostname=false
 
  86   systemd.services.watch-lte = {
 
  88       "ModemManager.service"
 
  89       "NetworkManager.service"
 
  90       "NetworkManager-wait-online.service"
 
  93       "ModemManager.service"
 
  94       "NetworkManager.service"
 
  95       "NetworkManager-wait-online.service"
 
  97     wantedBy = [ "network-online.target" ];
 
  98     #startAt = "*:0/5"; # every 5 min
 
 106       StartLimitIntervalSec = 0;
 
 110       IPAddressAllow = [ "9.9.9.9" ];
 
 111       RestrictAddressFamilies = [
 
 116       ExecStart = pkgs.writeShellScript "watch-lte" ''
 
 120           if ping 9.9.9.9 --count 10 --linger 20 --interval 1 --quiet --numeric
 
 121           then lastPONG=$(date +%s)
 
 123           if test $(( $(date +%s) - lastPONG )) -gt 300
 
 125             modem=$(mmcli -L -J | jq -r '.["modem-list"][0]') || true
 
 126             mmcli -m "$modem" --command "AT+CFUN=1,1" || true
 
 128             systemctl restart ModemManager
 
 130             nmcli connection up Prixtel
 
 135       Restart = "on-failure";
 
 139   environment.systemPackages = [
 
 140     pkgs.modem-manager-gui
 
 148     # https://gitlab.com/mobian1/callaudiod/-/issues/26
 
 149     # https://gitlab.com/mobian1/callaudiod/-/issues/27