jool_siit(8)

πŸ’– jool_siit β€” SIIT Jool's Userspace Client πŸ’–

okay bestie, so jool_siit(8) is the manual page for the SIIT Jool userspace client, and honestly? she's iconic. let's get into it.


✨ NAME ✨

jool_siit β€” interact with SIIT Jool (the kernel module). that's it, that's the girl. πŸŽ€


🌸 DESCRIPTION 🌸

She sends commands and requests to SIIT Jool. that's the whole job.

SIIT Jool is a kernel module you load into a Linux kernel. she implements RFC 7915. no cap. πŸ’…


πŸ¦‹ AVAILABILITY πŸ¦‹

Linux is the only OS where this program makes sense. sorry to the BSD girlies, this one's not for you. 😭

Kernels 5.15 and up. periodt.


🌈 SYNTAX 🌈

read it slowly, it's giving very structured, very organized:

jool_siit [<argp1>] instance (
     display
          [--csv]
          [--no-headers]
     | add
          [<Instance-Name>]
          (--netfilter | --iptables)
          [--pool6 <IPv6-prefix>]
     | remove
          [<Instance-Name>]
     | flush
     | <help>
)

jool_siit [<argp1>] stats (
     display
          [--csv]
          [--no-headers]
          [--all]
          [--explain]
     | <help>
)

jool_siit [<argp1>] global (
     display
          [--csv]
          [--no-headers]
     | update
          <Key> <Value>
     | <help>
)

jool_siit [<argp1>] eamt (
     display
          [--csv]
          [--no-headers]
     | add
          <IPv4-prefix> <IPv6-prefix>
          [--force]
     | remove
          <IPv4-prefix> <IPv6-prefix>
     | flush
     | <help>
)

jool_siit [<argp1>] address (
     query [--verbose] <IP-Address>
)

jool_siit [<argp1>] denylist4 (
     display
          [--csv]
          [--no-headers]
     | add
          <IPv4-prefix>
          [--force]
     | remove
          <IPv4-prefix>
     | flush
     | <help>
)

jool_siit [<argp1>] file (
     handle <JSON-File>
     | <help>
)

<argp1> := (<help> | --instance <Name> | --file <File>)

<help> := (--help | --usage | --version)

πŸ’… OPTIONS πŸ’…

πŸ‘‘ Modes and Operations

these are the verbs, bestie. the main character energy moves.

  • instance display β€” Show all instances from all namespaces. all of them. every namespace. she's nosy and we love her for it. πŸ™ˆ
  • instance add β€” Create a new instance. baby's first instance πŸŽ€
  • instance remove β€” Drop an existing instance. bye bestie πŸ’€
  • instance flush β€” Drop all instances from the current namespace. nuclear option, fr fr.
  • stats display β€” Show internal counters.
  • global display β€” Show the current values of the instance's tweakable internal variables.
  • global update β€” Tweak one of the instance's internal variables. glow-up time ✨
  • eamt display β€” Show the EAM table.
  • eamt add β€” Upload an entry to the EAM table.
  • eamt remove β€” Drop an entry from the EAM table.
  • eamt flush β€” Empty the EAM table.
  • address query β€” Print the translated version of the given address using the current configuration.
  • denylist4 display β€” Show the denylist.
  • denylist4 add β€” Upload an entry to the denylist.
  • denylist4 remove β€” Drop an entry from the denylist.
  • denylist4 flush β€” Empty the denylist.
  • file handle β€” Parse all the configuration from a JSON file. Create instance if it doesn't exist, update if it does. she contains multitudes. 🫢

🚩 Flags

  • --instance <Name> β€” Name of the instance you want to interact with. It's an ASCII string, 15 characters max. Defaults to 'default'. keep it short, keep it cute.
  • --file <File> β€” JSON file which contains the name of the instance you want to interact with. Same JSON structure as the one from atomic configuration.
  • --csv β€” Output in CSV table format.
  • --no-headers β€” Do not print table headers. (Nor footer, if applies.) minimalist. clean. love that for her.
  • --netfilter β€” Sit the instance on top of the Netfilter framework.
  • --iptables β€” Sit the instance on top of the iptables framework.
  • --pool6 <IPv6-prefix> β€” Contents of the new instance's IPv6 pool. The format is 'PREFIX_ADDRESS[/PREFIX_LENGTH]'.
  • --all β€” Show all the counters. (Otherwise, only the nonzero ones are printed.) sometimes you want the zeros, no judgement.
  • --explain β€” Show a description of each counter. she explains herself 🫢
  • --verbose β€” Print some details regarding the translation operation.
  • --force β€” Apply operation even if certain validations fail. 😳 chaotic. use with care bestie.

🧚 Other Arguments

  • <Key> <Value> β€” Name of the variable you want to edit (see 'Globals' section), and its new value.
  • <IPv6-prefix> β€” The format is IPV6_ADDRESS[/PREFIX_LENGTH]. PREFIX_LENGTH defaults to 128.
  • <IPv4-prefix> β€” The format is IPV4_ADDRESS[/PREFIX_LENGTH]. PREFIX_LENGTH defaults to 32.
  • <Instance-Name> β€” Name of the instance you want to add or remove. If --instance or --file were included in <argp1>, then the instance names must match. πŸ‘€ consistency is key.
  • <JSON-file> β€” Path to a JSON file.

πŸ’œ Globals

these are the knobs you can turn with global update, bestie. the vibes you can adjust.

  • manually-enabled <Boolean> β€” Enable or disable the instance. on/off, live/laugh/love.
  • pool6 (<IPv6 Prefix> | null) β€” The IPv6 pool's prefix. The format is 'PREFIX_ADDRESS[/PREFIX_LENGTH]'. Use null to clear.
  • lowest-ipv6-mtu <Unsigned 32-bit integer> β€” Smallest reachable IPv6 MTU.
  • logging-debug <Boolean> β€” Enable logging of debug messages?
  • zeroize-traffic-class <Boolean> β€” Always set the IPv6 header's 'Traffic Class' field as zero? Otherwise copy from IPv4 header's 'TOS'.
  • override-tos <Boolean> β€” Override the IPv4 header's 'TOS' field as --tos? Otherwise copy from IPv6 header's 'Traffic Class'.
  • tos <Unsigned 8-bit integer> β€” Value to override TOS as (only when override-tos is ON)
  • mtu-plateaus <Comma-separated list of unsigned 16-bit integers> β€” Set the list of plateaus for ICMPv4 Fragmentation Neededs with MTU unset.
  • amend-udp-checksum-zero <Boolean> β€” Compute the UDP checksum of IPv4-UDP packets whose value is zero? Otherwise drop the packet. 😭 the packet. gone.
  • eam-hairpin-mode (simple | intrinsic | off) β€” Defines how EAM+hairpinning is handled.
  • randomize-rfc6791-addresses <Boolean> β€” Randomize selection of address from the RFC6791 pool? Otherwise choose the 'Hop Limit'th address.
  • rfc6791v6-prefix (<IPv6 Prefix> | null) β€” IPv6 prefix to generate RFC6791v6 addresses from. Use null to clear.
  • rfc6791v4-prefix (<IPv4 Prefix> | null) β€” IPv4 prefix to generate RFC6791v4 addresses from. Use null to clear.
  • trace <Boolean> β€” Log basic packet fields as they are received?

⭐ EXAMPLES ⭐

she ate with these, honestly.

Create a new instance named "Example":

jool_siit instance add Example --iptables

Print the globals:

jool_siit -i Example global display

Change the IPv6 pool prefix:

jool_siit -i Example global update pool6 2001:db8::/96

Print the Explicit Address Mappings Table (EAMT):

jool_siit -i Example eamt display

Add an entry to the EAMT:

jool_siit -i Example eamt add 2001:db8::/120 192.0.2.0/24

Remove an entry from the EAMT:

jool_siit -i Example eamt remove 2001:db8::/120

Add denylist prefix 192.0.2.0/24:

jool_siit -i Example denylist4 add 192.0.2.0/24

Allow translation of 192.0.2.0/24:

jool_siit -i Example denylist4 remove 192.0.2.0/24

πŸ“ NOTES πŸ“

TRUE, FALSE, 1, 0, YES, NO, ON and OFF are all valid booleans. You can mix case too. she's flexible like that πŸ’…


πŸ”₯ EXIT STATUS πŸ”₯

Zero on success, non-zero on failure. simple. elegant. we stan a binary outcome.


🌸 AUTHOR 🌸

NIC Mexico & ITESM 🫢


😭 REPORTING BUGS 😭

found a bug? not her fault (probably), but tell her here:

https://github.com/NICMx/Jool/issues


Copyright 2011 NIC Mexico.

License: GPLv2 (GNU GPL version 2)

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. (read that again, bestie. no warranty. none. zero. πŸ’€)

🌈 SEE ALSO 🌈


and that's the whole page, bestie ✨ this was v4.1.15, dated 2026-01-26, from the jool_siit(8) manual. slay, go translate some packets πŸ’–πŸ¦‹πŸŽ€

πŸ“¦ where this page comes from