diff --git a/.gitignore b/.gitignore index 7809bf7..726c293 100644 --- a/.gitignore +++ b/.gitignore @@ -136,3 +136,5 @@ sympy-plots-for-*.tex/ *.bak *.sav +*.xdv +*.pdf diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d4f86bd --- /dev/null +++ b/Makefile @@ -0,0 +1,31 @@ +TARGET=slides.pdf + +SVGS=$(wildcard imgs/*.svg) +SVG_PDFTEXS = $(patsubst imgs/%,imgs/pdf_tex/%,$(SVGS:.svg=.pdf_tex)) +SVG_PDF = $(patsubst imgs/%,imgs/pdf/%,$(SVGS:.svg=.pdf)) +AUTOGEN_SVGS_LIST=mac +AUTOGEN_SVGS=$(addprefix imgs/_autogen/,$(AUTOGEN_SVGS_LIST)) + +all: $(SVG_PDFTEXS) $(SVG_PDF) $(AUTOGEN_SVGS) $(TARGET) + +%.pdf: %.tex + latexmk -pdfxe $< + +imgs/_autogen/%: imgs/%.svg + imgs/split_layers.py "$*.svg" + cd "$@" ; inkscape --export-type=pdf *.svg + +imgs/pdf_tex/%.pdf_tex: imgs/%.svg + mkdir -p "imgs/pdf_tex" + inkscape "$<" -o "$(@:.pdf_tex=.pdf)" --export-latex 2>/dev/null + sed -i 's#\($(patsubst imgs/pdf_tex/%,%,$(@:.pdf_tex=.pdf))\)#imgs/pdf_tex/\1#g' $@ + +imgs/pdf/%.pdf: imgs/%.svg + mkdir -p "imgs/pdf" + inkscape "$<" -o "$@" 2>/dev/null + +.PHONY: clean +clean: + latexmk -C + rm -rf "imgs/pdf_tex" "imgs/pdf" + rm -rf imgs/_autogen diff --git a/imgs/.gitignore b/imgs/.gitignore new file mode 100644 index 0000000..80f3b37 --- /dev/null +++ b/imgs/.gitignore @@ -0,0 +1,3 @@ +_autogen +pdf +pdf_tex diff --git a/imgs/mac.svg b/imgs/mac.svg new file mode 100644 index 0000000..7e38ddb --- /dev/null +++ b/imgs/mac.svg @@ -0,0 +1,1140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + Payload + + + + + + + + Destination MACaddress + LAYER 2 + + + + + Destination IPaddress + LAYER 3 + + + + + + + + + IPv4 addr + + + IPv6 addr + MAC addr + + + + + + + + + + + + + + + + + + + + + Routing table + Dest. prefix + Next hop + + + + + + + + + + + + + + + + + + Payload + + + + + + Destination MACaddress + LAYER 2 + + + + + Destination IPaddress + LAYER 3 + + + + + + + + + + + Hey + , what's your MAC address? + + + + + + + + + + + + + + + + Hey + , it's + + . Cheers! + + + + + diff --git a/imgs/routing.svg b/imgs/routing.svg new file mode 100644 index 0000000..cbc2c25 --- /dev/null +++ b/imgs/routing.svg @@ -0,0 +1,532 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + Payload + + + + + + + + Destination MACaddress + LAYER 2 + + + + + Destination IPaddress + LAYER 3 + + + + + + + Payload + + + + + + Destination MACaddress + LAYER 2 + + + + + Destination IPaddress + LAYER 3 + + + + + + + + + + + + diff --git a/imgs/split_layers.py b/imgs/split_layers.py new file mode 100755 index 0000000..f2cc9e2 --- /dev/null +++ b/imgs/split_layers.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 + +from xml.etree import ElementTree as ET +import sys +from pathlib import Path + +IN_DIR = Path(__file__).parent +OUT_DIR = IN_DIR / "_autogen" + +namespaces = { + "svg": "http://www.w3.org/2000/svg", + "inkscape": "http://www.inkscape.org/namespaces/inkscape", +} + +splits = { + "mac.svg": { + "_always": ["Base", "Key"], + "0": [], + "1": ["Routing table"], + "2": ["Routing table", "Routing table - select"], + "3": ["Yellow router"], + "4": ["Yellow router", "ARP query"], + "5": ["Yellow router", "ARP query", "ARP answer"], + "6": ["Yellow router", "Outbound packet"], + } +} + + +def process_svg(svg_splits, path, out_path): + out_path.mkdir(parents=True, exist_ok=True) + always = svg_splits.get("_always", []) + + svg = ET.parse(path.as_posix()) + + for keyframe in svg_splits: + if keyframe.startswith("_"): # special value -- eg `_always` + continue + layers = always + svg_splits[keyframe] + + for layer_node in svg.findall( + ".//svg:g[@inkscape:groupmode='layer']", namespaces=namespaces + ): + layer_node.attrib["style"] = "display:none" + for layer_name in layers: + layer = svg.find( + ".//svg:g[@inkscape:groupmode='layer'][@inkscape:label='{}']".format( + layer_name + ), + namespaces=namespaces, + ) + if not layer: + raise Exception("Layer {} not found".format(layer_name)) + layer.attrib["style"] = "display:inline" + + keyframe_outpath = out_path / "{}.svg".format(keyframe) + svg.write(keyframe_outpath.as_posix(), encoding="utf-8") + print("Written {}".format(keyframe_outpath.as_posix())) + + +def main(): + processlist = [] + if len(sys.argv) < 2: + processlist = splits.keys() + else: + processlist = [sys.argv[1]] + + for svg_path in processlist: + process_svg( + splits[svg_path], IN_DIR / svg_path, OUT_DIR / (Path(svg_path).stem) + ) + + +if __name__ == "__main__": + main() diff --git a/slides.tex b/slides.tex new file mode 100644 index 0000000..bf359eb --- /dev/null +++ b/slides.tex @@ -0,0 +1,81 @@ +% vim: spell spelllang=en + +\documentclass[11pt,xcolor={usenames,dvipsnames},aspectratio=169]{beamer} +\usetheme{metropolis} +\usepackage[utf8]{inputenc} +\usepackage[english]{babel} +\usepackage[T1]{fontenc} + +\usepackage{texlib/my_listings} +\usepackage{texlib/todo} + +\usepackage{booktabs} +\usepackage[normalem]{ulem} + +%\usepackage{inconsolata} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\title{Announcing IPv4 routes with an IPv6 next-hop in the Babel +routing protocol} +\subtitle{\textit{aka.} draft-bastian-babel-v4ov6} +\author[\slidecountline] +{Théophile Bastian, Juliusz Chroboczek} +\date{} +%\subject{} +%\logo{} +\institute{ + \href{https://ens.fr/}{ENS Paris}, + \href{https://www.irif.fr/}{IRIF}, + \href{https://www.nexedi.com/}{Nexedi}} + +\begin{document} + +\maketitle{} + +\begin{frame}{Traditional routing} + \begin{align*} + \text{Network prefix (IPvX)} &\longrightarrow \text{Next-Hop (IPvX)} + \end{align*} + + \pause{} + + \begin{table} + \centering + \textbf{IPv4 routing table} \\ + \medskip + \begin{tabular}{@{} lcl @{}} + \toprule + Prefix & $\rightarrow$ & Next-Hop \\ + \midrule + default & & 10.42.0.254 \\ + 10.102.0.0/16 & & 10.102.0.1 \\ + 10.102.10.0/24 & & 10.102.10.1 \\ + \only<3>{10.0.0.0/8 & & \sout{fd80:1::1}} \\ + \bottomrule + \end{tabular} + \end{table} + + \todo{Better strikeout} +\end{frame} + +\begin{frame}{The router's job} + \begin{figure} + \centering + \includegraphics[width=\columnwidth]{imgs/pdf/routing.pdf} + \end{figure} +\end{frame} + +\begin{frame}{What's under the hull?} + \begin{figure} + \centering + \only<0>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/0.pdf}} + \only<1>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/1.pdf}} + \only<2>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/2.pdf}} + \only<3>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/3.pdf}} + \only<4>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/4.pdf}} + \only<5>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/5.pdf}} + \only<6>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/6.pdf}} + \end{figure} +\end{frame} + +\end{document} diff --git a/texlib/my_listings.sty b/texlib/my_listings.sty new file mode 100644 index 0000000..f720a6d --- /dev/null +++ b/texlib/my_listings.sty @@ -0,0 +1,63 @@ +\usepackage{listings} +\usepackage{algorithmicx} +\usepackage{algpseudocode} +\usepackage{color} +\usepackage{xcolor} +\usepackage{courier} +\definecolor{color_comment}{HTML}{2D6F19} +\definecolor{color_linenum}{HTML}{9E9E9E} +\definecolor{color_strings}{HTML}{D300F3} + + +\lstset{ % +% backgroundcolor=\color{white}, % choose the background color; you must add \usepackage{color} or \usepackage{xcolor} + basicstyle=\footnotesize\ttfamily, % the size of the fonts that are used for the code + breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace + breaklines=true, % sets automatic line breaking + captionpos=b, % sets the caption-position to bottom + commentstyle=\color{color_comment}, % comment style +% deletekeywords={...}, % if you want to delete keywords from the given language +% escapeinside={\%*}{*)}, % if you want to add LaTeX within your code + extendedchars=true, % lets you use non-ASCII characters; for 8-bits encodings only, does not work with UTF-8 + frame=none, % adds a frame around the code + keepspaces=true, % keeps spaces in text, useful for keeping indentation of code (possibly needs columns=flexible) + keywordstyle=\color{blue}, % keyword style + morekeywords={*,...}, % if you want to add more keywords to the set + numbers=left, % where to put the line-numbers; possible values are (none, left, right) + numbersep=5pt, % how far the line-numbers are from the code + numberstyle=\tiny\color{color_linenum}, % the style that is used for the line-numbers + rulecolor=\color{black}, % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here)) + showspaces=false, % show spaces everywhere adding particular underscores; it overrides 'showstringspaces' + showstringspaces=false, % underline spaces within strings only + showtabs=false, % show tabs within strings adding particular underscores + stepnumber=1, % the step between two line-numbers. If it's 1, each line will be numbered + stringstyle=\color{color_strings}, % string literal style + tabsize=4, % sets default tabsize to 2 spaces +% title=\lstname, % show the filename of files included with \lstinputlisting; also try caption instead of title +% inputencoding=utf8/latin1 % To accept utf8 encoding +} + +\lstset{literate= + {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 + {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1 + {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1 + {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1 + {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 + {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 + {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1 + {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1 + {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1 + {ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1 + {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1 + {€}{{\EUR}}1 {£}{{\pounds}}1 {¬}{{$\lnot$}}1 {∞}{{$\infty$}}1 +} + +\newcommand{\true}{\lstinline$true$} +\newcommand{\false}{\lstinline$false$} + +\newcommand{\lstbash}[1]{\lstinline[language=bash]$#1$} +\newcommand{\lstocaml}[1]{\lstinline[language=Caml]$#1$} +\newcommand{\lstcpp}[1]{\lstinline[language=C++]$#1$} +\newcommand{\lstc}[1]{\lstinline[language=C]$#1$} +\newcommand{\lstpython}[1]{\lstinline[language=python]$#1$} + diff --git a/texlib/todo.sty b/texlib/todo.sty new file mode 100644 index 0000000..05076cb --- /dev/null +++ b/texlib/todo.sty @@ -0,0 +1,11 @@ +\RequirePackage{xcolor} + +\definecolor{todobg}{HTML}{FF5F00} +\definecolor{todofg}{HTML}{3700DA} +\definecolor{notebg}{HTML}{87C23C} +\definecolor{notefg}{HTML}{BC3423} + +\newcommand{\qtodo}[1]{\colorbox{todobg}{\textcolor{todofg}{#1}}} +\newcommand{\todo}[1]{\qtodo{\textbf{TODO:}\,#1}} +\newcommand{\qnote}[1]{\colorbox{notebg}{\textcolor{notefg}{#1}}} +\newcommand{\tnote}[1]{\qnote{\textbf{NOTE:}\,#1}}