slides.tex 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. % vim: spell spelllang=en
  2. \documentclass[11pt,xcolor={usenames,dvipsnames},aspectratio=169]{beamer}
  3. \usetheme{metropolis}
  4. \usepackage[utf8]{inputenc}
  5. \usepackage[english]{babel}
  6. \usepackage[T1]{fontenc}
  7. \usepackage{texlib/my_listings}
  8. \usepackage{texlib/todo}
  9. \usepackage{booktabs}
  10. \usepackage[thicklines]{cancel}
  11. \renewcommand{\CancelColor}{\color{red}}
  12. %\usepackage{inconsolata}
  13. \lstdefinelanguage{iproute} {
  14. morekeywords={inet6},
  15. sensitive=true,
  16. }
  17. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  18. \title{Announcing IPv4 routes with an IPv6 next-hop in the Babel
  19. routing protocol}
  20. \subtitle{\textit{aka.}
  21. \href{https://datatracker.ietf.org/doc/draft-bastian-babel-v4ov6/}{
  22. draft-bastian-babel-v4ov6}}
  23. \author[\slidecountline]
  24. {Théophile Bastian, joint work with Juliusz Chroboczek}
  25. \date{}
  26. %\subject{}
  27. %\logo{}
  28. \institute{
  29. \href{https://ens.fr/}{ENS Paris},
  30. \href{https://www.irif.fr/}{IRIF},
  31. \href{https://www.nexedi.com/}{Nexedi}}
  32. \begin{document}
  33. \maketitle{}
  34. \begin{frame}{Traditional routing}
  35. Babel: \alert{routing protocol}. Only concern: \alert{build the routing
  36. table}.
  37. \vspace{1em}
  38. \begin{table}
  39. \centering
  40. \textbf{Routing table} \\
  41. \medskip
  42. \begin{tabular}{@{} lcl @{}}
  43. \toprule
  44. Network Prefix (IPv6) & $\rightarrow$ & Next-Hop (IPv6)\\
  45. \midrule{}
  46. 2001::/64 & & fd80::42 \\
  47. \bottomrule{}\\
  48. \toprule{}
  49. Network Prefix (IPv4) & $\rightarrow$ & Next-Hop (IPv4)\\
  50. \midrule
  51. 10.0.0.0/24 & & 10.0.0.1 \\
  52. 10.0.0.0/16 & & 10.0.1.1 \\
  53. 10.0.0.0/8 & & \xcancel{fe80::f0} \\
  54. \bottomrule
  55. \end{tabular}
  56. \end{table}
  57. \end{frame}
  58. \begin{frame}{The router's job}
  59. \begin{figure}
  60. \centering
  61. \includegraphics[width=\columnwidth]{imgs/pdf/routing.pdf}
  62. \end{figure}
  63. \end{frame}
  64. \begin{frame}{What's under the hood?}
  65. \begin{figure}
  66. \centering
  67. \only<1>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/01.pdf}}
  68. \only<2>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/02.pdf}}
  69. \only<3>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/03.pdf}}
  70. \only<4>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/04.pdf}}
  71. \only<5>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/05.pdf}}
  72. \only<6>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/06.pdf}}
  73. \only<7>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/07.pdf}}
  74. \only<8>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/08.pdf}}
  75. \only<9>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/09.pdf}}
  76. \only<10>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/10.pdf}}
  77. \only<11>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/11.pdf}}
  78. \only<12>{\includegraphics[width=\columnwidth]{imgs/_autogen/mac/12.pdf}}
  79. \end{figure}
  80. \end{frame}
  81. \begin{frame}{The idea behind}
  82. \textbf{New type of route!} v4 prefix with v6 next-hop: \alert{v4-over-v6
  83. route}.
  84. \vspace{2em}
  85. \begin{itemize}
  86. \item Useful to go through a \alert{router with no v4 address}
  87. configured
  88. \item Possible use: v6-only core, still serve v4 to clients
  89. \emph{without tunnel}
  90. \end{itemize}
  91. \vspace{2em}
  92. \textbf{Not an original idea!} BGP had it first:
  93. \href{https://datatracker.ietf.org/doc/draft-ietf-bess-rfc5549revision/}{draft-ietf-bess-rfc5549revision}
  94. \end{frame}
  95. \begin{frame}[fragile]{Linux support}
  96. \textbf{Supported in Linux} since 5.2 --~July 2019!
  97. \begin{minipage}[c]{0.1\textwidth}
  98. \includegraphics[height=1.2em]{imgs/Git-Logo-1788C}
  99. \end{minipage}
  100. \begin{minipage}[c]{0.85\textwidth}
  101. \begin{block}{d1566268 -- 2019-04-05 -- ipv4: Allow ipv6 gateway with ipv4 routes}
  102. \quad{}Add support for \lstbash{RTA_VIA} and allow an IPv6 nexthop for v4
  103. routes.
  104. \end{block}
  105. \end{minipage}
  106. \vspace{2em}
  107. \begin{itemize}
  108. \item{} Usually, add a v4 route with
  109. \begin{lstlisting}[language=iproute, numbers=none]
  110. # ip route add 10.42.0.0/16 via 10.40.0.42 dev eno1
  111. \end{lstlisting}
  112. \item{} v4-over-v6 (recent kernel):
  113. \begin{lstlisting}[language=iproute, numbers=none]
  114. # ip route add 10.42.0.0/16 via inet6 fe80::a0de:baf:b39b dev eno1
  115. \end{lstlisting}
  116. \end{itemize}
  117. \end{frame}
  118. \section{Babel protocol extension}
  119. \begin{frame}{Advertising v4-over-v6 routes}
  120. \textbf{Interface with v4 address:} no changes; just as unextended babel.
  121. \vspace{1em}
  122. \textbf{Interface with only v6 addresses:}
  123. \begin{itemize}
  124. \item{} \alert{Receiving} a v4 route: \alert{install it anyway}, the
  125. router's address is irrelevant.
  126. \item{} \alert{Announcing} a v4 route: use \alert{v4-over-v6}; we need
  127. a next-hop and only have v6 at hand.
  128. \end{itemize}
  129. \end{frame}
  130. \begin{frame}{Backwards compatibility}
  131. \textbf{\alert{Backwards compatibility:} an unextended node \alert{must}}
  132. \begin{itemize}
  133. \item Be able to \alert{ignore v4-over-v6 routes}
  134. \item \alert{Route correctly} pure v4 and v6
  135. \end{itemize}
  136. \vspace{2em}
  137. In \emph{unextended} Babel, \alert{Address Encodings} (AEs) define the type of address/prefix
  138. contained in a TLV\@.
  139. \begin{itemize}
  140. \item IPv4 address
  141. \item IPv6 address
  142. \item link-local IPv6 address
  143. \end{itemize}
  144. \end{frame}
  145. \begin{frame}{Encoding v4-over-v6 routes: choices}
  146. \textbf{Various encodings possible, among which:}
  147. \begin{enumerate}
  148. \item \emph{[Toke]} An IPv4 route announced without previously setting a valid
  149. next-hop is considered v4-over-v6.
  150. \begin{itemize}
  151. \item Is backwards compatible --~but not obviously so
  152. \item Not clear an extension is being used
  153. \end{itemize}
  154. \item \emph{[Bastian + JCH]} New specific AE for v4-over-v6 routes, and next-hop
  155. is\ldots{}
  156. \begin{enumerate}[i]
  157. \item \ldots{}specific to v4-over-v6 routes
  158. \item \only<1>{\ldots{}same as for v6 routes}
  159. \only<2>{\textbf{\alert{\ldots{}same as for v6 routes}}}
  160. \begin{itemize}
  161. \item[$\rightarrow$] more compact, just as clear
  162. \end{itemize}
  163. \end{enumerate}
  164. \medskip
  165. \begin{itemize}
  166. \item Backwards compatible and clean
  167. \item A tiny bit more verbose
  168. \end{itemize}
  169. \end{enumerate}
  170. \medskip
  171. \pause{}
  172. \begin{center}
  173. \textbf{
  174. {\Large $\leadsto$} 2.ii. \alert{Add a new AE.} No need for new
  175. TLVs.
  176. }
  177. \end{center}
  178. \end{frame}
  179. %%%%%%%%%%% Conclusion frame %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  180. \begin{frame}{Conclusion}
  181. \begin{itemize}
  182. \item New type of route: \alert{v4-over-v6}, v4 destination, v6 next-hop
  183. \item Route IPv4 over an IPv6 network core. \textit{Look, Ma! No tunnels!}
  184. \item Protocol \alert{described and drafted}
  185. \item \alert{Production-ready implementation} available on the babeld
  186. repository
  187. \end{itemize}
  188. \vspace{1em}
  189. \begin{itemize}
  190. \item \textbf{Intended status: \alert{experimental}}
  191. \item Opinions: should it be adopted by workgroup or carried alone?
  192. \end{itemize}
  193. \vspace{1em}
  194. \begin{columns}[T]
  195. \begin{column}{0.5\textwidth}
  196. \centering
  197. \textbf{\large RFC draft}
  198. \href{https://datatracker.ietf.org/doc/draft-bastian-babel-v4ov6/}{\texttt{\large huit.re/draft-v4ov6}}
  199. \includegraphics[width=0.2\textwidth]{imgs/pdf/qr_draft.pdf}
  200. \end{column}
  201. \begin{column}{0.5\textwidth}
  202. \centering
  203. \textbf{\large These slides}
  204. \href{https://tobast.fr/files/ietf108-v40v6.pdf}{\texttt{\large huit.re/ietf108-v4ov6}}
  205. \includegraphics[width=0.2\textwidth]{imgs/pdf/qr_slide.pdf}
  206. \end{column}
  207. \end{columns}
  208. \end{frame}
  209. \end{document}