aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--figures/Makefile35
-rw-r--r--figures/ldap.tex (renamed from schemas/ldap.tex)10
-rw-r--r--figures/network.tex291
-rw-r--r--schemas/Makefile33
-rw-r--r--schemas/network.tex205
5 files changed, 332 insertions, 242 deletions
diff --git a/figures/Makefile b/figures/Makefile
new file mode 100644
index 0000000..0b2fd5a
--- /dev/null
+++ b/figures/Makefile
@@ -0,0 +1,35 @@
+BUILD=ldap network
+
+PDF=$(patsubst %,%.pdf,$(BUILD))
+SVG=$(patsubst %,%.svg,$(BUILD))
+PNG=$(patsubst %,%.png,$(BUILD))
+
+.PHONY: all force clean cleanall
+# let rubber take care of the pdf dependencies
+.PHONY: $(BUILD) all dvi ps pdf svg png clean wc
+
+all: pdf
+
+dvi: pdf
+ps: pdf
+pdf: $(PDF)
+svg: $(SVG)
+png: $(PNG)
+
+
+%.svg: %.pdf
+ inkscape $*-cropped.pdf --export-plain-svg=$@
+
+%.png: %.pdf
+# inkscape $^ --export-area-drawing --export-png=$@
+ convert -density 120 -quality 85 $*-cropped.pdf $@
+
+%.pdf: %.tex
+ pdflatex -shell-escape $^
+
+clean:
+ rm -rf *.aux *.log *.auxlock network-cropped* ldap-cropped* $(PDF) $(SVG) $(PNG)
+
+
+wc: $(PDF)
+ @for I in $^; do echo -n "$$I: "; ps2ascii "$$I" | wc -w; done
diff --git a/schemas/ldap.tex b/figures/ldap.tex
index d4a681e..123ab83 100644
--- a/schemas/ldap.tex
+++ b/figures/ldap.tex
@@ -5,7 +5,8 @@
\usepackage{array}
\usepackage{ae}
\usepackage{tikz}
-\usetikzlibrary{trees,calc}
+\usetikzlibrary{trees,calc,external}
+\tikzexternalize
\def\dn#1{\texttt{#1}}
@@ -19,9 +20,6 @@
{ \end{tabular}
\end{minipage}}
-\thispagestyle{empty}
-\begin{document}
-
\tikzset{
ldaptree/.style = {
grow via three points={one child at (1cm,-1.5\baselineskip) and two children at (1cm,-1.5\baselineskip) and (1cm,-3\baselineskip)},
@@ -32,6 +30,10 @@
dn/.style = {font=\ttfamily}
}
+\thispagestyle{empty}
+\begin{document}
+
+\tikzsetnextfilename{ldap-cropped}
\begin{tikzpicture}[ldaptree]
\node[dn] { {o=mailhosting,dc=fripost,dc=org} }
child {
diff --git a/figures/network.tex b/figures/network.tex
new file mode 100644
index 0000000..6cebbf8
--- /dev/null
+++ b/figures/network.tex
@@ -0,0 +1,291 @@
+\documentclass[10pt,landscape,a4paper]{article}
+\usepackage[left=0pt,top=0pt,right=0pt,bottom=0pt]{geometry}
+\usepackage[english]{babel}
+\usepackage[T1]{fontenc}
+\usepackage[utf8x]{inputenc}
+\usepackage{ae}
+\usepackage{tikz}
+\usetikzlibrary{shadows,positioning,calc,fit,fadings,external}
+
+\tikzset{%
+ external/optimize command away=\withCurrentBoundingBox
+}
+\def\withCurrentBoundingBox{\pgfusepath{use as bounding box}}
+\tikzexternalize
+
+\newcommand{\machine}[2][]{
+ \begin{pgfonlayer}{background}
+ \node (machine)[%
+ fill=yellow!50, opacity=.3, rounded corners, draw, dashed,
+ fit=#2,inner sep=7pt,
+ label={[name=machine name]below:\phantom{x}}] {};
+ \end{pgfonlayer}
+ \begin{pgfonlayer}{foreground}
+ \node at (machine name) {\texttt{#1}};
+ \end{pgfonlayer}
+}
+
+\pgfdeclarelayer{background}
+\pgfdeclarelayer{foreground}
+\pgfsetlayers{background,main,foreground}
+
+\tikzstyle{service}=[fill=blue!20,
+ text width=5em, text centered,
+ minimum height=2.5em,
+ drop shadow]
+\tikzstyle{client}=[fill=green!20,
+ text width=5em, text centered,
+ minimum height=2.5em,
+ drop shadow]
+\tikzstyle{what} = [sloped,font=\footnotesize]
+\tikzstyle{proto} = [sloped,font=\footnotesize\ttfamily]
+\tikzstyle{port} = [sloped,font=\tiny\ttfamily]
+
+\tikzstyle{route} = [line width=1.5pt,line cap=rect,draw=blue!30]
+\tikzstyle{from user} = [draw=green!30]
+\tikzstyle{TODO} = [draw=red!30,text=red]
+
+\pgfdeclarehorizontalshading{shade out}{\paperheight}{
+ color(0mm)=(transparent!0);
+ color(20mm)=(transparent!0);
+ color(30mm)=(transparent!80);
+ color(40mm)=(transparent!100);
+ color(50mm)=(transparent!80);
+ color(60mm)=(transparent!0);
+ color(\paperwidth)=(transparent!0)
+}
+\pgfdeclarefading{fade in}{\pgfuseshading{shade out}}
+
+\pgfdeclarehorizontalshading{shade in}{\paperheight}{
+ color(0mm)=(transparent!100);
+ color(20mm)=(transparent!100);
+ color(30mm)=(transparent!20);
+ color(40mm)=(transparent!0);
+ color(50mm)=(transparent!20);
+ color(60mm)=(transparent!100);
+ color(\paperwidth)=(transparent!100)
+}
+\pgfdeclarefading{fade out}{\pgfuseshading{shade in}}
+
+
+\thispagestyle{empty}
+\begin{document}
+
+\centering
+\vspace*{\fill}
+\tikzsetnextfilename{network-cropped}
+\begin{tikzpicture}
+
+ \begin{scope}[node distance=5pt]
+ % The member's machine
+ \node (IMAP-client)[client] {IMAP client};
+ \node (SMTP-client)[client] [above=of IMAP-client] {SMTP client};
+ \node (web-browser)[client] [below=of IMAP-client] {Web browser};
+ \machine[\textnormal{Your machine}]{ (SMTP-client) (IMAP-client) (web-browser) }
+ \end{scope}
+
+ \begin{scope}[xshift=10cm, node distance=2cm and 2cm, on grid]
+ % mistral
+ \node (o) {};
+ \node (LDAP-producer) [service] [above right=of o] {LDAP server};
+ \node (SMTP-server-IMAP)[service] [above left=of o] {SMTP server};
+ \node (IMAP-server) [service] [below left=of o] {IMAP server};
+ \node (mailboxes) [service] [below right=of o] {Mailboxes};
+ \machine[mistral]{ (IMAP-server) (LDAP-producer) (mailboxes) }
+ \end{scope}
+
+ \begin{scope}[xshift=10cm, yshift=-7cm]
+ % harvey
+ \node (webmail)[service] {Webmail};
+ \machine[harvey]{ (webmail) }
+ \end{scope}
+
+ \begin{scope}[xshift=10cm, yshift=7cm, node distance=2cm and 2cm, on grid]
+ % luxemburg, elefant
+ \node (o) {};
+ \node (SMTP-server) [service] [left=of o] {SMTP server};
+ \node (LDAP-consumer)[service] [right=of o] {LDAP replicate};
+ \machine[luxemburg\textnormal{,} elefant]{ (SMTP-server) (LDAP-consumer) }
+ \end{scope}
+
+ \begin{scope}[xshift=20cm, node distance=1.25cm, on grid]
+ % gnu
+ \node (o) {};
+ \node (MSA)[service] [above=of o] {MSA};
+ \node (MTA)[service] [below=of o] {MTA};
+ \machine[gnu]{ (MSA) (MTA) }
+ \end{scope}
+
+ \withCurrentBoundingBox
+
+ \begin{pgfonlayer}{background}
+ \begin{scope}
+ \pgfsetfading{fade in}{\pgftransformshift{\pgfpoint{14cm}{0}}}
+% \fill (-20cm,-10cm) rectangle +(40cm,20cm);
+ \draw[->, route, from user]
+ (IMAP-client.east)
+ .. controls +(2.5cm,0) and +(-2.5cm,0) ..
+ (IMAP-server.west);
+
+ \draw[->, route, from user]
+ (web-browser.south)
+ .. controls +(0,-4cm) and +(-3.5cm,0) ..
+ (webmail.west);
+
+ \draw[->, route, from user, TODO]
+ (SMTP-client.north)
+ .. controls +(0,5cm) and +(-5cm,0) ..
+ ($0.5*(SMTP-server)+0.5*(LDAP-consumer)+(0,1.5cm)$)
+ .. controls +(5cm,0) and +(0,5cm) ..
+ (MSA.north);
+ \end{scope}
+
+ \begin{scope}
+ \pgfsetfading{fade out}{\pgftransformshift{\pgfpoint{14cm}{0}}}
+% \fill (-20cm,-10cm) rectangle +(40cm,20cm);
+ \draw[dashed, route, from user]
+ (IMAP-client.east)
+ .. controls +(2.5cm,0) and +(-2.5cm,0) ..
+ (IMAP-server.west);
+
+ \draw[dashed, route, from user]
+ (web-browser.south)
+ .. controls +(0,-4cm) and +(-3.5cm,0) ..
+ (webmail.west);
+
+ \draw[dashed, route, from user, TODO]
+ (SMTP-client.north)
+ .. controls +(0,5cm) and +(-5cm,0) ..
+ ($0.5*(SMTP-server)+0.5*(LDAP-consumer)+(0,1.5cm)$)
+ .. controls +(5cm,0) and +(0,5cm) ..
+ (MSA.north);
+ \end{scope}
+
+ \begin{scope}
+ \draw[route, from user, draw=none]
+ (IMAP-client.east)
+ .. controls +(2.5cm,0) and +(-2.5cm,0) ..
+ (IMAP-server.west)
+ node[pos=0.5,above,proto] {IMAPS}
+ node[pos=0.5,below,what] {\texttt{getmail}}
+ node[pos=0.96,above,port] {993};
+
+ \draw[route, from user, draw=none]
+ (web-browser.south)
+ .. controls +(0,-4cm) and +(-3.5cm,0) ..
+ (webmail.west)
+ node[pos=0.5,above,proto] {HTTPS}
+ node[pos=0.98,above,port] {443};
+
+ \draw[route, from user, TODO, draw=none]
+ (SMTP-client.north)
+ .. controls +(0,5cm) and +(-5cm,0) ..
+ ($0.5*(SMTP-server)+0.5*(LDAP-consumer)+(0,1.5cm)$)
+ node[pos=1,above,proto] {ESMTPSA}
+ node[pos=1,below,what] {\texttt{sendmail}}
+ .. controls +(5cm,0) and +(0,5cm) ..
+ (MSA.north)
+ node[pos=0.985,above,port] {587};
+ \end{scope}
+
+ \draw[->, route]
+ (IMAP-server)
+ .. controls +(30:2cm) and +(-120:2cm) ..
+ (LDAP-producer)
+ node[pos=0.5,above,proto] {LDAP}
+ node[pos=0.5,below,what] {auth. bind}
+ node[pos=0.92,above,port] {389};
+
+ \draw[->, route]
+ (webmail.north)
+ .. controls +(0,1.5cm) and +(0,-1.5cm) ..
+ (IMAP-server.south)
+ node[pos=0.5,above,proto] {IMAPS}
+ node[pos=0.94,above,port] {993};
+
+ \draw[->, route]
+ (webmail.30)
+ .. controls +(30:8cm) and +(0,-2.5cm) ..
+ (LDAP-producer.south)
+ node[pos=0.5,above,proto] {LDAP \textnormal{(over \texttt{SSH})}}
+ node[pos=0.15,above,what] {auth. bind to}
+ node[pos=0.15,below,what] {mod. password}
+ node[pos=0.96,above,port] {389};
+
+ \draw[->,route] (MSA) edge
+ node[above,proto] {ESMTP}
+ node[pos=0.9,below,port] {25}
+ (MTA);
+
+ \draw[->, route]
+ (MSA.west)
+ .. controls +(-2.5cm,0) and +(2.5cm,0) ..
+ (LDAP-producer.east)
+ node[pos=0.5,above,proto] {LDAP \textnormal{(over \texttt{SSH})}}
+ node[pos=0.5,below,what] {auth. bind}
+ node[pos=0.96,below,port] {389};
+
+ \draw[->,route] (SMTP-server) edge[TODO]
+ node[above,proto] {LDAPI}
+ node[below,what] {virtual lookups}
+ (LDAP-consumer) edge
+ node[above,proto] {ESMTP \textnormal{(over \texttt{SSH})}}
+ node[pos=0.96,below,port] {25}
+ (SMTP-server-IMAP);
+
+ \draw[->,route] (SMTP-server-IMAP) edge
+ node[above,proto] {LDAP}
+ node[below,what] {virtual lookups}
+ node[pos=0.92,above,port] {389}
+ (LDAP-producer) edge
+ node[below,what] {\texttt{deliver}}
+ (IMAP-server);
+
+ \draw[->,route] (IMAP-server) edge
+ node[below,what] {read,write}
+ (mailboxes);
+
+ \draw[->,route] (LDAP-consumer) edge
+ node[above,proto] {LDAP \textnormal{(over \texttt{SSH})}}
+ node[below,what] {\texttt{syncrepl}}
+ node[pos=0.95,above,port] {389}
+ (LDAP-producer);
+
+ \draw[->,route,TODO]
+ (webmail.east)
+ .. controls +(3.5cm,0) and +(0,-4cm) ..
+ (MTA.south)
+ node[pos=0.5,above,proto] {ESMTPS}
+ node[pos=0.5,below,what] {\texttt{sendmail}}
+ node[pos=0.98,above,port] {25};
+ \end{pgfonlayer}
+
+
+ \begin{pgfonlayer}{background}
+ \draw[->,route,path fading=north]
+ ($(SMTP-server.west)+(-5cm,2cm)$)
+ .. controls +(2cm,0) and +(-2cm,0) ..
+ (SMTP-server.west);
+ \end{pgfonlayer}
+ \path[draw=none]
+ ($(SMTP-server.west)+(-5cm,2cm)$)
+ .. controls +(2cm,0) and +(-2cm,0) ..
+ (SMTP-server.west)
+ node[pos=0.5,above,proto] {ESMTP}
+ node[pos=0.97,above,port] {25};
+
+ \begin{pgfonlayer}{background}
+ \draw[->,route,TODO,path fading=south]
+ (MTA.east)
+ .. controls +(2cm,0) and +(0,2cm) ..
+ ($(MTA.east)+(2cm,-5cm)$);
+ \end{pgfonlayer}
+ \path[TODO,draw=none]
+ (MTA.east)
+ .. controls +(2cm,0) and +(0,2cm) ..
+ ($(MTA.east)+(2cm,-5cm)$)
+ node[pos=0.5,above,proto] {ESMTP};
+\end{tikzpicture}
+\vspace*{\fill}
+
+\end{document}
diff --git a/schemas/Makefile b/schemas/Makefile
deleted file mode 100644
index 8e81fda..0000000
--- a/schemas/Makefile
+++ /dev/null
@@ -1,33 +0,0 @@
-BUILD=ldap network
-
-RUBBER=rubber --warn boxes --warn refs
-PDF=$(patsubst %, %.pdf, $(BUILD))
-SVG=$(patsubst %, %.svg, $(BUILD))
-
-.PHONY: all force clean cleanall
-# let rubber take care of the pdf dependencies
-.PHONY: $(BUILD) all dvi ps pdf force clean wc
-
-all: pdf
-
-dvi: pdf
-ps: pdf
-pdf: $(PDF)
-svg: $(SVG)
-
-%.pdf: %.tex
- $(RUBBER) --pdf $<
-
-%.svg: %.pdf
- inkscape $^ --export-plain-svg=$@
-
-force:
- for I in $(BUILD); do $(RUBBER) --force --pdf "$$I"; done
-
-clean:
- for I in $(BUILD); do $(RUBBER) --clean --ps --pdf "$$I"; done
- rm $(SVG)
-
-
-wc: $(PDF)
- @for I in $^; do echo -n "$$I: "; ps2ascii "$$I" | wc -w; done
diff --git a/schemas/network.tex b/schemas/network.tex
deleted file mode 100644
index 3565826..0000000
--- a/schemas/network.tex
+++ /dev/null
@@ -1,205 +0,0 @@
-\documentclass[10pt,landscape,a4paper]{article}
-\usepackage[left=0pt,top=0pt,right=0pt,bottom=0pt]{geometry}
-\usepackage[english]{babel}
-\usepackage[T1]{fontenc}
-\usepackage[utf8x]{inputenc}
-\usepackage{ae}
-\usepackage{tikz}
-\usetikzlibrary{arrows,shadows,positioning,calc,fit,fadings}
-
-\newcommand{\machine}[2][]{
- \begin{pgfonlayer}{background}
- \node[fill=yellow!20, rounded corners, draw=black!50, dashed,
- fit=#2,inner sep=7pt,
- label=below:\texttt{#1}] {};
- \end{pgfonlayer}
-}
-
-
-\thispagestyle{empty}
-\begin{document}
-
-\pgfdeclarelayer{background}
-\pgfdeclarelayer{foreground}
-\pgfsetlayers{background,main,foreground}
-
-\tikzstyle{service}=[draw, fill=blue!20,
- text width=5em, text centered,
- minimum height=2.5em,
- drop shadow]
-\tikzstyle{what} = [sloped,font=\footnotesize]
-\tikzstyle{proto} = [sloped,font=\footnotesize\ttfamily]
-\tikzstyle{port} = [sloped,font=\tiny\ttfamily]
-
-\tikzstyle{TODO} = [draw=red]
-
-\centering
-\vspace*{\fill}
-\begin{tikzpicture}
-
- \begin{scope}[node distance=5pt]
- % The member's machine
- \node (IMAP-client)[service] {IMAP client};
- \node (SMTP-client)[service] [above=of IMAP-client] {SMTP client};
- \node (web-browser)[service] [below=of IMAP-client] {Web browser};
- \machine[\textnormal{Your machine}]{ (SMTP-client) (IMAP-client) (web-browser) }
- \end{scope}
-
- \begin{scope}[xshift=8cm, node distance=2cm and 2cm, on grid]
- % mistral
- \node (o) {};
- \node (LDAP-producer) [service] [above right=of o] {LDAP server};
- \node (SMTP-server-IMAP)[service] [above left=of o] {SMTP server};
- \node (IMAP-server) [service] [below left=of o] {IMAP server};
- \node (mailboxes) [service] [below right=of o] {Mailboxes};
- \machine[mistral]{ (IMAP-server) (LDAP-producer) (mailboxes) }
- \end{scope}
-
- \begin{scope}[xshift=8cm, yshift=-7cm]
- % harvey
- \node (webmail)[service] {Webmail};
- \machine[harvey]{ (webmail) }
- \end{scope}
-
- \begin{scope}[xshift=8cm, yshift=7cm, node distance=2cm and 2cm, on grid]
- % luxemburg, elefant
- \node (o) {};
- \node (SMTP-server) [service] [left=of o] {SMTP server};
- \node (LDAP-consumer)[service] [right=of o] {LDAP replicate};
- \machine[luxemburg\textnormal{,} elefant]{ (SMTP-server) (LDAP-consumer) }
- \end{scope}
-
- \begin{scope}[xshift=16cm, node distance=1.25cm, on grid]
- % gnu
- \node (o) {};
- \node (MSA)[service] [above=of o] {MSA};
- \node (MTA)[service] [below=of o] {MTA};
- \machine[gnu]{ (MSA) (MTA) }
- \end{scope}
-
- \path[use as bounding box]
- (current bounding box.north east) -- (current bounding box.south west);
-
- \begin{pgfonlayer}{background}
- \draw[->] (IMAP-server)
- .. controls +(30:2cm) and +(-120:2cm) ..
- (LDAP-producer)
- node[pos=0.5,above,proto] {LDAP}
- node[pos=0.5,below,what] {auth. bind}
- node[pos=0.92,above,port] {389};
-
- \draw[->] (IMAP-client.east)
- .. controls +(1.5cm,0) and +(-1.5cm,0) ..
- (IMAP-server.west)
- node[pos=0.5,above,proto] {IMAPS}
- node[pos=0.5,below,what] {\texttt{getmail}}
- node[pos=0.95,above,port] {993};
-
- \draw[->] (web-browser.south)
- .. controls +(0,-4cm) and +(-3.5cm,0) ..
- (webmail.west)
- node[pos=0.5,above,proto] {HTTPS}
- node[pos=0.97,above,port] {443};
-
- \draw[->] (webmail.north)
- .. controls +(0,1.5cm) and +(0,-1.5cm) ..
- (IMAP-server.south)
- node[pos=0.5,above,proto] {IMAPS}
- node[pos=0.94,above,port] {993};
-
- \draw[->] (webmail.30)
- .. controls +(30:8cm) and +(0,-2.5cm) ..
- (LDAP-producer.south)
- node[pos=0.5,above,proto] {LDAP \textnormal{(over \texttt{SSH})}}
- node[pos=0.15,above,what] {auth. bind to}
- node[pos=0.15,below,what] {change password}
- node[pos=0.96,above,port] {389};
-
- \draw[->] (MSA) edge
- node[above,proto] {ESMTP}
- node[pos=0.9,below,port] {25}
- (MTA);
-
- \draw[->] (MSA.west)
- .. controls +(-2cm,0) and +(2cm,0) ..
- (LDAP-producer.east)
- node[pos=0.5,above,proto] {LDAP \textnormal{(over \texttt{SSH})}}
- node[pos=0.5,below,what] {auth. bind}
- node[pos=0.96,below,port] {389};
-
- \draw[->,TODO] (SMTP-client.north)
- .. controls +(0,5cm) and +(-5cm,0) ..
- ($0.5*(SMTP-server)+0.5*(LDAP-consumer)+(0,1.5cm)$)
- node[pos=1,above,proto] {ESMTPSA}
- node[pos=1,below,what] {\texttt{sendmail}}
- .. controls +(5cm,0) and +(0,5cm) ..
- (MSA.north)
- node[pos=0.99,above,port] {587};
-
- \draw[->] (SMTP-server) edge
- node[above,proto] {LDAPI}
- node[below,what] {virtual lookups}
- (LDAP-consumer);
-
- \draw[->] (SMTP-server-IMAP) edge
- node[above,proto] {LDAPI}
- node[below,what] {virtual lookups}
- (LDAP-producer);
-
- \draw[->] (SMTP-server) edge
- node[above,proto] {ESMTP \textnormal{(over \texttt{SSH})}}
- node[pos=0.96,below,port] {25}
- (SMTP-server-IMAP);
-
- \draw[->] (SMTP-server-IMAP) edge
- node[below,what] {\texttt{deliver}}
- (IMAP-server);
-
- \draw[->] (IMAP-server) edge
- node[below,what] {read, write}
- (mailboxes);
-
- \draw[->] (LDAP-consumer.south)
- .. controls +(0,-1.5cm) and +(0,1.5cm) ..
- (LDAP-producer.north)
- node[pos=0.5,above,proto] {LDAP \textnormal{(over \texttt{SSH})}}
- node[pos=0.5,below,what] {\texttt{syncrepl}}
- node[pos=0.95,above,port] {389};
-
- \draw[->,TODO] (webmail.east)
- .. controls +(3.5cm,0) and +(0,-4cm) ..
- (MTA.south)
- node[pos=0.5,above,proto] {ESMTPS}
- node[pos=0.5,below,what] {\texttt{sendmail}}
- node[pos=0.97,above,port] {25};
-
- \draw[->,path fading=west]
- ($(SMTP-server.west)+(-5cm,2cm)$)
- .. controls +(2cm,0) and +(-2cm,0) ..
- (SMTP-server.west);
- \draw[dashed,path fading=east]
- ($(SMTP-server.west)+(-5cm,2cm)$)
- .. controls +(2cm,0) and +(-2cm,0) ..
- (SMTP-server.west);
- \path ($(SMTP-server.west)+(-5cm,2cm)$)
- .. controls +(2cm,0) and +(-2cm,0) ..
- (SMTP-server.west)
- node[pos=0.5,above,proto] {ESMTP}
- node[pos=0.97,above,port] {25};
-
- \draw[path fading=east,TODO]
- (MTA.east)
- .. controls +(2cm,0) and +(0,2cm) ..
- ($(MTA.east)+(2cm,-5cm)$);
- \draw[->,dashed,path fading=west,TODO]
- (MTA.east)
- .. controls +(2cm,0) and +(0,2cm) ..
- ($(MTA.east)+(2cm,-5cm)$)
- node[pos=0.5,above,proto] {ESMTP}
- node[pos=0.97,above,port] {25};
- \end{pgfonlayer}
-
-\end{tikzpicture}
-\vspace*{\fill}
-
-\end{document}