1

I'm drawing this figure ;enter image description here

And I'm stuck at this point: enter image description here

I need help for three things:

  1. How can I draw from NFVI to OSS. I tried this, but I think I'm missing something
  2. How can I change the starting and end point of my draw? I know how to make an arrow [...,->]. I tried this but doesn't work
  3. Finally, how can I add a perpendicular draw (as show in the legend of the picture)

My code:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                backgrounds, bending,
                calc,
                decorations.pathmorphing,
                fit,
                petri,
                positioning}

\usepackage[margin=2.5cm]{geometry}
\usetikzlibrary{arrows.meta}
\definecolor{darkblue}{RGB}{31,22,70}
\definecolor{darkblue2}{RGB}{21,126,251}
\begin{document}
   \begin{tikzpicture}[
            transform shape,
            %show background rectangle,
            background rectangle/.style={fill=gray!20},
            box/.style={draw, font=\itshape}
            ]
            \coordinate (b) at (current page.center);
            \node[rounded corners=3mm, label=center:{OSS/BSS}, fill=darkblue2!20] (OSS)at (b) [draw,minimum width=1.5cm,minimum height=2.4cm] {};

            \node[below=5 cm of OSS,rounded corners=3mm, label=center:{EMS}, fill=darkblue2!20] (ems) [draw,minimum width=2.5cm,minimum height=1.4cm] {};
            \node[below=of ems,rounded corners=3mm, label=center:{VNF}, fill=darkblue2!20] (VNF) [draw,minimum width=2.5cm,minimum height=2.4cm] {};
            \node[below = of VNF,rounded corners=3mm, label=center:{NFVI}, fill=darkblue2!20] (NFVI) [draw,minimum width=3.5cm,minimum height=2.4cm] {};
            \node[below = of VNF,rounded corners=3mm, label=center:{NFVI}, fill=darkblue2!20] (NFVI) [draw,minimum width=3.5cm,minimum height=2.4cm] {};
            \node[right= 2cm of OSS,rounded corners=3mm, label=center:{NFV Orchestrator}, fill=darkblue!20] (NFVO) [draw,minimum width=12cm,minimum height=2.4cm] {};
            \node[below left = 0.5cm and -2cm of NFVO,rounded corners=3mm, label=center:{NS Catalog}, fill=darkblue!20] (NSC) [draw,minimum width=2cm,minimum height=2.4cm] {};
            \node[right= 0.5 cm of NSC,rounded corners=3mm, label=center:{VNF Catalog}, fill=darkblue!20] (VNFC) [draw,minimum width=2cm,minimum height=2.4cm] {};

            \node[below right = 0.5cm and -3cm of NFVO,rounded corners=3mm, label=center:{NFVI ressources}, fill=darkblue!20] (NFVIR) [draw,minimum width=3cm,minimum height=2.4cm] {};
            \node[left= 0.5 cm of NFVIR,rounded corners=3mm, label=center:{NFV Instances}, fill=darkblue!20] (NFVI1) [draw,minimum width=2.5cm,minimum height=2.4cm] {};
            \node[right= 2.5 cm of ems,rounded corners=3mm, label=center:{VNF Manager (VNFM)}, fill=darkblue!20] (VNFM) [draw,minimum width=9cm,minimum height=2.4cm] {};
            \node[right=  2cmof NFVI,rounded corners=3mm, label=center:{Virtualised infrastructure manager (VIM)}, fill=darkblue!20] (VIM) [draw,minimum width=8cm,minimum height=2.4cm] {};
            %Draw form OSS
            \draw[thick,darkblue, dashed](OSS)--(ems);
            \draw[thick,darkblue, dashed](OSS) 
                %to  [out=180](8,0)
                %to [in=180](NFVI) ;
                --(NFVI);
            \draw[thick,darkblue, dashed](OSS)--(NFVO)node [midway, above]{Os-Ma-nfvo};
            %Draw form ems
            \draw[thick,darkblue, dashed](ems)--(VNF);
            \draw[thick,darkblue, dashed](ems)--(VNFM)node [midway, above]{Ve-En-Vnfm};
            %Draw from VNF
            \draw[thick,darkblue, dashed, circle](VNF)--(NFVI)node [midway, right]{Vn-Nf};
            %Draw from VNFC
            \draw[thick,darkblue, dashed](VNFC)--(NFVO);
            %Draw from VNFM           
            \draw[thick,darkblue, dashed](VNFM)--(VNF)node [midway, below]{VeNf-Vnfm};
           %     to [out=270](NFVI)node [midway, right]{Vn-Nf};
           \draw[thick,darkblue, dashed](VNFM)--(NFVO)node [midway, right]{Or-Vnfm};
           \draw[thick,darkblue, dashed](VNFM)--(VIM)node [midway, right]{Vnfm-VI};
           %Draw from NFVI
           \draw[thick,darkblue, dashed](NFVI)--(VIM)node [midway, above]{Nf-VI};
           %draw from vim
           \draw[thick,darkblue, dashed](VIM)--(NFVO)node [midway, right]{Or-Vnfm};

           %draw form nfvo
           \draw[thick,darkblue, dashed](NFVO)--(NSC);
           \draw[thick,darkblue, dashed](NFVO)--(NFVI1);
           \draw[thick,darkblue, dashed](NFVO)--(NFVIR);

           \node[fit=(NFVO)(VIM), draw, dashed] {};  
   \end{tikzpicture}
\end{document}
2

huh, like this?

enter image description here

almost from scratch ...

\documentclass{article}
\usepackage[margin=2.5cm]{geometry}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                backgrounds, bending,
                calc, chains,
                %decorations.pathmorphing,
                fit,
                %petri,
                positioning,
                quotes,
                shapes.misc}

\definecolor{darkblue}{RGB}{31,22,70}
\definecolor{darkblue2}{RGB}{21,126,251}
\begin{document}
    \begin{tikzpicture}[
node distance = 12mm and 2mm,
  start chain = A going right,
   box/.style = {% blue box
        draw,  
        text width=#1, minimum height=12mm, align=center},
 box/.default = 16 mm,
  bbox/.style = {% blue box
        draw, rounded corners=3mm, fill=darkblue2!20,
        text width=17mm, minimum height=12mm, align=center},
  cbox/.style = {% chamfered (rectangle) box
        chamfered rectangle, chamfered rectangle corners=north west, draw, 
        minimum width=18mm, minimum height=8mm, align=flush center,
        text width=\pgfkeysvalueof{/pgf/minimum width} - 2*\pgfkeysvalueof{/pgf/inner xsep},
        on chain= A},
every edge quotes/.append style = {fill=white, font=\footnotesize, inner sep=2pt}
            ]
% second level
\node   [cbox]  {NS Catalog};
\node   [cbox]  {VNF Catalog};
\node   [cbox,draw=none]    {};  % for empty space in chain
\node   [cbox]  {NFV Instances};
\node   [cbox]  {NFVI ressources};
% top level
\path   let \p1 = ($(A-1.west)-(A-5.east)$),
            \n1 = {veclen(\x1,\y1)} in
        node (NFVO) [box=\n1-2*\pgfkeysvalueof{/pgf/inner xsep}, 
                     above=of A-3]              {NFV Orchestrator};
% third level
\path   let \p1 = ($(A-2.west)-(A-4.east)$),
            \n1 = {veclen(\x1,\y1)} in
        node (VNFM)  [box=\n1, below=of A-3]   {VNF Manager (VNFM)} 
% fourth level
        coordinate[below=of VNFM] (aux1)
% fifth level
        node (VIM)  [box=\n1, below=of aux1]   {Virtualised infrastructure manager};
% left column
    \begin{scope}[node distance=18mm]
\node (OSS) [bbox, left=of NFVO]    {OSS/BSS};
\node (EMS) [bbox, left=of A-1]     {EMS};
\node (EM)  [bbox, left=of NFVO.west |- VNFM] {EM};
\node (VNF) [bbox, left=of NFVO.west |- aux1] {VNF};
\node (NFVI) [bbox,left=of NFVO.west |- VIM]  {NFVI};
    \end{scope}
% dashed frame
\node[draw, ultra thick, dashed, inner sep=9mm, xshift=-2mm,
      fit= (NFVO) (VIM),
      label={[anchor=south east, font=\large\bfseries]below right:NFV-MANO}] {};
% first column
\draw[thick,darkblue, dashed]
    (OSS) -- (EMS)  (EMS) -- (EM)   (EM) -- (VNF)   
    (NFVI.west) -- ++ (-.5,0) |- (OSS)
% top level - second level
    (NFVO.south -| A-1) -- (A-1)
    (NFVO.south -| A-2) -- (A-2)
    (NFVO.south -| A-4) -- (A-4)
    (NFVO.south -| A-5) -- (A-5);
\path[thick,draw=darkblue,fill=darkblue]
    (VNF.south) circle (1mm) -- (NFVI.north)  circle (1mm);
% first column to second column
\draw[ultra thick,darkblue]
    (OSS)   to ["Os-Ma-nfvo"] (NFVO)
    (EM)    to [pos=0.7,"Ve-Vnfm-rm"] (VNFM)
    (NFVI)  to ["Vn-Nf"]      (VIM)
    ([yshift=-2mm] VNFM.west) to ["Ve-Vnfm-wmf"] ++ (-3,0) |- (VNF)
% from top to fourth level
    (NFVO) to [pos=0.25,"Or-Vnfm"] (VNFM)
    (VNFM) to ["Vi-Vnfm"] (VIM)
    (NFVO.east) -| ([xshift=4mm] NFVO.east |- VIM) 
                to ["Or-VI"] (VIM);
   \end{tikzpicture}
\end{document}
  • I don't know, how important are orthogonal lines over connection lines. I guess that they should designate width of buses/data words. However, this data are missed, so I omit them.
  • At drawing such, relative complex, diagrams is good practice first to define styles used in images. I define three: box (for simple rectangle), bbox (blue box with rounded corners) for nodes in the left column, and cbox for chamfered rectangles (for maps in right column). With this main code (image body) become significantly more shorter and clearer.
  • For edge labels I use quotes library.
  • Image I start to draw from second level in the right column of nodes. Relative from the cbox nodes are positioned all other nodes.
  • I hope that comments in code is helpful in understanding, what some part of code "doing"

If you have questions about code, don't hesitate to ask.

  • I thought my code would be useful.... anyway thanks a lot! – Warok May 28 at 12:14
  • @Warok, it was helpful, however it took me a time to remove all clutter and define a nodes' styles which make code more short and clear! – Zarko May 28 at 12:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.