-- Configuration Template for Neanderfunk / Eulenfunk - Gluon 2023.2.x
{
  hostname_prefix = 'dusfl-',
  site_name = 'Freifunk Düsseldorf-Flingern - Domain 13 (Eulenfunk)',
  site_code = 'dus-13_dusfl',

  -- Must be the same of all nodes in one mesh domain
  domain_names = { ['ffdus-13dusfl'] = 'Flingern' },
  domain_seed = '5560e4374123009e43528ec8e78a0e97e1708bc57b9dc062a1f9f00386419b11',

  config_mode = {
    hostname = {
      optional = false,
    },
    owner = {
      obligatory = false,
    },

    geo_location = {
      show_altitude = true,
      osm = {
      center = {
        lat = 51.2236,
        lon = 6.8228,
      },
      zoom = 14,
      tile_layer = {
        type = 'XYZ',
	url = 'https://tiles.ffdus.de/a.tile.openstreetmap.org/{z}/{x}/{y}.png',
	attributions = '&#169; <a href="https://www.openstreetmap.org/copyright" target="_blank">OpenStreetMap</a> contributors.',
	},
      },
    },
    owner = {
      optional = false,
      obligatory = true,
    },
    remote_login = {
      show_password_form = true,
      min_password_length = 12,
    },
  },

  setup_mode = {
    skip = true,
  },
  authorized_keys = { 
          'ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAufGE6eK/iZTeLKCduy4UEyQpkXX+Z/0SAbYCbkJhJjNpYJaAaMhPI9yPWqsSJlQ9NSMVHMWF+3fTYb8uXEMFxEAXLqgYWhc7fs45FwvP7Ki9q5vZlvrKdB0MOPkQsY1sI3AEtcFwoft0uemW9QZUJ9jxBSi82BDbSZnFykv81ds= adorfer',
          'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCcyauL2INrpsB2gufsm4TD1TkpuUgF68blvbJnYr6obvPm4kVTUbhc8VFSHeMkRHtxYHkU07NfFe2E0sDmpDNJ+CPFeTFMlqOfKsjq1m5Tng9mAEwCFVJJDRl8g70UkkUUzUKgsE38+NYOwY8nthmpJEA7XiE1YcwkBodLFEhdXM5bLJ2cRlNFE2mKYbBQx3Cp1trPJDU00ioyNpAnqrwNAXCxTL4nPmCuC5iPhE7lrFyc7v5D6o0Jw/pEGfQxkOinkncwg2RUfSpShnpSzmlZ+aWKNBhabGXAOH7CQceoFShAl5Hzqvcn7NBJUuM4kzWsPQd6gKL+XBDfyqhnbsL andreas@neanderfunk',
          'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyGzk43wy0HNJ7+qQYtesTbMMSkgTbzmFRVvvtn95Cl2LFC5R/ykcdnYiBgrHIDdDBRQohF6Q6peh9zhiI0e+x6tsw5sduVIdpLTKKn/Q3VrH4/QgF6hhhL9WNEQThim7WobNj8JybhnnZKcUdYV6ywXSkfh+Q68eoJKstdrKbtU95c2d6aHfsQCJJG39KWfHugaPmo5yNYRH033Rsf6IIKoYskSZbUcNfB03cqy+kA/2TcjpV2amPhbYXdrzwlC8C3w8Ps+1bInosaomPMdpkkDkLG9vBOh+PLkQJo+5JCNsfqK+D+QmCvSKSCl609lb8jRFWo+46K1T3KWJWmPVnQ== wisejoe@froeckel',
          'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCm9rr9PM9q2W6u1L7FmZYhBBsy9QzZI6vRm5GOSkKsp+wdEMJwK6MDmndv765kOd9dtBlREddtzee2zzNAb+Lcci5GiOUGd5vIzWHB4YtIH01exn+RjtTy5SG/SxtH91YuMpC8WJNUoYa3ON+TS+jD/S+lzg9yPwFzOzonyLx81Q1ANS7gcBNUzxYOlqzr/yOdyDti7DEnqQWHf0jjYv3AACx/fdYDFyRBQMJ0oUmWUiQDb7y7PXR+MGuX1J7NKlItFs3OjePjNL4SToYKphVdhl9ZhNbWEaPKnrKZHvrqBrtqDTQD2ajh956jrj0ZzfT2bsVzEj1PMNeAhbPSgjOygMtnqN49bNflDWbwrBNyZnbtFXFxpxmVcFQ6bjWnbqy3vYur2LUNQpL0D0lffXu7zDJJWNfDqVLDjIMG1IKvCaCthrBMiaaV2RW2XgI5f3fcDjrLTjDIwLxSzMfMgNUzmbuce236/um6UmOauGYaN5qjb/VLHw2QhooY/dHkkYH+Hq4HqAokJrajRu8wxo0OOJhWqbdq7QsKWXXx7W9yrTfgGvEDMUp4jIzltVUmeF+yd3IYm9GxRrBBNybL9FGRmhLHLzSGJ99vHFUFPlkiJGRtXiaajUlJz6ZOfh6RO+H/LLmw4pDIvilvq5+EjQuH79q4RScD3TXkIDbb0ls4+w== jonathanneu@Jonathans-MBP',
          'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCvMCy/RjnGc/ppzxIqvyv3WnaQ3Tj495MLw8qV4FpTkVndjIuqrY7heW4G1W4AFV97QpwCnBTOVmL6xg8kS+zPWN8/pFbIWF1tDBBocZuIYQhOzyd4KPewgu/GXPhmDTtAqdU/MC1CL9Zmd5P+YTzTTVYvvJmLx8ZNWx1KVU9BTePF1y6ekhLduvzOfGDW4rhPhjGGeEIW15sLpM/JnlLMP0nZvbmTQQH91g3qKsabxmYPH6W/s+rTja2ds+SfrNzj4VrRRNUaNFaUo/2G/m5lr/yYTgF2bDb1D7MijMs/u0Z6cdvlOXzdESII8jgVsa942KdEiskak0cRFEDLhf7Qomjamf/fGfQyrhQeH+XBDVlPbumN5LrHpO68U9kbpRpPxX/IRlsjKG6fYj5LIOQqpfWBqvlCuAFacUcp8EglQVKlB5yuSpEcwhH4vb03z+hLQndmGkzlp2yqcM/+sDpIzeQHK58MyLXXIiNJW7cUoExqmaGSrvXl1duncpBNVEgBfCYaWA9PwnTxWOf5Ywl2Zei5W9p5G8vJSSaEV+SyxrCUl2MGbAQob01KrsgSRQ5lK1Uhjzq62ewVmUWvfu+1dy/NKwTNLofd957pd4f0BpB0wRd4c5EQDtyHyKjGT27EdzoukUdlELWBCXvt7i/W0MBco/spgL+05YqDrJJNbw== stephan@neanderfunk.de',
          'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDX07jn28SLFNVN9tSMGBbgbWixX+PSVrxVBHt8pkHiseGIXB2LGXRK54O7IT+kcmasZX5AKu4J0oRRgisf/S1vZgVSC45Ri7w9Q3NYvG2yYTsvP3a3NmmH0fvi26QC1I7r2od+eivMjve/DJf0q/R2uUZMad4giyGy+NFBJaFULWnDe9L8Dkqw545WtSmYzNaP95LmW72Zz+Ohrgag/Y0ixEtqlFccAiDdgszK7AWLDfxPwgvsyP4LYOS9RKRzaNw6/Snda7x1WYeTgfJ/5npvVJ0Ovlh9sPVAKnHVmGxlTdPoSN9mgYgjSawFieZ5wBlfmqoQd+BI+wKlYVFZHxE3 alex@neanderfunk',
	},

  opkg = {
    openwrt = 'http://firmware.ffnef.de/firmware/packages/gluon2023.2.x/%A',
    extra = {
      gluonffnef = 'http://firmware.ffnef.de/firmware/modules/gluon-%GR/%S',
      modules= 'http://opkg.ffac.rocks/modules/gluon-%GS-%GR/%S',
      gluon = 'http://opkg.ffac.rocks/packages-%v/%A/gluon',
      gluon_base = 'http://opkg.ffac.rocks/packages-%v/%A/gluon_base',
      openwrtpackages = 'http://downloads.openwrt.org/releases/23.05.5/packages/%A/packages',
      openwrtpackages2 = 'http://downloads.openwrt.org/releases/23.05.5/targets/%S/packages',
      openwrtbase = 'http://downloads.openwrt.org/releases/23.05.5/packages/%A/base',
      openwrttelephony = 'http://downloads.openwrt.org/releases/23.05.5/packages/%A/telephony',
      openwrtrouting = 'http://downloads.openwrt.org/releases/23.05.5/packages/%A/routing',
    }, 
  },

  prefix4 = '10.0.0.0/8',
  prefix6 = 'fd66:666e:6566:640d::/64',
  extra_prefixes6 = {
    -- for ebtables-source-filter
    '2a03:2260::/32',
  },

  timezone = 'CET-1CEST,M3.5.0,M10.5.0/3',

  ntp_servers = {
    'ntp6.ffnef.de',
    'ntp.ffdus.freifunk',
    '0.openwrt.pool.ntp.org',
    '2.openwrt.pool.ntp.org',
  },
  regdom = 'DE',

  wifi24 = {
    channel = 9,
    preserve_channels = 1,
    htmode = 'HT20',
    ap = {
      ssid = 'Freifunk',
    },
    mesh = {
      id = 'dusfl-mesh',
      mcast_rate = 12000,
      disabled = false,
    },
  },
  wifi5 = {
    channel = 48,
    outdoor_chanlist = '100-140',
    htmode = 'HT40',
    ap = {
      ssid = 'Freifunk',
    },
    mesh = {
      id = 'dusfl-mesh',
      mcast_rate = 12000,
      disabled = false,
    },
  },

  next_node = {
    name = {
      'nextnode',
      'nn',
    },
    -- anycast IPs of all nodes
    ip4 = '10.30.192.1',
    ip6 = 'fd66:666e:6566:640d::1',
  },
  interfaces = {
    lan = {
      default_roles = { 'mesh' },
    },
    wan = {
      default_roles = { 'uplink' },
    },
    single = {
      default_roles = { 'uplink' },
    },
  },
  poe_passthrough = true,

  -- Options specific to routing protocols (optional)
  mesh = {
      vxlan = false,
      filter_membership_reports = true,
      -- Options specific to the batman-adv routing protocol (optional)
      batman_adv = {
          -- Gateway selection class (optional)
          -- The default class 20 is based on the link quality (TQ) only,
          -- class 1 is calculated from both the TQ and the announced bandwidth
          gw_sel_class = 1,
          routing_algo = 'BATMAN_IV',
      },
  },

  mesh_vpn = {
    enabled = true,
    pubkey_privacy = true,
    tunneldigger = {
      mtu = 1364,
      brokers = {'ganymed.ffnef.de:20013','kallisto.ffnef.de:20013','amalthea.ffnef.de:20013','himalia.ffnef.de:20013','elara.ffnef.de:20013','pasophae.ffnef.de:20013'},
    },
    bandwidth_limit = {
      enabled = false,
      egress =  10000,
      ingress = 30000,
    },
  },


  autoupdater = {
    enabled = 1,
    branch = 'stable',
    branches = {
      stable = {
        name = 'stable',
	prefill = true, 
        mirrors = {
          'http://firmware.13-dusfl.ffnef.de/firmware/stable/13_dusfl/sysupgrade',
          'http://firmware.13-dusfl.ffdus/firmware/stable/13_dusfl/sysupgrade',
          'http://firmware.ffnef.de/firmware/stable/13_dusfl/sysupgrade',
          'http://[fd66:666e:6566:640d::733]/firmware/stable/13_dusfl/sysupgrade',
        },
        good_signatures = 3,
        pubkeys = {
          'bbc64c35bfc527f193e5551abd4fbef3940c44ebf75bdd829220b39913330d88', -- Jonathan
          '2a61930930a240c027f6ca4197203d400b6e4a32f9e92041e5f086907796c9bc', -- adorfer
          'd02f8e60fb7a5069556500694ebe512b6017b01e9950476e4cfcf10d5130c296', -- JJX
          '96d644ff1ce07d6f67d9329a0eb9a1548d0d01a3519d17ec1fe9d49da3270bfc', -- plaste
          'cd97b5e735cdefb1da4aede68f127c8c2f4536df6f544b568df5c801b88a9225', -- alex
          'bd9e2ec7c5a1d420ff31543f27e02576b01ba5c887e726ab9388a25853b7d623', -- untrustworthy-buildbot
        },
      },
      broken = {
        name = 'broken',
        mirrors = {
          'http://firmware.13-dusfl.ffnef.de/firmware/broken/13_dusfl/sysupgrade',
          'http://firmware.13-dusfl.ffdus/firmware/broken/13_dusfl/sysupgrade',
          'http://firmware.ffnef.de/firmware/broken/13_dusfl/sysupgrade',
          'http://[fd66:666e:6566:640d::733]/firmware/broken/13_dusfl/sysupgrade',
        },
        good_signatures = 1,
        pubkeys = {
          'bbc64c35bfc527f193e5551abd4fbef3940c44ebf75bdd829220b39913330d88', -- Jonathan
          '2a61930930a240c027f6ca4197203d400b6e4a32f9e92041e5f086907796c9bc', -- adorfer
          'd02f8e60fb7a5069556500694ebe512b6017b01e9950476e4cfcf10d5130c296', -- JJX
          '96d644ff1ce07d6f67d9329a0eb9a1548d0d01a3519d17ec1fe9d49da3270bfc', -- plaste
          'cd97b5e735cdefb1da4aede68f127c8c2f4536df6f544b568df5c801b88a9225', -- alex
          'bd9e2ec7c5a1d420ff31543f27e02576b01ba5c887e726ab9388a25853b7d623', -- untrustworthy-buildbot
        },
      },
    },
  },
  roguenets_filter = {
    allowed_prefix4 = '10.0.0.0/8',
    allowed_prefix6 = '2a03:2260::/29',
    additional_prefix6 = {
      'fda0:300e::/32',
    },
  },
  dns = {
    cacheentries = 1024,
    servers = { 'fd66:666e:6566:640d::3','2620:fe::10', '2001:4860:4860::8844', '2001:4860:4860::8888', },
  },
  ssid_changer = {
    enabled = true,
    switch_timeframe = 2,     -- only once every timeframe (in minutes) the SSID will change to OFFLINE
                              -- set to 1440 to change once a day
                              -- set to 1 minute to change every time the router gets offline
    first = 5,                -- the first few minutes directly after reboot within which an Offline-SSID always may be activated
    prefix = 'FF_Offline_',   -- use something short to leave space for the nodename (no '~' allowed!)
    suffix = 'nodename',      -- generate the SSID with either 'nodename', 'mac' or to use only the prefix: 'none'

    tq_limit_enabled = true,  -- if false, the offline SSID will only be set if there is no gateway reacheable
                              -- upper and lower limit to turn the offline_ssid on and off
                              -- in-between these two values the SSID will never be changed to prevent it from toggeling every minute.
    tq_limit_max = 45,        -- upper limit, above that the online SSID will be used
    tq_limit_min = 35         -- lower limit, below that the offline SSID will be used
  },

  ath9kblackout = {
    blackoutwait = 171,
    resetwait = 281,
    stepsize = 10,
  },
}