X-Git-Url: https://git.josue.xyz/?p=VSoRC%2F.git;a=blobdiff_plain;f=src%2Fviews%2Faccess.ejs;fp=src%2Fviews%2Faccess.ejs;h=ad26982b24c6a7da014d6681b2d185f91b3b9abf;hp=2fb2bb614138995ca24f799fa01fcbf81c1b459f;hb=acb5f682a2b75b972710cabd81658f63071324b0;hpb=8bd25d906f766566ceee02d3d70e9890689a4c1a diff --git a/src/views/access.ejs b/src/views/access.ejs index 2fb2bb6..ad26982 100644 --- a/src/views/access.ejs +++ b/src/views/access.ejs @@ -30,440 +30,1837 @@
- -howto - - - - -

Practicas en cluster Raspberry Pi

1- Enrutamiento estatico con API REST

El objetivo de esta practica consiste en crear una topologia serial de 3 switches y 3 host, como se muestra en la siguiente imagen. Asi, solo se permite conectividad entre las redes de h1 - h2 y h3-h2, pero no h1-h3.

 

Para esto, mediante la pagina web cree la topologia, inicie el controlador con la aplicacion REST Router , confirme que en el controlador se muestra que los switches fueron reconocidos y proceda a configurar las direcciones IP de los hosts.

Configuracion de direcciones IP a los hosts virtuales

Para configurar estas direcciones IP, utilice los comandos h[x] ip addr del 10.0.0.[x]/8 dev h[x]-eth0 para eliminar la IP por defecto, siendo [x] el host deseado, y asimismo con el comando ip addr add configure las demas direcciones. Asi mismo, configure los gateway necesarios con el comando ip route add default via [direccion_ip_gateway].

Entendemos que este proceso puede ser algo tedioso, por lo cual hemos creado un script, el cual se encuentra en la carpeta scripts de la Raspberry principal. Para ejecutarlo, simplemente ejecutelo con ./hostadress.sh.

Compruebe mediante la web que se realizaron las configuraciones con el comando h[x] ifconfig h[x]-eth0

Programar el controlador para que los switches conozcan las redes

Par este paso, necesita hacer uso del API REST de la aplicacion de RYU.

Entendemos que esto puede ser un poco tedioso, por lo cual hemos creado un script que se encuentra en la carpeta scripts que realiza estas configuraciones de manera automatica, solo ejecutandolo con ./routerflows.sh. Mas abajo se muestra un fragmento del script, para que se entienda que es lo que esta ocurriendo.

Una vez ejecutado, mediante la pagina web, compruebe que cada switch tiene seteado sus flow entrys correctamente en el apartado flow tables.

Compruebe que existe conectividad entre h1 y h2 ejecutando el comando h1 ping -c 4 h2. Para ver el camino recorrido, ejecute h1 traceroute h2.

Si desea eliminar todos los flowentry de los switches, y simplemente dejarlos con su flow por defecto, en la pagina web presione el boton Reset flows del apartado Flow Tables.

2- Creando un micro web server

El objetivo de esta practica es la de comprobar conectividad entre dos host virtuales, por ejemplo h1 y h2.

Preparando archivos

Para poder hacer una pequna web que podamos navegar vamos a hacer lo siguiente: -Necesitamos crear un archivo, el cual sera un script en bash con lo que deseamos ver en el cliente. Para crear esto en un host especifico, escribimos h[x] echo "[pegar texto de abajo]" > test.sh , donde x es el id del host deseado.

Iniciando el servidor

En el host que funcionara como servidor corremos el comando h[x] while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; sh test.sh; } | nc -l 1234 -q 1; done &, donde x es el id del host deseado.

Accediendo al servidor

En cualquier otro host que tenga conectividad con el server solo tienes que realizar h[x] curl -X GET http://_ipdelserver_:124 , siendo x el id de cualquier host. Asi podras ver tu web servida -En caso de acceder desde una consola se puede instalar el software w3m y con este navegador par aconsola acceder a la web.

- + .CodeMirror-focused div.CodeMirror-cursor { visibility: inherit; } + .cm-searching { background: rgba(255, 255, 0, 0.4); } + @media print { + .CodeMirror div.CodeMirror-cursor { visibility: hidden; } + } + + + /* Flowchart variables */ + /* Sequence Diagram variables */ + /* Gantt chart variables */ + /* state colors */ + .label { + + color: #333; } + + .label text { + fill: #333; } + + .node rect, + .node circle, + .node ellipse, + .node polygon { + fill: #BDD5EA; + stroke: #9370DB; + stroke-width: 1px; } + + .node .label { + text-align: center; } + + .node.clickable { + cursor: pointer; } + + .arrowheadPath { + fill: lightgrey; } + + .edgePath .path { + stroke: lightgrey; + stroke-width: 1.5px; } + + .edgeLabel { + background-color: #e8e8e8; + text-align: center; } + + .cluster rect { + fill: #6D6D65; + stroke: rgba(255, 255, 255, 0.25); + stroke-width: 1px; } + + .cluster text { + fill: #F9FFFE; } + + div.mermaidTooltip { + position: absolute; + text-align: center; + max-width: 200px; + padding: 2px; + + font-size: 12px; + background: #6D6D65; + border: 1px solid rgba(255, 255, 255, 0.25); + border-radius: 2px; + pointer-events: none; + z-index: 100; } + + .actor { + stroke: #81B1DB; + fill: #BDD5EA; } + + text.actor { + fill: black; + stroke: none; } + + .actor-line { + stroke: lightgrey; } + + .messageLine0 { + stroke-width: 1.5; + stroke-dasharray: '2 2'; + stroke: lightgrey; } + + .messageLine1 { + stroke-width: 1.5; + stroke-dasharray: '2 2'; + stroke: lightgrey; } + + #arrowhead { + fill: lightgrey; } + + .sequenceNumber { + fill: white; } + + #sequencenumber { + fill: lightgrey; } + + #crosshead path { + fill: lightgrey !important; + stroke: lightgrey !important; } + + .messageText { + fill: lightgrey; + stroke: none; } + + .labelBox { + stroke: #81B1DB; + fill: #BDD5EA; } + + .labelText { + fill: #323D47; + stroke: none; } + + .loopText { + fill: lightgrey; + stroke: none; } + + .loopLine { + stroke-width: 2; + stroke-dasharray: '2 2'; + stroke: #81B1DB; } + + .note { + stroke: rgba(255, 255, 255, 0.25); + fill: #fff5ad; } + + .noteText { + fill: black; + stroke: none; + + font-size: 14px; } + + .activation0 { + fill: #f4f4f4; + stroke: #666; } + + .activation1 { + fill: #f4f4f4; + stroke: #666; } + + .activation2 { + fill: #f4f4f4; + stroke: #666; } + + /** Section styling */ + .section { + stroke: none; + opacity: 0.2; } + + .section0 { + fill: rgba(255, 255, 255, 0.3); } + + .section2 { + fill: #EAE8B9; } + + .section1, + .section3 { + fill: white; + opacity: 0.2; } + + .sectionTitle0 { + fill: #F9FFFE; } + + .sectionTitle1 { + fill: #F9FFFE; } + + .sectionTitle2 { + fill: #F9FFFE; } + + .sectionTitle3 { + fill: #F9FFFE; } + + .sectionTitle { + text-anchor: start; + font-size: 11px; + text-height: 14px; + } + + /* Grid and axis */ + .grid .tick { + stroke: lightgrey; + opacity: 0.3; + shape-rendering: crispEdges; } + + .grid path { + stroke-width: 0; } + + /* Today line */ + .today { + fill: none; + stroke: #DB5757; + stroke-width: 2px; } + + /* Task styling */ + /* Default task */ + .task { + stroke-width: 2; } + + .taskText { + text-anchor: middle; + } + + .taskText:not([font-size]) { + font-size: 11px; } + + .taskTextOutsideRight { + fill: #323D47; + text-anchor: start; + font-size: 11px; + } + + .taskTextOutsideLeft { + fill: #323D47; + text-anchor: end; + font-size: 11px; } + + /* Special case clickable */ + .task.clickable { + cursor: pointer; } + + .taskText.clickable { + cursor: pointer; + fill: #003163 !important; + font-weight: bold; } + + .taskTextOutsideLeft.clickable { + cursor: pointer; + fill: #003163 !important; + font-weight: bold; } + + .taskTextOutsideRight.clickable { + cursor: pointer; + fill: #003163 !important; + font-weight: bold; } + + /* Specific task settings for the sections*/ + .taskText0, + .taskText1, + .taskText2, + .taskText3 { + fill: #323D47; } + + .task0, + .task1, + .task2, + .task3 { + fill: #BDD5EA; + stroke: rgba(255, 255, 255, 0.5); } + + .taskTextOutside0, + .taskTextOutside2 { + fill: lightgrey; } + + .taskTextOutside1, + .taskTextOutside3 { + fill: lightgrey; } + + /* Active task */ + .active0, + .active1, + .active2, + .active3 { + fill: #81B1DB; + stroke: rgba(255, 255, 255, 0.5); } + + .activeText0, + .activeText1, + .activeText2, + .activeText3 { + fill: #323D47 !important; } + + /* Completed task */ + .done0, + .done1, + .done2, + .done3 { + stroke: grey; + fill: lightgrey; + stroke-width: 2; } + + .doneText0, + .doneText1, + .doneText2, + .doneText3 { + fill: #323D47 !important; } + + /* Tasks on the critical line */ + .crit0, + .crit1, + .crit2, + .crit3 { + stroke: #E83737; + fill: #E83737; + stroke-width: 2; } + + .activeCrit0, + .activeCrit1, + .activeCrit2, + .activeCrit3 { + stroke: #E83737; + fill: #81B1DB; + stroke-width: 2; } + + .doneCrit0, + .doneCrit1, + .doneCrit2, + .doneCrit3 { + stroke: #E83737; + fill: lightgrey; + stroke-width: 2; + cursor: pointer; + shape-rendering: crispEdges; } + + .milestone { + transform: rotate(45deg) scale(0.8, 0.8); } + + .milestoneText { + font-style: italic; } + + .doneCritText0, + .doneCritText1, + .doneCritText2, + .doneCritText3 { + fill: #323D47 !important; } + + .activeCritText0, + .activeCritText1, + .activeCritText2, + .activeCritText3 { + fill: #323D47 !important; } + + .titleText { + text-anchor: middle; + font-size: 18px; + fill: #323D47; + } + + g.classGroup text { + fill: #9370DB; + stroke: none; + + font-size: 10px; } + g.classGroup text .title { + font-weight: bolder; } + + g.classGroup rect { + fill: #BDD5EA; + stroke: #9370DB; } + + g.classGroup line { + stroke: #9370DB; + stroke-width: 1; } + + .classLabel .box { + stroke: none; + stroke-width: 0; + fill: #BDD5EA; + opacity: 0.5; } + + .classLabel .label { + fill: #9370DB; + font-size: 10px; } + + .relation { + stroke: #9370DB; + stroke-width: 1; + fill: none; } + + #compositionStart { + fill: #9370DB; + stroke: #9370DB; + stroke-width: 1; } + + #compositionEnd { + fill: #9370DB; + stroke: #9370DB; + stroke-width: 1; } + + #aggregationStart { + fill: #BDD5EA; + stroke: #9370DB; + stroke-width: 1; } + + #aggregationEnd { + fill: #BDD5EA; + stroke: #9370DB; + stroke-width: 1; } + + #dependencyStart { + fill: #9370DB; + stroke: #9370DB; + stroke-width: 1; } + + #dependencyEnd { + fill: #9370DB; + stroke: #9370DB; + stroke-width: 1; } + + #extensionStart { + fill: #9370DB; + stroke: #9370DB; + stroke-width: 1; } + + #extensionEnd { + fill: #9370DB; + stroke: #9370DB; + stroke-width: 1; } + + .commit-id, + .commit-msg, + .branch-label { + fill: lightgrey; + color: lightgrey; + } + + .pieTitleText { + text-anchor: middle; + font-size: 25px; + fill: #323D47; + } + + .slice { + } + + g.stateGroup text { + fill: #eee; + stroke: none; + font-size: 10px; + } + + g.stateGroup circle { + fill: white !important; + stroke: white !important; + } + + g.stateGroup .state-title { + font-weight: bolder; + fill: black; } + + g.stateGroup rect { + fill: #ececff; + stroke: #9370DB; } + + g.stateGroup line { + stroke: #9370DB; + stroke-width: 1; } + + .transition { + stroke: #9370DB; + stroke-width: 1; + fill: none; } + + .stateGroup .composit { + fill: #555; + border-bottom: 1px; } + + .state-note { + stroke: rgba(255, 255, 255, 0.25); + fill: #fff5ad; } + .state-note text { + fill: black; + stroke: none; + font-size: 10px; } + + .stateLabel .box { + stroke: none; + stroke-width: 0; + fill: #BDD5EA; + opacity: 0.5; } + + .stateLabel text { + fill: black; + font-size: 10px; + font-weight: bold; + } + + ; + /* CSS Document */ + + /** code highlight */ + + .cm-s-inner .cm-variable, + .cm-s-inner .cm-operator, + .cm-s-inner .cm-property { + color: #b8bfc6; + } + + .cm-s-inner .cm-keyword { + color: #C88FD0; + } + + .cm-s-inner .cm-tag { + color: #7DF46A; + } + + .cm-s-inner .cm-attribute { + color: #7575E4; + } + + .CodeMirror div.CodeMirror-cursor { + border-left: 1px solid #b8bfc6; + z-index: 3; + } + + .cm-s-inner .cm-string { + color: #D26B6B; + } + + .cm-s-inner .cm-comment, + .cm-s-inner.cm-comment { + color: #DA924A; + } + + .cm-s-inner .cm-header, + .cm-s-inner .cm-def, + .cm-s-inner.cm-header, + .cm-s-inner.cm-def { + color: #8d8df0; + } + + .cm-s-inner .cm-quote, + .cm-s-inner.cm-quote { + color: #57ac57; + } + + .cm-s-inner .cm-hr { + color: #d8d5d5; + } + + .cm-s-inner .cm-link { + color: #d3d3ef; + } + + .cm-s-inner .cm-negative { + color: #d95050; + } + + .cm-s-inner .cm-positive { + color: #50e650; + } + + .cm-s-inner .cm-string-2 { + color: #f50; + } + + .cm-s-inner .cm-meta, + .cm-s-inner .cm-qualifier { + color: #b7b3b3; + } + + .cm-s-inner .cm-builtin { + color: #f3b3f8; + } + + .cm-s-inner .cm-bracket { + color: #997; + } + + .cm-s-inner .cm-atom, + .cm-s-inner.cm-atom { + color: #84B6CB; + } + + .cm-s-inner .cm-number { + color: #64AB8F; + } + + .cm-s-inner .cm-variable { + color: #b8bfc6; + } + + .cm-s-inner .cm-variable-2 { + color: #9FBAD5; + } + + .cm-s-inner .cm-variable-3 { + color: #1cc685; + } + + .CodeMirror-selectedtext, + .CodeMirror-selected { + background: #4a89dc; + color: #fff !important; + text-shadow: none; + } + + .CodeMirror-gutters { + border-right: none; + } + ; + /* CSS Document */ + + /** markdown source **/ + .cm-s-typora-default .cm-header, + .cm-s-typora-default .cm-property + { + color: #cebcca; + } + + .CodeMirror.cm-s-typora-default div.CodeMirror-cursor{ + border-left: 3px solid #b8bfc6; + } + + .cm-s-typora-default .cm-comment { + color: #9FB1FF; + } + + .cm-s-typora-default .cm-string { + color: #A7A7D9 + } + + .cm-s-typora-default .cm-atom, .cm-s-typora-default .cm-number { + color: #848695; + font-style: italic; + } + + .cm-s-typora-default .cm-link { + color: #95B94B; + } + + .cm-s-typora-default .CodeMirror-activeline-background { + background: rgba(51, 51, 51, 0.72); + } + + .cm-s-typora-default .cm-comment, .cm-s-typora-default .cm-code { + color: #8aa1e1; + }@import ""; + @import ""; + @import ""; + + :root { + --bg-color: #363B40; + --side-bar-bg-color: #2E3033; + --text-color: #b8bfc6; + + --select-text-bg-color:#4a89dc; + + --item-hover-bg-color: #0a0d16; + --control-text-color: #b7b7b7; + --control-text-hover-color: #eee; + --window-border: 1px solid #555; + + --active-file-bg-color: rgb(34, 34, 34); + --active-file-border-color: #8d8df0; + + --primary-color: #a3d5fe; + + --active-file-text-color: white; + --item-hover-bg-color: #70717d; + --item-hover-text-color: white; + --primary-color: #6dc1e7; + + --rawblock-edit-panel-bd: #333; + + --search-select-bg-color: #428bca; + } + + html { + font-size: 16px; + } + + html, + body { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + background: #363B40; + background: var(--bg-color); + fill: currentColor; + line-height: 1.625rem; + } + + #write { + max-width: 914px; + } + + html, + body, + button, + input, + select, + textarea, + div.code-tooltip-content { + color: #b8bfc6; + border-color: transparent; + } + + div.code-tooltip, + .md-hover-tip .md-arrow:after { + background: #333; + } + + .popover.bottom > .arrow:after { + border-bottom-color: #333; + } + + html, + body, + button, + input, + select, + textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + } + + hr { + height: 2px; + border: 0; + margin: 24px 0 !important; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + font-family: "Lucida Grande", "Corbel", sans-serif; + font-weight: normal; + clear: both; + -ms-word-wrap: break-word; + word-wrap: break-word; + margin: 0; + padding: 0; + color: #DEDEDE + } + + h1 { + font-size: 2.5rem; + /* 36px */ + line-height: 2.75rem; + /* 40px */ + margin-bottom: 1.5rem; + /* 24px */ + letter-spacing: -1.5px; + } + + h2 { + font-size: 1.63rem; + /* 24px */ + line-height: 1.875rem; + /* 30px */ + margin-bottom: 1.5rem; + /* 24px */ + letter-spacing: -1px; + font-weight: bold; + } + + h3 { + font-size: 1.17rem; + /* 18px */ + line-height: 1.5rem; + /* 24px */ + margin-bottom: 1.5rem; + /* 24px */ + letter-spacing: -1px; + font-weight: bold; + } + + h4 { + font-size: 1.12rem; + /* 16px */ + line-height: 1.375rem; + /* 22px */ + margin-bottom: 1.5rem; + /* 24px */ + color: white; + } + + h5 { + font-size: 0.97rem; + /* 16px */ + line-height: 1.25rem; + /* 22px */ + margin-bottom: 1.5rem; + /* 24px */ + font-weight: bold; + } + + h6 { + font-size: 0.93rem; + /* 16px */ + line-height: 1rem; + /* 16px */ + margin-bottom: 0.75rem; + color: white; + } + + @media (min-width: 980px) { + h3.md-focus:before, + h4.md-focus:before, + h5.md-focus:before, + h6.md-focus:before { + color: #ddd; + border: 1px solid #ddd; + border-radius: 3px; + position: absolute; + left: -1.642857143rem; + top: .357142857rem; + float: left; + font-size: 9px; + padding-left: 2px; + padding-right: 2px; + vertical-align: bottom; + font-weight: normal; + line-height: normal; + } + + h3.md-focus:before { + content: 'h3'; + } + + h4.md-focus:before { + content: 'h4'; + } + + h5.md-focus:before { + content: 'h5'; + top: 0px; + } + + h6.md-focus:before { + content: 'h6'; + top: 0px; + } + } + + a { + text-decoration: none; + outline: 0; + } + + a:hover { + outline: 0; + } + + a:focus { + outline: thin dotted; + } + + sup.md-footnote { + background-color: #555; + color: #ddd; + } + + p { + -ms-word-wrap: break-word; + word-wrap: break-word; + } + + p, + ul, + dd, + ol, + hr, + address, + pre, + table, + iframe, + .wp-caption, + .wp-audio-shortcode, + .wp-video-shortcode { + margin-top: 0; + margin-bottom: 1.5rem; + /* 24px */ + } + + li > blockquote { + margin-bottom: 0; + } + + audio:not([controls]) { + display: none; + } + + [hidden] { + display: none; + } + + ::-moz-selection { + background: #4a89dc; + color: #fff; + text-shadow: none; + } + + *.in-text-selection, + ::selection { + background: #4a89dc; + color: #fff; + text-shadow: none; + } + + ul, + ol { + padding: 0 0 0 1.875rem; + /* 30px */ + } + + ul { + list-style: square; + } + + ol { + list-style: decimal; + } + + ul ul, + ol ol, + ul ol, + ol ul { + margin: 0; + } + + b, + th, + dt, + strong { + font-weight: bold; + } + + i, + em, + dfn, + cite { + font-style: italic; + } + + blockquote { + padding-left: 1.875rem; + margin: 0 0 1.875rem 1.875rem; + border-left: solid 2px #474d54; + padding-left: 30px; + margin-top: 35px; + } + + pre, + code, + kbd, + tt, + var { + background: rgba(0, 0, 0, 0.05); + font-size: 0.875rem; + font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; + } + + kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); + } + + pre.md-fences { + padding: 10px 10px 10px 30px; + margin-bottom: 20px; + background: #333; + } + + .CodeMirror-gutters { + background: #333; + border-right: 1px solid transparent; + } + + .enable-diagrams pre.md-fences[lang="sequence"] .code-tooltip, + .enable-diagrams pre.md-fences[lang="flow"] .code-tooltip, + .enable-diagrams pre.md-fences[lang="mermaid"] .code-tooltip { + bottom: -2.2em; + right: 4px; + } + + code, + kbd, + tt, + var { + padding: 2px 5px; + } + + table { + max-width: 100%; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + } + + th, + td { + padding: 5px 10px; + vertical-align: top; + } + + a { + -webkit-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; + } + + hr { + background: #474d54; + /* variable */ + } + + h1 { + margin-top: 2em; + } + + a { + color: #e0e0e0; + text-decoration: underline; + } + + a:hover { + color: #fff; + } + + .md-inline-math script { + color: #81b1db; + } + + b, + th, + dt, + strong { + color: #DEDEDE; + /* variable */ + } + + mark { + background: #D3D40E; + } + + blockquote { + color: #9DA2A6; + } + + table a { + color: #DEDEDE; + /* variable */ + } + + th, + td { + border: solid 1px #474d54; + /* variable */ + } + + .task-list { + padding-left: 0; + } + + .md-task-list-item { + padding-left: 1.25rem; + } + + .md-task-list-item > input { + top: auto; + } + + .md-task-list-item > input:before { + content: ""; + display: inline-block; + width: 0.875rem; + height: 0.875rem; + vertical-align: middle; + text-align: center; + border: 1px solid #b8bfc6; + background-color: #363B40; + margin-top: -0.4rem; + } + + .md-task-list-item > input:checked:before, + .md-task-list-item > input[checked]:before { + content: '\221A'; + /*◘*/ + font-size: 0.625rem; + line-height: 0.625rem; + color: #DEDEDE; + } + + /** quick open **/ + .auto-suggest-container { + border: 0px; + background-color: #525C65; + } + + #typora-quick-open { + background-color: #525C65; + } + + #typora-quick-open input{ + background-color: #525C65; + border: 0; + border-bottom: 1px solid grey; + } + + .typora-quick-open-item { + background-color: inherit; + color: inherit; + } + + .typora-quick-open-item.active, + .typora-quick-open-item:hover { + background-color: #4D8BDB; + color: white; + } + + .typora-quick-open-item:hover { + background-color: rgba(77, 139, 219, 0.8); + } + + .typora-search-spinner > div { + background-color: #fff; + } + + #write pre.md-meta-block { + border-bottom: 1px dashed #ccc; + background: transparent; + padding-bottom: 0.6em; + line-height: 1.6em; + } + + .btn, + .btn .btn-default { + background: transparent; + color: #b8bfc6; + } + + .ty-table-edit { + border-top: 1px solid gray; + background-color: #363B40; + } + + .popover-title { + background: transparent; + } + + .md-image>.md-meta { + color: #BBBBBB; + background: transparent; + } + + .md-expand.md-image>.md-meta { + color: #DDD; + } + + #write>h3:before, + #write>h4:before, + #write>h5:before, + #write>h6:before { + border: none; + border-radius: 0px; + color: #888; + text-decoration: underline; + left: -1.4rem; + top: 0.2rem; + } + + #write>h3.md-focus:before { + top: 2px; + } + + #write>h4.md-focus:before { + top: 2px; + } + + .md-toc-item { + color: #A8C2DC; + } + + #write div.md-toc-tooltip { + background-color: #363B40; + } + + .dropdown-menu .btn:hover, + .dropdown-menu .btn:focus, + .md-toc .btn:hover, + .md-toc .btn:focus { + color: white; + background: black; + } + + #toc-dropmenu { + background: rgba(50, 54, 59, 0.93); + border: 1px solid rgba(253, 253, 253, 0.15); + } + + #toc-dropmenu .divider { + background-color: #9b9b9b; + } + + .outline-expander:before { + top: 2px; + } + + #typora-sidebar { + box-shadow: none; + border-right: 1px dashed; + border-right: none; + } + + .sidebar-tabs { + border-bottom:0; + } + + #typora-sidebar:hover .outline-title-wrapper { + border-left: 1px dashed; + } + + .outline-title-wrapper .btn { + color: inherit; + } + + .outline-item:hover { + border-color: #363B40; + background-color: #363B40; + color: white; + } + + h1.md-focus .md-attr, + h2.md-focus .md-attr, + h3.md-focus .md-attr, + h4.md-focus .md-attr, + h5.md-focus .md-attr, + h6.md-focus .md-attr, + .md-header-span .md-attr { + color: #8C8E92; + display: inline; + } + + .md-comment { + color: #5a95e3; + opacity: 1; + } + + .md-inline-math svg { + color: #b8bfc6; + } + + #math-inline-preview .md-arrow:after { + background: black; + } + + .modal-content { + background: var(--bg-color); + border: 0; + } + + .modal-title { + font-size: 1.5em; + } + + .modal-content input { + background-color: rgba(26, 21, 21, 0.51); + color: white; + } + + .modal-content .input-group-addon { + color: white; + } + + .modal-backdrop { + background-color: rgba(174, 174, 174, 0.7); + } + + .modal-content .btn-primary { + border-color: var(--primary-color); + } + + .md-table-resize-popover { + background-color: #333; + } + + .form-inline .input-group .input-group-addon { + color: white; + } + + #md-searchpanel { + border-bottom: 1px dashed grey; + } + + /** UI for electron */ + + .context-menu, + #spell-check-panel, + #footer-word-count-info { + background-color: #42464A; + } + + .context-menu.dropdown-menu .divider, + .dropdown-menu .divider { + background-color: #777777; + } + + footer { + color: inherit; + } + + @media (max-width: 1000px) { + footer { + border-top: none; + } + footer:hover { + color: inherit; + } + } + + #file-info-file-path .file-info-field-value:hover { + background-color: #555; + color: #dedede; + } + + .megamenu-content, + .megamenu-opened header { + background: var(--bg-color); + } + + .megamenu-menu-panel h2, + .megamenu-menu-panel h1, + .long-btn { + color: inherit; + } + + .megamenu-menu-panel input[type='text'] { + background: inherit; + border: 0; + border-bottom: 1px solid; + } + + #recent-file-panel-action-btn { + background: inherit; + border: 1px grey solid; + } + + .megamenu-menu-panel .dropdown-menu > li > a { + color: inherit; + background-color: #2F353A; + text-decoration: none; + } + + .megamenu-menu-panel table td:nth-child(1) { + color: inherit; + font-weight: bold; + } + + .megamenu-menu-panel tbody tr:hover td:nth-child(1) { + color: white; + } + + .modal-footer .btn-default, + .modal-footer .btn-primary, + .modal-footer .btn-default:not(:hover) { + border: 1px solid; + border-color: transparent; + } + + .btn-default:hover, .btn-default:focus, .btn-default.focus, .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { + color: white; + border: 1px solid #ddd; + background-color: inherit; + } + + .modal-header { + border-bottom: 0; + } + + .modal-footer { + border-top: 0; + } + + #recent-file-panel tbody tr:nth-child(2n-1) { + background-color: transparent !important; + } + + .megamenu-menu-panel tbody tr:hover td:nth-child(2) { + color: inherit; + } + + .megamenu-menu-panel .btn { + border: 1px solid #eee; + background: transparent; + } + + .mouse-hover .toolbar-icon.btn:hover, + #w-full.mouse-hover, + #w-pin.mouse-hover { + background-color: inherit; + } + + .typora-node::-webkit-scrollbar { + width: 5px; + } + + .typora-node::-webkit-scrollbar-thumb:vertical { + background: rgba(250, 250, 250, 0.3); + } + + .typora-node::-webkit-scrollbar-thumb:vertical:active { + background: rgba(250, 250, 250, 0.5); + } + + #w-unpin { + background-color: #4182c4; + } + + #top-titlebar, #top-titlebar * { + color: var(--item-hover-text-color); + } + + .typora-sourceview-on #toggle-sourceview-btn, + #footer-word-count:hover, + .ty-show-word-count #footer-word-count { + background: #333333; + } + + #toggle-sourceview-btn:hover { + color: #eee; + background: #333333; + } + + /** focus mode */ + .on-focus-mode .md-end-block:not(.md-focus):not(.md-focus-container) * { + color: #686868 !important; + } + + .on-focus-mode .md-end-block:not(.md-focus) img, + .on-focus-mode .md-task-list-item:not(.md-focus-container)>input { + opacity: #686868 !important; + } + + .on-focus-mode li[cid]:not(.md-focus-container){ + color: #686868; + } + + .on-focus-mode .md-fences.md-focus .CodeMirror-code>*:not(.CodeMirror-activeline) *, + .on-focus-mode .CodeMirror.cm-s-inner:not(.CodeMirror-focused) * { + color: #686868 !important; + } + + .on-focus-mode .md-focus, + .on-focus-mode .md-focus-container { + color: #fff; + } + + .on-focus-mode #typora-source .CodeMirror-code>*:not(.CodeMirror-activeline) * { + color: #686868 !important; + } + + + /*diagrams*/ + #write .md-focus .md-diagram-panel { + border: 1px solid #ddd; + margin-left: -1px; + width: calc(100% + 2px); + } + + /*diagrams*/ + #write .md-focus.md-fences-with-lineno .md-diagram-panel { + margin-left: auto; + } + + .md-diagram-panel-error { + color: #f1908e; + } + + .active-tab-files #info-panel-tab-file, + .active-tab-files #info-panel-tab-file:hover, + .active-tab-outline #info-panel-tab-outline, + .active-tab-outline #info-panel-tab-outline:hover { + color: #eee; + } + + .sidebar-footer-item:hover, + .footer-item:hover { + background: inherit; + color: white; + } + + .ty-side-sort-btn.active, + .ty-side-sort-btn:hover, + .selected-folder-menu-item a:after { + color: white; + } + + #sidebar-files-menu { + border:solid 1px; + box-shadow: 4px 4px 20px rgba(0, 0, 0, 0.79); + background-color: var(--bg-color); + } + + .file-list-item { + border-bottom:none; + } + + .file-list-item-summary { + opacity: 1; + } + + .file-list-item.active:first-child { + border-top: none; + } + + .file-node-background { + height: 32px; + } + + .file-library-node.active>.file-node-content, + .file-list-item.active { + color: white; + color: var(--active-file-text-color); + } + + .file-library-node.active>.file-node-background{ + background-color: rgb(34, 34, 34); + background-color: var(--active-file-bg-color); + } + .file-list-item.active { + background-color: rgb(34, 34, 34); + background-color: var(--active-file-bg-color); + } + + #ty-tooltip { + background-color: black; + color: #eee; + } + + .md-task-list-item>input { + margin-left: -1.3em; + margin-top: 0.3rem; + -webkit-appearance: none; + } + + .md-mathjax-midline { + background-color: #57616b; + border-bottom: none; + } + + footer.ty-footer { + border-color: #656565; + } + + .ty-preferences .btn-default { + background: transparent; + } + .ty-preferences .btn-default:hover { + background: #57616b; + } + + .ty-preferences select { + border: 1px solid #989698; + height: 21px; + } + + .ty-preferences .nav-group-item.active { + background: var(--item-hover-bg-color); + } + + .ty-preferences input[type="search"] { + border-color: #333; + background: #333; + line-height: 22px; + border-radius: 6px; + color: white; + } + + .ty-preferences input[type="search"]:focus { + box-shadow: none; + } + + [data-is-directory="true"] .file-node-content { + margin-bottom: 0; + } + + .file-node-title { + line-height: 22px; + } + + .html-for-mac .file-node-open-state, .html-for-mac .file-node-icon { + line-height: 26px; + } + + ::-webkit-scrollbar-thumb { + background: rgba(230, 230, 230, 0.30); + } + + ::-webkit-scrollbar-thumb:active { + background: rgba(230, 230, 230, 0.50); + } + + #typora-sidebar:hover div.sidebar-content-content::-webkit-scrollbar-thumb:horizontal { + background: rgba(230, 230, 230, 0.30); + } + + .nav-group-item:active { + background-color: #474d54; + } + + .md-search-hit { + background: rgba(199, 140, 60, 0.81); + color: #eee; + } + + .md-search-hit * { + color: #eee; + } + + #md-searchpanel input { + color: white; + } + + + + + +

Practicas para realizar en el cluster de Raspberry Pi

1- Basic Trafic Engineering

El objetivo de esta practica es entender el concepto de las redes definidas por software y sus ventajas, asi como mostrar como el controlador SDN puede decirle a los OVS que se comporten de una manera u otra, enviando el trafico deseado de un sitio a otro.

-Creacion de topologia

Para empezar, vamos a crear una topologia de 3 switches y 3 hosts, conectados como se muestra en la siguiente figura. Posteriormente vamos a iniciar el controlador con la aplicacion Switching.

 

Observe y asegurese que los flowtable de los switches estan por defecto. Una vez visto esto, el objetivo es simplemente obtener conectividad entre h1 y h2, modificando estos flow entry mediante una API REST haciendo peticiones al controlador SDN.

- Configuracion de los OVS mediante peticiones al controlador SDN

Para esto, nos dirijimos a la consola de la Raspberry principal (rpi1) y en la carpeta scripts ejecutamos el codigo basicflow.sh, el cual se tiene una muestra mas abajo, y no es mas que realizar POST al controlador con los parametros que deseamos configurar. En esta peticion se envia el DPID del switch deseado, y los respectivos campos de OpenFlow, tales como el match y los actions.

Notese que la idea es limpiar todo lo que tenga el switch en ese momento, y decirle basicamente "Todo el trafico recivido por el puerto 1 sacalo por el puerto 2". Siguiendo esta logica, se crea un camino por el cual fluye el trafico, en nuestro ejemplo, conectividad entre h1 y h2.

Una vez ejecutado, compruebe que se actualizaron los flows de los switches 1 y 2, ademas de que existe conectividad entre h1 y h2 haciendo ping.

Compruebe que no existe conectividad entre h1 y h3, debido a que no existe ninguna ruta especificada.

2- Enrutamiento estatico con API REST

El objetivo de esta practica consiste en crear una topologia serial de 3 switches y 3 host, como se muestra en la siguiente imagen. Asi, solo se debe tener conectividad entre todas las redes de h1,h2 y h3.

Para esto, mediante la pagina web cree la topologia, inicie el controlador con la aplicacion REST Router , confirme que en el controlador se muestra que los switches fueron reconocidos y proceda a configurar las direcciones IP de los hosts.

-Configuracion de direcciones IP a los hosts virtuales

Para configurar estas direcciones IP, utilice los comandos h[x] ip addr del 10.0.0.[x]/8 dev h[x]-eth0 para eliminar la IP por defecto, siendo [x] el host deseado, y asimismo con el comando ip addr add configure las demas direcciones. Asi mismo, configure los gateway necesarios con el comando ip route add default via [direccion_ip_gateway].

Entendemos que este proceso puede ser algo tedioso, por lo cual hemos creado un script, el cual se encuentra en la carpeta scripts de la Raspberry principal. Para ejecutarlo, simplemente ejecutelo con ./hostadress.sh.

Compruebe mediante la web que se realizaron las configuraciones con el comando h[x] ifconfig h[x]-eth0

-Programar el controlador para que los switches conozcan las redes

Par este paso, necesita hacer uso del API REST de la aplicacion de RYU.

Entendemos que esto puede ser un poco tedioso, por lo cual hemos creado un script que se encuentra en la carpeta scripts que realiza estas configuraciones de manera automatica, solo ejecutandolo con ./routerflows.sh. Mas abajo se muestra un fragmento del script, para que se entienda que es lo que esta ocurriendo.

Una vez ejecutado, mediante la pagina web, compruebe que cada switch tiene seteado sus flow entrys correctamente en el apartado flow tables.

Compruebe que existe conectividad entre h1 y h2 ejecutando el comando h1 ping -c 4 h2. Para ver el camino recorrido, ejecute h1 traceroute h2.

Si desea eliminar todos los flowentry de los switches, y simplemente dejarlos con su flow por defecto, en la pagina web presione el boton Reset flows del apartado Flow Tables.

3- Creando un micro web server

El objetivo de esta practica es la de comprobar conectividad entre dos host virtuales, por ejemplo h1 y h2, ejecutando un servicio web.

Preparando archivos

Para poder hacer una pequna web que podamos navegar vamos a hacer lo siguiente: + Necesitamos crear un archivo, el cual sera un script en bash con lo que deseamos ver en el cliente. Para crear esto en un host especifico, escribimos h[x] echo "[pegar texto de abajo]" > test.sh , donde x es el id del host deseado.

Iniciando el servidor

En el host que funcionara como servidor corremos el comando h[x] while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; sh test.sh; } | nc -l 1234 -q 1; done &, donde x es el id del host deseado.

Accediendo al servidor

En cualquier otro host que tenga conectividad con el server solo tienes que realizar h[x] curl -X GET http://_ipdelserver_:124 , siendo x el id de cualquier host. Asi podras ver tu web servida + En caso de acceder desde una consola se puede instalar el software w3m y con este navegador par aconsola acceder a la web.

+