# Contributor: Ronald van Haren <ronald.archlinux.org>
# Contributor: Thomas Baechler <thomas@archlinux.org>

pkgbase=iptables
pkgname=(
  iptables
  iptables-legacy
)
pkgver=1.8.11
pkgrel=4
epoch=1
pkgdesc='Linux kernel packet control tool'
url='https://www.netfilter.org/projects/iptables/index.html'
arch=(x86_64 aarch64)
license=(GPL-2.0-only)
depends=(
  bash
  glibc
  libmnl
  libnetfilter_conntrack
  libnfnetlink
  libnftnl
  libpcap
  nftables
)
makedepends=(
  git
  linux-api-headers
)
source=(
  "git+https://git.netfilter.org/iptables?signed#tag=v$pkgver"
  0001-fix-iptables-apply-FS-75401.patch
  iptables-{legacy,nft}-flush
  {arp,eb,ip,ip6}tables.service
  {empty,empty-{filter,mangle,nat,raw,security},simple_firewall}.rules
)
b2sums=('4f42734ab3f4103720ffd5486032dac53d20958305d6e4803efcf1261d5112c464dad7ae2616a30e228590a5de907bc463e7a980fc517639b0168a6b194b6fde'
        '7008ad93b252e1410273e0474f1a571c861cfe7d5bdedf89eb0e59fe714e85b6a9cec6c711937718bce6c3c18eaeec5b6db9e40ee71d43c15472bfff6de92054'
        'b81766286ca0b9ab4a5bc92904f911cc33d4fe1e074128e16f1181a9abbf6b9b5b040bc7e0df8bf0bc9a90a4448ef9275780635494faf9922ba8412de3da473c'
        '8bf7f2f335ca399c35c8711eebbd5278b30bb5a9a5f2ba4dd61c14a0348ac611ec3052c4e8d74221cdc968d5f0aa2d5bf9d24f101bb662fd768a936488376955'
        'bfb92b44dc843dc0c2f0c7ff2130a30b4ebac85d912f92b19a2c60bf3e658eb3277dcea7278fceae3e2286e8ea63fa70e738761067af8bfd07f837f71745ec5d'
        'f674f13e33a751ce1a85a19990172627ba955f090a7c7246a1de8b7522923e623fdb5962fec069c96a23001ced26d56de506173ce2f57b0cc4688c77f85e096c'
        'c8883910038361ce7af2c7c1ef223b15b79e224ebbd6107039143e31b12272386dbee16c9c9269e18e4c8bb3167b760ff8323799202885a865f32a293032c787'
        '0b7c0207b96079b19fbba42bde347f5a945ac6aeba68da420fbb792e098e8d1ccff0be26793048eed8132b7e3d461a2f02df0791291d53643db923d87732dd25'
        'd51b50c72db275ffc32e45d06000d6a273be56ccea9c89b34b297879fbe44cdea4dd9c7926fb14247992f4e6aefd33acc351fbbbcb012366ac73ec590ecb1b28'
        '0b42fb260ed23d823eeff23d8f56ed1388ca85cf0edd6bceedebc915f7c455bdd99cd2a213074bad02e90e977ead9c42206579cde2d6ef0dcaef33a574dd4445'
        '5597df63731a5c00516f90dcc7419501b5b3da8c8d3c30ed26b01bfe8e14dd61bb554a5a71f4f80b244600476e7af170a80d4ba575814e4bf6fd7ce2a2f14a57'
        '0c4115c5737a151ce7b0d23fcd95aaa44fdfcbc94442e1766a03223fe90c832ebed36108c7d31a46d86814408ed1cab2c752ec186bec58bc920f583ae50815c3'
        '3a118ce145df7ee7309586a2065976eb236fac3ef0384f1b246eccc5fa2091f2c5ec70ad004c4cd5703acc0b84af96e80e7afba091782484186ca4c3ece56e8c'
        'd070e613278486e9d8bdab23b14d81d0719a0310950199ad6bd552bb39f834a60448b6d724962ea7ebed4d91d8dc081a3fdeaad3372228334d1e4dc09f4cc14c'
        '6d3b50deb8e58b46b0b9cf33da88eb6f7ad20df28b8ae70af4f22c65309a73666a52af44e8bec45fa8428f0228130d868fb3a2b0d28e91e26b62725be17bccd4')
validpgpkeys=(
  # Netfilter Core Team <coreteam@netfilter.org>
  'C09DB2063F1D7034BA6152ADAB4655A126D292E4' # expires 2020-10-17
  '37D964ACC04981C75500FB9BD55D978A8A1420E4' # expires 2024-10-13
  '8C5F7146A1757A65E2422A94D70D1A666ACF2B21' # expires 2028-10-12
)

prepare() {
  cd iptables

  # Fix iptables -C
  git cherry-pick -n 40406dbfaefbc204134452b2747bae4f6a122848

  # Use Arch Linux paths in iptables-apply
  git apply -3 ../0001-fix-iptables-apply-FS-75401.patch

  autoreconf -fvi
}

build() {
  local configure_options=(
    --prefix=/usr
    --sysconfdir=/etc
    --sbindir=/usr/bin
    --libexecdir=/usr/lib
    --enable-bpf-compiler
    --enable-devel
    --enable-libipq
    --enable-shared
  )

  mkdir -p build; cd build
  ../iptables/configure "${configure_options[@]}"
  sed -e 's/ -shared / -Wl,-O1,--as-needed\0/g' -i libtool
  make
}

package_iptables() {
  pkgdesc+=' (using nft interface)'
  provides=(
    iptables-nft
    lib{ip4tc,ip6tc,ipq,xtables}.so
    {arp,eb}tables
  )
  conflicts=({arp,eb}tables)
  replaces=('iptables-nft')
  backup=(
    etc/ethertypes
    etc/iptables/{ip,ip6}tables.rules
    etc/{arp,eb}tables.conf
  )

  _package nft

  install -Dt "$pkgdir/usr/lib/systemd/system" -m644 {arp,eb}tables.service
  touch "$pkgdir"/etc/{arp,eb}tables.conf
}

package_iptables-legacy() {
  pkgdesc+=' (using legacy interface)'
  depends=(
    bash
    glibc
    libmnl
    libnetfilter_conntrack
    libnfnetlink
    libnftnl
    libpcap
  )
  provides=(
    iptables
    lib{ip4tc,ip6tc,ipq,xtables}.so
  )
  conflicts=(iptables)
  backup=(
    etc/ethertypes
    etc/iptables/{ip,ip6}tables.rules
  )

  _package legacy
}

_package() {
  DESTDIR="$pkgdir" make -C build install

  local x
  for x in {arp,eb,ip,ip6}tables{,-restore,-save} iptables-xml; do
    if [[ $1 = nft || $x = ip* ]]; then
      ln -sf xtables-$1-multi "$pkgdir/usr/bin/$x"
    else
      rm "$pkgdir/usr/bin/$x"
    fi
  done

  install -Dt "$pkgdir/usr/lib/systemd/system" -m644 {ip,ip6}tables.service
  install -D iptables-$1-flush "$pkgdir/usr/lib/systemd/scripts/iptables-flush"

  install -Dm644 empty.rules "$pkgdir/etc/iptables/iptables.rules"
  install -Dm644 empty.rules "$pkgdir/etc/iptables/ip6tables.rules"
  install -Dt "$pkgdir/usr/share/iptables" -m644 *.rules
  ln -srt "$pkgdir/etc/iptables" "$pkgdir"/usr/share/iptables/{empty,simple_firewall}.rules
}

# vim:set sw=2 sts=-1 et:
