IPNRC(5)

πŸ“¦ version 3.2.1, in ubuntu jammy

πŸ’– IPNRC(5) β€” the BP configuration files glow-up πŸ’–

okay so bestie, this is ipnrc β€” the manual for the IPN scheme configuration commands file, part of the BP configuration files saga. buckle up, it's giving very much "text file that runs your whole network" energy πŸŽ€


✨ NAME ✨

ipnrc β€” IPN scheme configuration commands file. that's it, that's the name, iconic.


πŸ¦‹ DESCRIPTION πŸ¦‹

okay so here's the vibe: IPN scheme configuration commands get handed to ipnadmin either in a file full of text lines or interactively at ipnadmin's command prompt, which is : β€” yes, just a colon, she's minimal like that. commands are interpreted line by line, and it is exactly one command per line. no stacking, no multitasking, one line one command periodt.

so what do these commands even do? two things, and they're both kind of a big deal:

  1. they establish egress plans for direct transmission to neighboring nodes that are members of endpoints identified in the "ipn" URI scheme, and
  2. they establish static default routing rules for forwarding bundles to specified destination nodes.

the egress plan you build for a given node associates a default egress duct expression with that node. and that default duct expression? it can be overridden by more narrowly scoped planrules in specific circumstances: a different egress duct expression may apply when the source endpoint for the subject bundle identifies a specific node, a specific service, or both. like, more specific rules win. main character energy for the narrowest rule πŸ’…

every duct expression is a string shaped like this:

protocol_name/outduct_name[,destination_induct_name]

and it means "yo, this bundle is getting queued for transmission via the indicated convergence layer protocol outduct." now, destination_induct_name must be provided when the indicated outduct is "promiscuous" β€” meaning it's not configured for transmission only to a single neighboring node. this is protocol-specific, so don't come for me, it depends on the protocol. 🫢

the circumstances that characterize a specific rule within a general plan are expressed in a qualifier, a string shaped like:

source_service_number source_node_number

where either source_service_number or source_node_number may be an asterisk character (*) signifying "all". asterisk = everyone, no gatekeeping πŸ’«

not me dropping a genuinely important fact: egress plans must be established for all neighboring nodes, regardless of whether or not contact graph routing is used for computing dynamic routes to distant nodes. this is by definition: if there isn't an egress plan to a node, it can't be considered a neighbor. no plan, no neighbor, no exceptions. 😀

now, static default routes are expressed as groups in the ipn-scheme routing database. a group is a range of node numbers identifying a set of nodes for which defined default routing behavior is established. so whenever a bundle is to be forwarded to a node whose number is in the group's node number range, AND it hasn't been possible to compute a dynamic route to that node from the contact schedules that have been provided to the local node, AND that node is not a neighbor to which the bundle can be directly transmitted β€” BP will forward the bundle to the gateway node associated with this group. πŸ”₯

the gateway node for any group is identified by an endpoint ID, which might or might not be an ipn-scheme EID. regardless, directing a bundle to the gateway for a group causes the bundle to be re-forwarded to that intermediate destination endpoint. and listen β€” multiple groups may encompass the same node number, in which case the gateway associated with the most restrictive group (the one with the smallest range) is always selected. smallest range wins, she's the queen πŸ‘‘

the formats and effects of the IPN scheme configuration commands are described below. let's goooo ⭐


🧚 GENERAL COMMANDS 🧚

  • ? β€” the help command. this will display a listing of the commands and their formats. it is the same as the h command. twins fr fr.
  • # β€” comment line. lines beginning with # are not interpreted. go off, annotate your config, nobody's reading it but you πŸ’œ
  • e { 1 | 0 } β€” echo control. setting echo to 1 causes all output printed by ipnadmin to be logged as well as sent to stdout. setting echo to 0 disables this behavior. (logging era vs. silence era)
  • v β€” version number. prints out the version of ION currently installed. HINT: combine with the e 1 command to log the version number at startup. lowkey a pro move πŸŽ€
  • h β€” the help command. this will display a listing of the commands and their formats. it is the same as the ? command. (yes we said this already, she contains multitudes)

🌈 PLAN COMMANDS 🌈

  • a plan node_nbr default_duct_expression β€” the add plan command. this command establishes an egress plan for the bundles that must be transmitted to the neighboring node identified by node_nbr. a general plan must be in place for a node before any more specific rules are declared. foundation first, bestie πŸ—οΈ
  • c plan node_nbr default_duct_expression β€” the change plan command. this command changes the default duct expression for the indicated plan.
  • d plan node_nbr β€” the delete plan command. this command deletes the egress plan for the node identified by node_nbr, including all associated rules. yeah. all of them. it's giving scorched earth πŸ’€
  • i plan node_nbr β€” this command will print information (the default duct expression and all specific rules) about the egress plan for the node identified by node_nbr.
  • l plan β€” this command lists all egress plans established in the IPN database for the local node.

πŸ’… PLANRULE COMMANDS πŸ’…

  • a planrule node_nbr qualifier duct_expression β€” the add planrule command. this command establishes a planrule, i.e., a duct expression that overrides the default duct expression of the egress plan for the node identified by node_nbr in the event that the source endpoint ID of the subject bundle matches qualifier.
  • c planrule node_nbr qualifier duct_expression β€” the change planrule command. this command changes the duct expression for the indicated planrule.
  • d planrule node_nbr qualifier β€” the delete planrule command. this command deletes the planrule identified by node_nbr and qualifier.
  • i planrule node_nbr qualifier β€” this command will print information (the duct expression) about the planrule identified by node_nbr and qualifier.
  • l planrule node_nbr β€” this command lists all planrules in the plan for the indicated node.

🌸 GROUP COMMANDS 🌸

  • a group first_node_nbr last_node_nbr gateway_endpoint_ID β€” the add group command. this command establishes a "group" for static default routing as described above. (scroll up, bestie, we explained it 😌)
  • c group first_node_nbr last_node_nbr gateway_endpoint_ID β€” the change group command. this command changes the gateway node number for the group identified by first_node_nbr and last_node_nbr.
  • d group first_node_nbr last_node_nbr β€” the delete group command. this command deletes the group identified by first_node_nbr and last_node_nbr.
  • i group first_node_nbr last_node_nbr β€” this command will print information (the gateway endpoint ID) about the group identified by first_node_nbr and last_node_nbr.
  • l group β€” this command lists all groups defined in the IPN database for the local node.

πŸ“ GROUPRULE COMMANDS πŸ“

  • a grouprule first_node_nbr last_node_nbr qualifier gateway_endpoint_ID β€” the add grouprule command. this command establishes a grouprule, i.e., a gateway endpoint ID that overrides the default gateway endpoint ID of the group identified by first_node_nbr and last_node_nbr in the event that the source endpoint ID of the subject bundle matches qualifier.
  • c grouprule first_node_nbr last_node_nbr qualifier gateway_endpoint_ID β€” the change grouprule command. this command changes the gateway EID for the indicated grouprule.
  • d grouprule first_node_nbr last_node_nbr qualifier β€” the delete grouprule command. this command deletes the grouprule identified by first_node_nbr, last_node_nbr, and qualifier.
  • i grouprule first_node_nbr last_node_nbr qualifier β€” this command will print information (the duct expression) about the grouprule identified by node_nbr, last_node_nbr, and qualifier.
  • l grouprule first_node_nbr last_node_nbr β€” this command lists all grouprules for the indicated group.

⭐ EXAMPLES ⭐ (the demo reel, she ate)

a plan 18 ltp/18

declares the egress plan to use for transmission from the local node to neighboring node 18. any bundle for which the computed "next hop" node is node 18 will be queued for transmission on LTP outduct 18. ✨

a planrule 18 * 9 ltp/-18

declares an egress plan override that applies to transmission to node 18 of any bundle whose source is node 9, regardless of the service that was the source of the bundle. each such bundle must be queued for unreliable transmission on LTP outduct 18 rather than the default (standard transmission on LTP outduct 18). note the * doing its "all services" thing 🫢

a group 1 999 dtn://stargate

declares a default route for bundles destined for all nodes whose numbers are in the range 1 through 999 inclusive: absent any other routing decision, such bundles are to be forwarded to "dtn://stargate". stargate said "I'll take it from here" 🌌


πŸ‘‘ SEE ALSO πŸ‘‘


and that's the whole page, bestie 🩷 this one was brought to you by perl v5.24.1, dated 2016-07-07 β€” yeah she's vintage, she's a classic, and she still slays. mwah πŸ’‹

πŸ“¦ where this page comes from