tripe-keys: Add a subcommand to print the correct tunnel MTU.
[tripe] / keys / tripe-keys.in
index b195342..b0dbf94 100644 (file)
@@ -474,6 +474,30 @@ def cmd_clean(args):
       zap(i)
 
 ###--------------------------------------------------------------------------
+### Commands: mtu
+
+def cmd_mtu(args):
+  mtu, = (lambda mtu = '1500': (mtu,))(*args)
+  mtu = int(mtu)
+
+  blksz = C.gcciphers[conf['cipher']].blksz
+
+  index = conf['mac'].find('/')
+  if index == -1:
+    tagsz = C.gcmacs[conf['mac']].tagsz
+  else:
+    tagsz = int(conf['mac'][index + 1:])/8
+
+  mtu -= 20                             # Minimum IP header
+  mtu -= 8                              # UDP header
+  mtu -= 1                              # TrIPE packet type octet
+  mtu -= tagsz                          # MAC tag
+  mtu -= 4                              # Sequence number
+  mtu -= blksz                          # Initialization vector
+
+  print mtu
+
+###--------------------------------------------------------------------------
 ### Main driver.
 
 ## Exceptions.
@@ -485,6 +509,7 @@ commands = {'help': (cmd_help, 0, 1, ''),
             'upload': (cmd_upload, 0, 0, ''),
             'update': (cmd_update, 0, 0, ''),
             'clean': (cmd_clean, 0, 0, ''),
+            'mtu': (cmd_mtu, 0, 1, '[PATH-MTU]'),
             'generate': (cmd_generate, 1, 1, 'TAG'),
             'rebuild': (cmd_rebuild, 0, 0, '')}