From 0ceaa30ce84e5a7ac7b1740c5752cc30b441ec65 Mon Sep 17 00:00:00 2001 From: peusterm Date: Wed, 6 Sep 2017 17:26:46 +0200 Subject: [PATCH] Removed GitHub page folder. We skip this. Signed-off-by: peusterm --- docs/Gemfile | 3 - docs/Gemfile.lock | 60 -- docs/README.md | 5 - docs/_config.yml | 5 - docs/_layouts/default.html | 57 -- docs/_sass/jekyll-theme-cayman.scss | 345 ----------- docs/_sass/normalize.scss | 424 ------------- docs/_sass/rouge-github.scss | 209 ------- docs/_sass/variables.scss | 23 - docs/_site/CODE_OF_CONDUCT.md | 74 --- docs/_site/CONTRIBUTING.md | 33 - docs/_site/LICENSE | 116 ---- docs/_site/README.md | 5 - docs/_site/another-page.html | 70 --- docs/_site/assets/css/style.css | 809 ------------------------- docs/_site/index.html | 218 ------- docs/_site/index.md.bak | 184 ------ docs/_site/jekyll-theme-cayman.gemspec | 19 - docs/_site/script/bootstrap | 6 - docs/_site/script/cibuild | 6 - docs/_site/script/release | 42 -- docs/_site/script/server | 3 - docs/_site/thumbnail.png | Bin 31970 -> 0 bytes docs/another-page.md | 9 - docs/assets/css/style.scss | 4 - docs/index.md | 145 ----- docs/jekyll-theme-cayman.gemspec | 19 - docs/script/bootstrap | 6 - docs/script/cibuild | 6 - docs/script/release | 42 -- docs/script/server | 3 - 31 files changed, 2950 deletions(-) delete mode 100644 docs/Gemfile delete mode 100644 docs/Gemfile.lock delete mode 100644 docs/README.md delete mode 100644 docs/_config.yml delete mode 100644 docs/_layouts/default.html delete mode 100644 docs/_sass/jekyll-theme-cayman.scss delete mode 100644 docs/_sass/normalize.scss delete mode 100644 docs/_sass/rouge-github.scss delete mode 100644 docs/_sass/variables.scss delete mode 100644 docs/_site/CODE_OF_CONDUCT.md delete mode 100644 docs/_site/CONTRIBUTING.md delete mode 100644 docs/_site/LICENSE delete mode 100644 docs/_site/README.md delete mode 100644 docs/_site/another-page.html delete mode 100644 docs/_site/assets/css/style.css delete mode 100644 docs/_site/index.html delete mode 100644 docs/_site/index.md.bak delete mode 100644 docs/_site/jekyll-theme-cayman.gemspec delete mode 100755 docs/_site/script/bootstrap delete mode 100755 docs/_site/script/cibuild delete mode 100755 docs/_site/script/release delete mode 100755 docs/_site/script/server delete mode 100644 docs/_site/thumbnail.png delete mode 100644 docs/another-page.md delete mode 100644 docs/assets/css/style.scss delete mode 100644 docs/index.md delete mode 100644 docs/jekyll-theme-cayman.gemspec delete mode 100755 docs/script/bootstrap delete mode 100755 docs/script/cibuild delete mode 100755 docs/script/release delete mode 100755 docs/script/server diff --git a/docs/Gemfile b/docs/Gemfile deleted file mode 100644 index fa75df1..0000000 --- a/docs/Gemfile +++ /dev/null @@ -1,3 +0,0 @@ -source 'https://rubygems.org' - -gemspec diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock deleted file mode 100644 index 03414cb..0000000 --- a/docs/Gemfile.lock +++ /dev/null @@ -1,60 +0,0 @@ -PATH - remote: . - specs: - jekyll-theme-cayman (0.1.0) - jekyll (~> 3.5) - jekyll-seo-tag (~> 2.0) - -GEM - remote: https://rubygems.org/ - specs: - addressable (2.5.2) - public_suffix (>= 2.0.2, < 4.0) - colorator (1.1.0) - ffi (1.9.18) - forwardable-extended (2.6.0) - jekyll (3.5.2) - addressable (~> 2.4) - colorator (~> 1.0) - jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 1.1) - kramdown (~> 1.3) - liquid (~> 4.0) - mercenary (~> 0.3.3) - pathutil (~> 0.9) - rouge (~> 1.7) - safe_yaml (~> 1.0) - jekyll-sass-converter (1.5.0) - sass (~> 3.4) - jekyll-seo-tag (2.3.0) - jekyll (~> 3.3) - jekyll-watch (1.5.0) - listen (~> 3.0, < 3.1) - kramdown (1.14.0) - liquid (4.0.0) - listen (3.0.8) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - mercenary (0.3.6) - pathutil (0.14.0) - forwardable-extended (~> 2.6) - public_suffix (3.0.0) - rb-fsevent (0.10.2) - rb-inotify (0.9.10) - ffi (>= 0.5.0, < 2) - rouge (1.11.1) - safe_yaml (1.0.4) - sass (3.5.1) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - -PLATFORMS - ruby - -DEPENDENCIES - jekyll-theme-cayman! - -BUNDLED WITH - 1.15.4 diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 3de37a2..0000000 --- a/docs/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Son-emu Website - -Based on: [GitHub Pages Cayman Theme](https://github.com/pages-themes/cayman). - -Serve locally: `bundle exec jekyll serve` diff --git a/docs/_config.yml b/docs/_config.yml deleted file mode 100644 index a94be72..0000000 --- a/docs/_config.yml +++ /dev/null @@ -1,5 +0,0 @@ -title: son-emu -description: SONATA's multi-PoP NFV infrastructure emulation platform. -show_downloads: true -google_analytics: -theme: jekyll-theme-cayman diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html deleted file mode 100644 index 29b8672..0000000 --- a/docs/_layouts/default.html +++ /dev/null @@ -1,57 +0,0 @@ - - - - - -{% seo %} - - - - - - - - - -
- {{ content }} - - -
- - {% if site.google_analytics %} - - {% endif %} - - diff --git a/docs/_sass/jekyll-theme-cayman.scss b/docs/_sass/jekyll-theme-cayman.scss deleted file mode 100644 index 8f29bdd..0000000 --- a/docs/_sass/jekyll-theme-cayman.scss +++ /dev/null @@ -1,345 +0,0 @@ -@import "normalize"; -@import "rouge-github"; -@import "variables"; - -@mixin large { - @media screen and (min-width: #{$large-breakpoint}) { - @content; - } -} - -@mixin medium { - @media screen and (min-width: #{$medium-breakpoint}) and (max-width: #{$large-breakpoint}) { - @content; - } -} - -@mixin small { - @media screen and (max-width: #{$medium-breakpoint}) { - @content; - } -} - -* { - box-sizing: border-box; -} - -body { - padding: 0; - margin: 0; - font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 16px; - line-height: 1.5; - color: $body-text-color; -} - -a { - color: $body-link-color; - text-decoration: none; - - &:hover { - text-decoration: underline; - } -} - -.btn { - display: inline-block; - margin-bottom: 1rem; - color: rgba(255, 255, 255, 0.7); - background-color: rgba(255, 255, 255, 0.08); - border-color: rgba(255, 255, 255, 0.2); - border-style: solid; - border-width: 1px; - border-radius: 0.3rem; - transition: color 0.2s, background-color 0.2s, border-color 0.2s; - - &:hover { - color: rgba(255, 255, 255, 0.8); - text-decoration: none; - background-color: rgba(255, 255, 255, 0.2); - border-color: rgba(255, 255, 255, 0.3); - } - - + .btn { - margin-left: 1rem; - } - - @include large { - padding: 0.75rem 1rem; - } - - @include medium { - padding: 0.6rem 0.9rem; - font-size: 0.9rem; - } - - @include small { - display: block; - width: 100%; - padding: 0.75rem; - font-size: 0.9rem; - - + .btn { - margin-top: 1rem; - margin-left: 0; - } - } -} - -.page-header { - color: $header-heading-color; - text-align: center; - background-color: $header-bg-color; - background-image: linear-gradient(120deg, $header-bg-color-secondary, $header-bg-color); - - @include large { - padding: 5rem 6rem; - } - - @include medium { - padding: 3rem 4rem; - } - - @include small { - padding: 2rem 1rem; - } -} - -.project-name { - margin-top: 0; - margin-bottom: 0.1rem; - - @include large { - font-size: 3.25rem; - } - - @include medium { - font-size: 2.25rem; - } - - @include small { - font-size: 1.75rem; - } -} - -.project-tagline { - margin-bottom: 2rem; - font-weight: normal; - opacity: 0.7; - - @include large { - font-size: 1.25rem; - } - - @include medium { - font-size: 1.15rem; - } - - @include small { - font-size: 1rem; - } -} - -.main-content { - word-wrap: break-word; - - :first-child { - margin-top: 0; - } - - @include large { - max-width: 64rem; - padding: 2rem 6rem; - margin: 0 auto; - font-size: 1.1rem; - } - - @include medium { - padding: 2rem 4rem; - font-size: 1.1rem; - } - - @include small { - padding: 2rem 1rem; - font-size: 1rem; - } - - img { - max-width: 100%; - } - - h1, - h2, - h3, - h4, - h5, - h6 { - margin-top: 2rem; - margin-bottom: 1rem; - font-weight: normal; - color: $section-headings-color; - } - - p { - margin-bottom: 1em; - } - - code { - padding: 2px 4px; - font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 0.9rem; - color: $code-text-color; - background-color: $code-bg-color; - border-radius: 0.3rem; - } - - pre { - padding: 0.8rem; - margin-top: 0; - margin-bottom: 1rem; - font: 1rem Consolas, "Liberation Mono", Menlo, Courier, monospace; - color: $code-text-color; - word-wrap: normal; - background-color: $code-bg-color; - border: solid 1px $border-color; - border-radius: 0.3rem; - - > code { - padding: 0; - margin: 0; - font-size: 0.9rem; - color: $code-text-color; - word-break: normal; - white-space: pre; - background: transparent; - border: 0; - } - } - - .highlight { - margin-bottom: 1rem; - - pre { - margin-bottom: 0; - word-break: normal; - } - } - - .highlight pre, - pre { - padding: 0.8rem; - overflow: auto; - font-size: 0.9rem; - line-height: 1.45; - border-radius: 0.3rem; - -webkit-overflow-scrolling: touch; - } - - pre code, - pre tt { - display: inline; - max-width: initial; - padding: 0; - margin: 0; - overflow: initial; - line-height: inherit; - word-wrap: normal; - background-color: transparent; - border: 0; - - &:before, - &:after { - content: normal; - } - } - - ul, - ol { - margin-top: 0; - } - - blockquote { - padding: 0 1rem; - margin-left: 0; - color: $blockquote-text-color; - border-left: 0.3rem solid $border-color; - - > :first-child { - margin-top: 0; - } - - > :last-child { - margin-bottom: 0; - } - } - - table { - display: block; - width: 100%; - overflow: auto; - word-break: normal; - word-break: keep-all; // For Firefox to horizontally scroll wider tables. - -webkit-overflow-scrolling: touch; - - th { - font-weight: bold; - } - - th, - td { - padding: 0.5rem 1rem; - border: 1px solid $table-border-color; - } - } - - dl { - padding: 0; - - dt { - padding: 0; - margin-top: 1rem; - font-size: 1rem; - font-weight: bold; - } - - dd { - padding: 0; - margin-bottom: 1rem; - } - } - - hr { - height: 2px; - padding: 0; - margin: 1rem 0; - background-color: $hr-border-color; - border: 0; - } -} - -.site-footer { - padding-top: 2rem; - margin-top: 2rem; - border-top: solid 1px $hr-border-color; - - @include large { - font-size: 1rem; - } - - @include medium { - font-size: 1rem; - } - - @include small { - font-size: 0.9rem; - } -} - -.site-footer-owner { - display: block; - font-weight: bold; -} - -.site-footer-credits { - color: $blockquote-text-color; -} diff --git a/docs/_sass/normalize.scss b/docs/_sass/normalize.scss deleted file mode 100644 index 30366a6..0000000 --- a/docs/_sass/normalize.scss +++ /dev/null @@ -1,424 +0,0 @@ -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ - -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - */ - -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/** - * Remove default margin. - */ - -body { - margin: 0; -} - -/* HTML5 display definitions - ========================================================================== */ - -/** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} - -/** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. - */ - -audio, -canvas, -progress, -video { - display: inline-block; /* 1 */ - vertical-align: baseline; /* 2 */ -} - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. - */ - -[hidden], -template { - display: none; -} - -/* Links - ========================================================================== */ - -/** - * Remove the gray background color from active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ - -a:active, -a:hover { - outline: 0; -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -/** - * Address styling not present in Safari and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/** - * Address styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -/** - * Address inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove border when inside `a` element in IE 8/9/10. - */ - -img { - border: 0; -} - -/** - * Correct overflow not hidden in IE 9/10/11. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* Grouping content - ========================================================================== */ - -/** - * Address margin not present in IE 8/9 and Safari. - */ - -figure { - margin: 1em 40px; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - box-sizing: content-box; - height: 0; -} - -/** - * Contain overflow in all browsers. - */ - -pre { - overflow: auto; -} - -/** - * Address odd `em`-unit font size rendering in all browsers. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -/* Forms - ========================================================================== */ - -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ - -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. - */ - -button, -input, -optgroup, -select, -textarea { - color: inherit; /* 1 */ - font: inherit; /* 2 */ - margin: 0; /* 3 */ -} - -/** - * Address `overflow` set to `hidden` in IE 8/9/10/11. - */ - -button { - overflow: visible; -} - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. - */ - -button, -select { - text-transform: none; -} - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ -} - -/** - * Re-set default cursor for disabled elements. - */ - -button[disabled], -html input[disabled] { - cursor: default; -} - -/** - * Remove inner padding and border in Firefox 4+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -input { - line-height: normal; -} - -/** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. - */ - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). - */ - -input[type="search"] { - -webkit-appearance: textfield; /* 1 */ /* 2 */ - box-sizing: content-box; -} - -/** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). - */ - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Remove default vertical scrollbar in IE 8/9/10/11. - */ - -textarea { - overflow: auto; -} - -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. - */ - -optgroup { - font-weight: bold; -} - -/* Tables - ========================================================================== */ - -/** - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} diff --git a/docs/_sass/rouge-github.scss b/docs/_sass/rouge-github.scss deleted file mode 100644 index daf76ad..0000000 --- a/docs/_sass/rouge-github.scss +++ /dev/null @@ -1,209 +0,0 @@ -.highlight table td { padding: 5px; } -.highlight table pre { margin: 0; } -.highlight .cm { - color: #999988; - font-style: italic; -} -.highlight .cp { - color: #999999; - font-weight: bold; -} -.highlight .c1 { - color: #999988; - font-style: italic; -} -.highlight .cs { - color: #999999; - font-weight: bold; - font-style: italic; -} -.highlight .c, .highlight .cd { - color: #999988; - font-style: italic; -} -.highlight .err { - color: #a61717; - background-color: #e3d2d2; -} -.highlight .gd { - color: #000000; - background-color: #ffdddd; -} -.highlight .ge { - color: #000000; - font-style: italic; -} -.highlight .gr { - color: #aa0000; -} -.highlight .gh { - color: #999999; -} -.highlight .gi { - color: #000000; - background-color: #ddffdd; -} -.highlight .go { - color: #888888; -} -.highlight .gp { - color: #555555; -} -.highlight .gs { - font-weight: bold; -} -.highlight .gu { - color: #aaaaaa; -} -.highlight .gt { - color: #aa0000; -} -.highlight .kc { - color: #000000; - font-weight: bold; -} -.highlight .kd { - color: #000000; - font-weight: bold; -} -.highlight .kn { - color: #000000; - font-weight: bold; -} -.highlight .kp { - color: #000000; - font-weight: bold; -} -.highlight .kr { - color: #000000; - font-weight: bold; -} -.highlight .kt { - color: #445588; - font-weight: bold; -} -.highlight .k, .highlight .kv { - color: #000000; - font-weight: bold; -} -.highlight .mf { - color: #009999; -} -.highlight .mh { - color: #009999; -} -.highlight .il { - color: #009999; -} -.highlight .mi { - color: #009999; -} -.highlight .mo { - color: #009999; -} -.highlight .m, .highlight .mb, .highlight .mx { - color: #009999; -} -.highlight .sb { - color: #d14; -} -.highlight .sc { - color: #d14; -} -.highlight .sd { - color: #d14; -} -.highlight .s2 { - color: #d14; -} -.highlight .se { - color: #d14; -} -.highlight .sh { - color: #d14; -} -.highlight .si { - color: #d14; -} -.highlight .sx { - color: #d14; -} -.highlight .sr { - color: #009926; -} -.highlight .s1 { - color: #d14; -} -.highlight .ss { - color: #990073; -} -.highlight .s { - color: #d14; -} -.highlight .na { - color: #008080; -} -.highlight .bp { - color: #999999; -} -.highlight .nb { - color: #0086B3; -} -.highlight .nc { - color: #445588; - font-weight: bold; -} -.highlight .no { - color: #008080; -} -.highlight .nd { - color: #3c5d5d; - font-weight: bold; -} -.highlight .ni { - color: #800080; -} -.highlight .ne { - color: #990000; - font-weight: bold; -} -.highlight .nf { - color: #990000; - font-weight: bold; -} -.highlight .nl { - color: #990000; - font-weight: bold; -} -.highlight .nn { - color: #555555; -} -.highlight .nt { - color: #000080; -} -.highlight .vc { - color: #008080; -} -.highlight .vg { - color: #008080; -} -.highlight .vi { - color: #008080; -} -.highlight .nv { - color: #008080; -} -.highlight .ow { - color: #000000; - font-weight: bold; -} -.highlight .o { - color: #000000; - font-weight: bold; -} -.highlight .w { - color: #bbbbbb; -} -.highlight { - background-color: #f8f8f8; -} diff --git a/docs/_sass/variables.scss b/docs/_sass/variables.scss deleted file mode 100644 index bf56450..0000000 --- a/docs/_sass/variables.scss +++ /dev/null @@ -1,23 +0,0 @@ -// Breakpoints -$large-breakpoint: 64em !default; -$medium-breakpoint: 42em !default; - -// Headers -$header-heading-color: #fff !default; -$header-bg-color: #159957 !default; -$header-bg-color-secondary: #155799 !default; - -// Text -$section-headings-color: #159957 !default; -$body-text-color: #606c71 !default; -$body-link-color: #1e6bb8 !default; -$blockquote-text-color: #819198 !default; - -// Code -$code-bg-color: #f3f6fa !default; -$code-text-color: #567482 !default; - -// Borders -$border-color: #dce6f0 !default; -$table-border-color: #e9ebec !default; -$hr-border-color: #eff0f1 !default; diff --git a/docs/_site/CODE_OF_CONDUCT.md b/docs/_site/CODE_OF_CONDUCT.md deleted file mode 100644 index 2a6dc65..0000000 --- a/docs/_site/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,74 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level of experience, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or -advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at https://github.com/contact/report-abuse. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/docs/_site/CONTRIBUTING.md b/docs/_site/CONTRIBUTING.md deleted file mode 100644 index c025ff3..0000000 --- a/docs/_site/CONTRIBUTING.md +++ /dev/null @@ -1,33 +0,0 @@ -## Contributing - -Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. - -Please note that this project is released with a [Contributor Code of Conduct][code-of-conduct]. By participating in this project you agree to abide by its terms. - -## Submitting a pull request - -0. [Fork][fork] and clone the repository -0. Configure and install the dependencies: `script/bootstrap` -0. Make sure the tests pass on your machine: `script/cibuild` -0. Create a new branch: `git checkout -b my-branch-name` -0. Make your change, add tests, and make sure the tests still pass -0. Push to your fork and [submit a pull request][pr] -0. Pat your self on the back and wait for your pull request to be reviewed and merged. - -Here are a few things you can do that will increase the likelihood of your pull request being accepted: - -- If you are making visual changes, include a screenshot of what the affected element looks like, both before and after. -- Follow the [style guide][style]. -- Keep your change as focused as possible. If there are multiple changes you would like to make that are not dependent upon each other, consider submitting them as separate pull requests. -- Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). - -## Resources - -- [Contributing to Open Source on GitHub](https://guides.github.com/activities/contributing-to-open-source/) -- [Using Pull Requests](https://help.github.com/articles/using-pull-requests/) -- [GitHub Help](https://help.github.com) - -[fork]: https://github.com/pages-themes/cayman/fork -[pr]: https://github.com/pages-themes/cayman/compare -[style]: http://ben.balter.com/jekyll-style-guide/ -[code-of-conduct]: CODE_OF_CONDUCT.md diff --git a/docs/_site/LICENSE b/docs/_site/LICENSE deleted file mode 100644 index 670154e..0000000 --- a/docs/_site/LICENSE +++ /dev/null @@ -1,116 +0,0 @@ -CC0 1.0 Universal - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator and -subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for the -purpose of contributing to a commons of creative, cultural and scientific -works ("Commons") that the public can reliably and without fear of later -claims of infringement build upon, modify, incorporate in other works, reuse -and redistribute as freely as possible in any form whatsoever and for any -purposes, including without limitation commercial purposes. These owners may -contribute to the Commons to promote the ideal of a free culture and the -further production of creative, cultural and scientific works, or to gain -reputation or greater distribution for their Work in part through the use and -efforts of others. - -For these and/or other purposes and motivations, and without any expectation -of additional consideration or compensation, the person associating CC0 with a -Work (the "Affirmer"), to the extent that he or she is an owner of Copyright -and Related Rights in the Work, voluntarily elects to apply CC0 to the Work -and publicly distribute the Work under its terms, with knowledge of his or her -Copyright and Related Rights in the Work and the meaning and intended legal -effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not limited -to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, communicate, - and translate a Work; - - ii. moral rights retained by the original author(s) and/or performer(s); - - iii. publicity and privacy rights pertaining to a person's image or likeness - depicted in a Work; - - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - - v. rights protecting the extraction, dissemination, use and reuse of data in - a Work; - - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation thereof, - including any amended or successor version of such directive); and - - vii. other similar, equivalent or corresponding rights throughout the world - based on applicable law or treaty, and any national implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention of, -applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and -unconditionally waives, abandons, and surrenders all of Affirmer's Copyright -and Related Rights and associated claims and causes of action, whether now -known or unknown (including existing as well as future claims and causes of -action), in the Work (i) in all territories worldwide, (ii) for the maximum -duration provided by applicable law or treaty (including future time -extensions), (iii) in any current or future medium and for any number of -copies, and (iv) for any purpose whatsoever, including without limitation -commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes -the Waiver for the benefit of each member of the public at large and to the -detriment of Affirmer's heirs and successors, fully intending that such Waiver -shall not be subject to revocation, rescission, cancellation, termination, or -any other legal or equitable action to disrupt the quiet enjoyment of the Work -by the public as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason be -judged legally invalid or ineffective under applicable law, then the Waiver -shall be preserved to the maximum extent permitted taking into account -Affirmer's express Statement of Purpose. In addition, to the extent the Waiver -is so judged Affirmer hereby grants to each affected person a royalty-free, -non transferable, non sublicensable, non exclusive, irrevocable and -unconditional license to exercise Affirmer's Copyright and Related Rights in -the Work (i) in all territories worldwide, (ii) for the maximum duration -provided by applicable law or treaty (including future time extensions), (iii) -in any current or future medium and for any number of copies, and (iv) for any -purpose whatsoever, including without limitation commercial, advertising or -promotional purposes (the "License"). The License shall be deemed effective as -of the date CC0 was applied by Affirmer to the Work. Should any part of the -License for any reason be judged legally invalid or ineffective under -applicable law, such partial invalidity or ineffectiveness shall not -invalidate the remainder of the License, and in such case Affirmer hereby -affirms that he or she will not (i) exercise any of his or her remaining -Copyright and Related Rights in the Work or (ii) assert any associated claims -and causes of action with respect to the Work, in either case contrary to -Affirmer's express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - - b. Affirmer offers the Work as-is and makes no representations or warranties - of any kind concerning the Work, express, implied, statutory or otherwise, - including without limitation warranties of title, merchantability, fitness - for a particular purpose, non infringement, or the absence of latent or - other defects, accuracy, or the present or absence of errors, whether or not - discoverable, all to the greatest extent permissible under applicable law. - - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without limitation - any person's Copyright and Related Rights in the Work. Further, Affirmer - disclaims responsibility for obtaining any necessary consents, permissions - or other rights required for any use of the Work. - - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to this - CC0 or use of the Work. - -For more information, please see - diff --git a/docs/_site/README.md b/docs/_site/README.md deleted file mode 100644 index ce9f164..0000000 --- a/docs/_site/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Containernet Website - -Based on: [GitHub Pages Cayman Theme](https://github.com/pages-themes/cayman). - -Serve locally: `bundle exec jekyll serve` diff --git a/docs/_site/another-page.html b/docs/_site/another-page.html deleted file mode 100644 index c1228dc..0000000 --- a/docs/_site/another-page.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - -Containernet | Use Docker containers as hosts in Mininet emulations. - - - - - - - - - - - - - - - - - - - -
-

Welcome to another page

- -

yay

- -

back

- - - -
- - - - - - diff --git a/docs/_site/assets/css/style.css b/docs/_site/assets/css/style.css deleted file mode 100644 index c934b6a..0000000 --- a/docs/_site/assets/css/style.css +++ /dev/null @@ -1,809 +0,0 @@ -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - */ -html { - font-family: sans-serif; - /* 1 */ - -ms-text-size-adjust: 100%; - /* 2 */ - -webkit-text-size-adjust: 100%; - /* 2 */ } - -/** - * Remove default margin. - */ -body { - margin: 0; } - -/* HTML5 display definitions - ========================================================================== */ -/** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; } - -/** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. - */ -audio, -canvas, -progress, -video { - display: inline-block; - /* 1 */ - vertical-align: baseline; - /* 2 */ } - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ -audio:not([controls]) { - display: none; - height: 0; } - -/** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. - */ -[hidden], -template { - display: none; } - -/* Links - ========================================================================== */ -/** - * Remove the gray background color from active links in IE 10. - */ -a { - background-color: transparent; } - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ -a:active, -a:hover { - outline: 0; } - -/* Text-level semantics - ========================================================================== */ -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. - */ -abbr[title] { - border-bottom: 1px dotted; } - -/** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. - */ -b, -strong { - font-weight: bold; } - -/** - * Address styling not present in Safari and Chrome. - */ -dfn { - font-style: italic; } - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ -h1 { - font-size: 2em; - margin: 0.67em 0; } - -/** - * Address styling not present in IE 8/9. - */ -mark { - background: #ff0; - color: #000; } - -/** - * Address inconsistent and variable font size in all browsers. - */ -small { - font-size: 80%; } - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; } - -sup { - top: -0.5em; } - -sub { - bottom: -0.25em; } - -/* Embedded content - ========================================================================== */ -/** - * Remove border when inside `a` element in IE 8/9/10. - */ -img { - border: 0; } - -/** - * Correct overflow not hidden in IE 9/10/11. - */ -svg:not(:root) { - overflow: hidden; } - -/* Grouping content - ========================================================================== */ -/** - * Address margin not present in IE 8/9 and Safari. - */ -figure { - margin: 1em 40px; } - -/** - * Address differences between Firefox and other browsers. - */ -hr { - box-sizing: content-box; - height: 0; } - -/** - * Contain overflow in all browsers. - */ -pre { - overflow: auto; } - -/** - * Address odd `em`-unit font size rendering in all browsers. - */ -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; } - -/* Forms - ========================================================================== */ -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. - */ -button, -input, -optgroup, -select, -textarea { - color: inherit; - /* 1 */ - font: inherit; - /* 2 */ - margin: 0; - /* 3 */ } - -/** - * Address `overflow` set to `hidden` in IE 8/9/10/11. - */ -button { - overflow: visible; } - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. - */ -button, -select { - text-transform: none; } - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - /* 2 */ - cursor: pointer; - /* 3 */ } - -/** - * Re-set default cursor for disabled elements. - */ -button[disabled], -html input[disabled] { - cursor: default; } - -/** - * Remove inner padding and border in Firefox 4+. - */ -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; } - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ -input { - line-height: normal; } - -/** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - /* 1 */ - padding: 0; - /* 2 */ } - -/** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. - */ -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; } - -/** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). - */ -input[type="search"] { - -webkit-appearance: textfield; - /* 1 */ - /* 2 */ - box-sizing: content-box; } - -/** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). - */ -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; } - -/** - * Define consistent border, margin, and padding. - */ -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; } - -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ -legend { - border: 0; - /* 1 */ - padding: 0; - /* 2 */ } - -/** - * Remove default vertical scrollbar in IE 8/9/10/11. - */ -textarea { - overflow: auto; } - -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. - */ -optgroup { - font-weight: bold; } - -/* Tables - ========================================================================== */ -/** - * Remove most spacing between table cells. - */ -table { - border-collapse: collapse; - border-spacing: 0; } - -td, -th { - padding: 0; } - -.highlight table td { - padding: 5px; } - -.highlight table pre { - margin: 0; } - -.highlight .cm { - color: #999988; - font-style: italic; } - -.highlight .cp { - color: #999999; - font-weight: bold; } - -.highlight .c1 { - color: #999988; - font-style: italic; } - -.highlight .cs { - color: #999999; - font-weight: bold; - font-style: italic; } - -.highlight .c, .highlight .cd { - color: #999988; - font-style: italic; } - -.highlight .err { - color: #a61717; - background-color: #e3d2d2; } - -.highlight .gd { - color: #000000; - background-color: #ffdddd; } - -.highlight .ge { - color: #000000; - font-style: italic; } - -.highlight .gr { - color: #aa0000; } - -.highlight .gh { - color: #999999; } - -.highlight .gi { - color: #000000; - background-color: #ddffdd; } - -.highlight .go { - color: #888888; } - -.highlight .gp { - color: #555555; } - -.highlight .gs { - font-weight: bold; } - -.highlight .gu { - color: #aaaaaa; } - -.highlight .gt { - color: #aa0000; } - -.highlight .kc { - color: #000000; - font-weight: bold; } - -.highlight .kd { - color: #000000; - font-weight: bold; } - -.highlight .kn { - color: #000000; - font-weight: bold; } - -.highlight .kp { - color: #000000; - font-weight: bold; } - -.highlight .kr { - color: #000000; - font-weight: bold; } - -.highlight .kt { - color: #445588; - font-weight: bold; } - -.highlight .k, .highlight .kv { - color: #000000; - font-weight: bold; } - -.highlight .mf { - color: #009999; } - -.highlight .mh { - color: #009999; } - -.highlight .il { - color: #009999; } - -.highlight .mi { - color: #009999; } - -.highlight .mo { - color: #009999; } - -.highlight .m, .highlight .mb, .highlight .mx { - color: #009999; } - -.highlight .sb { - color: #d14; } - -.highlight .sc { - color: #d14; } - -.highlight .sd { - color: #d14; } - -.highlight .s2 { - color: #d14; } - -.highlight .se { - color: #d14; } - -.highlight .sh { - color: #d14; } - -.highlight .si { - color: #d14; } - -.highlight .sx { - color: #d14; } - -.highlight .sr { - color: #009926; } - -.highlight .s1 { - color: #d14; } - -.highlight .ss { - color: #990073; } - -.highlight .s { - color: #d14; } - -.highlight .na { - color: #008080; } - -.highlight .bp { - color: #999999; } - -.highlight .nb { - color: #0086B3; } - -.highlight .nc { - color: #445588; - font-weight: bold; } - -.highlight .no { - color: #008080; } - -.highlight .nd { - color: #3c5d5d; - font-weight: bold; } - -.highlight .ni { - color: #800080; } - -.highlight .ne { - color: #990000; - font-weight: bold; } - -.highlight .nf { - color: #990000; - font-weight: bold; } - -.highlight .nl { - color: #990000; - font-weight: bold; } - -.highlight .nn { - color: #555555; } - -.highlight .nt { - color: #000080; } - -.highlight .vc { - color: #008080; } - -.highlight .vg { - color: #008080; } - -.highlight .vi { - color: #008080; } - -.highlight .nv { - color: #008080; } - -.highlight .ow { - color: #000000; - font-weight: bold; } - -.highlight .o { - color: #000000; - font-weight: bold; } - -.highlight .w { - color: #bbbbbb; } - -.highlight { - background-color: #f8f8f8; } - -* { - box-sizing: border-box; } - -body { - padding: 0; - margin: 0; - font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 16px; - line-height: 1.5; - color: #606c71; } - -a { - color: #1e6bb8; - text-decoration: none; } - a:hover { - text-decoration: underline; } - -.btn { - display: inline-block; - margin-bottom: 1rem; - color: rgba(255, 255, 255, 0.7); - background-color: rgba(255, 255, 255, 0.08); - border-color: rgba(255, 255, 255, 0.2); - border-style: solid; - border-width: 1px; - border-radius: 0.3rem; - transition: color 0.2s, background-color 0.2s, border-color 0.2s; } - .btn:hover { - color: rgba(255, 255, 255, 0.8); - text-decoration: none; - background-color: rgba(255, 255, 255, 0.2); - border-color: rgba(255, 255, 255, 0.3); } - .btn + .btn { - margin-left: 1rem; } - @media screen and (min-width: 64em) { - .btn { - padding: 0.75rem 1rem; } } - @media screen and (min-width: 42em) and (max-width: 64em) { - .btn { - padding: 0.6rem 0.9rem; - font-size: 0.9rem; } } - @media screen and (max-width: 42em) { - .btn { - display: block; - width: 100%; - padding: 0.75rem; - font-size: 0.9rem; } - .btn + .btn { - margin-top: 1rem; - margin-left: 0; } } - -.page-header { - color: #fff; - text-align: center; - background-color: #159957; - background-image: linear-gradient(120deg, #155799, #159957); } - @media screen and (min-width: 64em) { - .page-header { - padding: 5rem 6rem; } } - @media screen and (min-width: 42em) and (max-width: 64em) { - .page-header { - padding: 3rem 4rem; } } - @media screen and (max-width: 42em) { - .page-header { - padding: 2rem 1rem; } } - -.project-name { - margin-top: 0; - margin-bottom: 0.1rem; } - @media screen and (min-width: 64em) { - .project-name { - font-size: 3.25rem; } } - @media screen and (min-width: 42em) and (max-width: 64em) { - .project-name { - font-size: 2.25rem; } } - @media screen and (max-width: 42em) { - .project-name { - font-size: 1.75rem; } } - -.project-tagline { - margin-bottom: 2rem; - font-weight: normal; - opacity: 0.7; } - @media screen and (min-width: 64em) { - .project-tagline { - font-size: 1.25rem; } } - @media screen and (min-width: 42em) and (max-width: 64em) { - .project-tagline { - font-size: 1.15rem; } } - @media screen and (max-width: 42em) { - .project-tagline { - font-size: 1rem; } } - -.main-content { - word-wrap: break-word; } - .main-content :first-child { - margin-top: 0; } - @media screen and (min-width: 64em) { - .main-content { - max-width: 64rem; - padding: 2rem 6rem; - margin: 0 auto; - font-size: 1.1rem; } } - @media screen and (min-width: 42em) and (max-width: 64em) { - .main-content { - padding: 2rem 4rem; - font-size: 1.1rem; } } - @media screen and (max-width: 42em) { - .main-content { - padding: 2rem 1rem; - font-size: 1rem; } } - .main-content img { - max-width: 100%; } - .main-content h1, - .main-content h2, - .main-content h3, - .main-content h4, - .main-content h5, - .main-content h6 { - margin-top: 2rem; - margin-bottom: 1rem; - font-weight: normal; - color: #159957; } - .main-content p { - margin-bottom: 1em; } - .main-content code { - padding: 2px 4px; - font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 0.9rem; - color: #567482; - background-color: #f3f6fa; - border-radius: 0.3rem; } - .main-content pre { - padding: 0.8rem; - margin-top: 0; - margin-bottom: 1rem; - font: 1rem Consolas, "Liberation Mono", Menlo, Courier, monospace; - color: #567482; - word-wrap: normal; - background-color: #f3f6fa; - border: solid 1px #dce6f0; - border-radius: 0.3rem; } - .main-content pre > code { - padding: 0; - margin: 0; - font-size: 0.9rem; - color: #567482; - word-break: normal; - white-space: pre; - background: transparent; - border: 0; } - .main-content .highlight { - margin-bottom: 1rem; } - .main-content .highlight pre { - margin-bottom: 0; - word-break: normal; } - .main-content .highlight pre, - .main-content pre { - padding: 0.8rem; - overflow: auto; - font-size: 0.9rem; - line-height: 1.45; - border-radius: 0.3rem; - -webkit-overflow-scrolling: touch; } - .main-content pre code, - .main-content pre tt { - display: inline; - max-width: initial; - padding: 0; - margin: 0; - overflow: initial; - line-height: inherit; - word-wrap: normal; - background-color: transparent; - border: 0; } - .main-content pre code:before, .main-content pre code:after, - .main-content pre tt:before, - .main-content pre tt:after { - content: normal; } - .main-content ul, - .main-content ol { - margin-top: 0; } - .main-content blockquote { - padding: 0 1rem; - margin-left: 0; - color: #819198; - border-left: 0.3rem solid #dce6f0; } - .main-content blockquote > :first-child { - margin-top: 0; } - .main-content blockquote > :last-child { - margin-bottom: 0; } - .main-content table { - display: block; - width: 100%; - overflow: auto; - word-break: normal; - word-break: keep-all; - -webkit-overflow-scrolling: touch; } - .main-content table th { - font-weight: bold; } - .main-content table th, - .main-content table td { - padding: 0.5rem 1rem; - border: 1px solid #e9ebec; } - .main-content dl { - padding: 0; } - .main-content dl dt { - padding: 0; - margin-top: 1rem; - font-size: 1rem; - font-weight: bold; } - .main-content dl dd { - padding: 0; - margin-bottom: 1rem; } - .main-content hr { - height: 2px; - padding: 0; - margin: 1rem 0; - background-color: #eff0f1; - border: 0; } - -.site-footer { - padding-top: 2rem; - margin-top: 2rem; - border-top: solid 1px #eff0f1; } - @media screen and (min-width: 64em) { - .site-footer { - font-size: 1rem; } } - @media screen and (min-width: 42em) and (max-width: 64em) { - .site-footer { - font-size: 1rem; } } - @media screen and (max-width: 42em) { - .site-footer { - font-size: 0.9rem; } } - -.site-footer-owner { - display: block; - font-weight: bold; } - -.site-footer-credits { - color: #819198; } diff --git a/docs/_site/index.html b/docs/_site/index.html deleted file mode 100644 index 21aae0f..0000000 --- a/docs/_site/index.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - -Containernet | Use Docker containers as hosts in Mininet emulations. - - - - - - - - - - - - - - - - - - - -
-

Overview

- -

Containernet is a fork of the famous Mininet network emulator and allows to use Docker containers as hosts in the emulated network topologies. This enables interesting functionalities to build networking/cloud emulators and testbeds. One example for this is the NFV multi-PoP infrastructure emulator created by the SONATA project.

- -

Containernet in action

- - - -

Cite this work

- -

If you use Containernet for your work, please cite the following publication:

- - - -

Get started

- -

Using Containernet is very similar to using Mininet with custom topologies.

- -

Create a custom topology

- -

First, a Python-based topology has to be created as shown in the following example.

- -
"""
-Example topology with two containers (d1, d2),
-two switches, and one controller:
-
-          - (c)-
-         |      |
-(d1) - (s1) - (s2) - (d2)
-"""
-from mininet.net import Containernet
-from mininet.node import Controller
-from mininet.cli import CLI
-from mininet.link import TCLink
-from mininet.log import info, setLogLevel
-setLogLevel('info')
-
-net = Containernet(controller=Controller)
-info('*** Adding controller\n')
-net.addController('c0')
-info('*** Adding docker containers using ubuntu:trusty images\n')
-d1 = net.addDocker('d1', ip='10.0.0.251', dimage="ubuntu:trusty")
-d2 = net.addDocker('d2', ip='10.0.0.252', dimage="ubuntu:trusty")
-info('*** Adding switches\n')
-s1 = net.addSwitch('s1')
-s2 = net.addSwitch('s2')
-info('*** Creating links\n')
-net.addLink(d1, s1)
-net.addLink(s1, s2, cls=TCLink, delay='100ms', bw=1)
-net.addLink(s2, d2)
-info('*** Starting network\n')
-net.start()
-info('*** Testing connectivity\n')
-net.ping([d1, d2])
-info('*** Running CLI\n')
-CLI(net)
-info('*** Stopping network')
-net.stop()
-
-
- -

You can find this topology in containernet/examples/containernet_example.py.

- -

Run emulation and interact with containers

- -

Containernet requires root access to configure the emulated network described by the topology script:

- -
sudo python containernet_example.py
-
-
- -

After launching the emulated network, you can interact with the involved containers through Mininet’s interactive CLI as shown with the ping command in the following example:

- -
containernet> d1 ping -c3 d2
-PING 10.0.0.252 (10.0.0.252) 56(84) bytes of data.
-64 bytes from 10.0.0.252: icmp_seq=1 ttl=64 time=200 ms
-64 bytes from 10.0.0.252: icmp_seq=2 ttl=64 time=200 ms
-64 bytes from 10.0.0.252: icmp_seq=3 ttl=64 time=200 ms
-
---- 10.0.0.252 ping statistics ---
-3 packets transmitted, 3 received, 0% packet loss, time 2002ms
-rtt min/avg/max/mdev = 200.162/200.316/200.621/0.424 ms
-containernet>
-
-
- -

To stop the emulation, do:

- -
containernet> exit
-
-
- -

Installation

- -

Automatic installation is provided using an Ansible playbook. Requires a bare-metal machine or VM with Ubuntu 16.04 LTS.

- -
sudo apt-get install ansible git aptitude
-git clone https://github.com/containernet/containernet.git
-cd containernet/ansible
-sudo ansible-playbook -i "localhost," -c local install.yml
-
-
- -

References

- -

Containernet has been used for a variety of research tasks and networking projects. If you use Containernet, let us know.

- -

Publications

- - - - - - - -

Contact

- -

Support

-

If you have any questions, please use GitHub’s issue system or Containernet’s Gitter channel to get in touch.

- -

Contribute

-

Your contributions are very welcome! Please fork the GitHub repository and create a pull request. We use Travis-CI to automatically test new commits.

- -

Lead developer

- -

Manuel Peuster

- - - - -
- - - - - - diff --git a/docs/_site/index.md.bak b/docs/_site/index.md.bak deleted file mode 100644 index 5a85f44..0000000 --- a/docs/_site/index.md.bak +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - -Containernet | Use Docker containers as hosts in Mininet emulations. - - - - - - - - - - - - - - - - - - - -
- Text can be **bold**, _italic_, or ~~strikethrough~~. - -[Link to another page](another-page). - -There should be whitespace between paragraphs. - -There should be whitespace between paragraphs. We recommend including a README, or a file with information about your project. - -# [](#header-1)Header 1 - -This is a normal paragraph following a header. GitHub is a code hosting platform for version control and collaboration. It lets you and others work together on projects from anywhere. - -## [](#header-2)Header 2 - -> This is a blockquote following a header. -> -> When something is important enough, you do it even if the odds are not in your favor. - -### [](#header-3)Header 3 - -```js -// Javascript code with syntax highlighting. -var fun = function lang(l) { - dateformat.i18n = require('./lang/' + l) - return true; -} -``` - -```ruby -# Ruby code with syntax highlighting -GitHubPages::Dependencies.gems.each do |gem, version| - s.add_dependency(gem, "= #{version}") -end -``` - -#### [](#header-4)Header 4 - -* This is an unordered list following a header. -* This is an unordered list following a header. -* This is an unordered list following a header. - -##### [](#header-5)Header 5 - -1. This is an ordered list following a header. -2. This is an ordered list following a header. -3. This is an ordered list following a header. - -###### [](#header-6)Header 6 - -| head1 | head two | three | -|:-------------|:------------------|:------| -| ok | good swedish fish | nice | -| out of stock | good and plenty | nice | -| ok | good `oreos` | hmm | -| ok | good `zoute` drop | yumm | - -### There's a horizontal rule below this. - -* * * - -### Here is an unordered list: - -* Item foo -* Item bar -* Item baz -* Item zip - -### And an ordered list: - -1. Item one -1. Item two -1. Item three -1. Item four - -### And a nested list: - -- level 1 item - - level 2 item - - level 2 item - - level 3 item - - level 3 item -- level 1 item - - level 2 item - - level 2 item - - level 2 item -- level 1 item - - level 2 item - - level 2 item -- level 1 item - -### Small image - -![](https://assets-cdn.github.com/images/icons/emoji/octocat.png) - -### Large image - -![](https://guides.github.com/activities/hello-world/branching.png) - - -### Definition lists can be used with HTML syntax. - -
-
Name
-
Godzilla
-
Born
-
1952
-
Birthplace
-
Japan
-
Color
-
Green
-
- -``` -Long, single-line code blocks should not wrap. They should horizontally scroll if they are too long. This line should be long enough to demonstrate this. -``` - -``` -The final element. -``` - - - -
- - - - - - diff --git a/docs/_site/jekyll-theme-cayman.gemspec b/docs/_site/jekyll-theme-cayman.gemspec deleted file mode 100644 index f5363f3..0000000 --- a/docs/_site/jekyll-theme-cayman.gemspec +++ /dev/null @@ -1,19 +0,0 @@ -# encoding: utf-8 - -Gem::Specification.new do |s| - s.name = "jekyll-theme-cayman" - s.version = "0.1.0" - s.license = "CC0-1.0" - s.authors = ["Jason Long", "GitHub, Inc."] - s.email = ["opensource+jekyll-theme-cayman@github.com"] - s.homepage = "https://github.com/pages-themes/cayman" - s.summary = "Cayman is a Jekyll theme for GitHub Pages" - - s.files = `git ls-files -z`.split("\x0").select do |f| - f.match(%r{^((_includes|_layouts|_sass|assets)/|(LICENSE|README)((\.(txt|md|markdown)|$)))}i) - end - - s.platform = Gem::Platform::RUBY - s.add_runtime_dependency "jekyll", "~> 3.5" - s.add_runtime_dependency "jekyll-seo-tag", "~> 2.0" -end diff --git a/docs/_site/script/bootstrap b/docs/_site/script/bootstrap deleted file mode 100755 index 492e553..0000000 --- a/docs/_site/script/bootstrap +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -set -e - -gem install bundler -bundle install diff --git a/docs/_site/script/cibuild b/docs/_site/script/cibuild deleted file mode 100755 index f627530..0000000 --- a/docs/_site/script/cibuild +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -set -e - -bundle exec jekyll build -gem build jekyll-theme-cayman.gemspec diff --git a/docs/_site/script/release b/docs/_site/script/release deleted file mode 100755 index fb400aa..0000000 --- a/docs/_site/script/release +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh -# Tag and push a release. - -set -e - -# Make sure we're in the project root. - -cd $(dirname "$0")/.. - -# Make sure the darn thing works - -bundle update - -# Build a new gem archive. - -rm -rf jekyll-theme-cayman-*.gem -gem build -q jekyll-theme-cayman.gemspec - -# Make sure we're on the master branch. - -(git branch | grep -q 'master') || { - echo "Only release from the master branch." - exit 1 -} - -# Figure out what version we're releasing. - -tag=v`ls jekyll-theme-cayman-*.gem | sed 's/^jekyll-theme-cayman-\(.*\)\.gem$/\1/'` - -# Make sure we haven't released this version before. - -git fetch -t origin - -(git tag -l | grep -q "$tag") && { - echo "Whoops, there's already a '${tag}' tag." - exit 1 -} - -# Tag it and bag it. - -gem push jekyll-theme-cayman-*.gem && git tag "$tag" && - git push origin master && git push origin "$tag" diff --git a/docs/_site/script/server b/docs/_site/script/server deleted file mode 100755 index d8c3e15..0000000 --- a/docs/_site/script/server +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -bundle exec jekyll serve diff --git a/docs/_site/thumbnail.png b/docs/_site/thumbnail.png deleted file mode 100644 index d06bb2a4a20ec00440950c7769f35d25784f702e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31970 zcmaI7bC4%Nw=LS7wr$(CZQJ;@ZQHhO+s3r*X`9ow`^|UmJ@>vp-gy;Km59C8-nnx{ zRAyvVq@uh895gmG5D*ZYl%%Ngzw-0nJpc*v?^*AddGfEoauL&XQL#63aW`@T0127e z8v_WXY>mtT$^au%Psa%WFAxwYrKPH-i>90`w~4(iz0rSc=sj#5{-J?@cm+Hhj7+Qn zE`-Jab4xou;+yV%VnRz(K4J|vIYv1L5rBoIq?Z#w#Y03jPaJDmw56DuJH z7d;ajI|mmBEg|#2HUlFk12ZEXBNsOt3pXP(;s3sf|9NvVHRDzm760G9{Hb;JIeXf<7h0%omD*@01V0iXM0yClYbLuM)Dt54%{M603#QBCsliUoBz(DqJ_PSy|abA z1EGk>e`Sr3QqIW4((XTumIA<^LQD$N$LpzpU77h^%A_4}38Yjah zgiH|!)pm!xQOA50 z_Bi@61%hn)P8AJk{P}q1F#K`5?6ZGy_IPFc_~H8$_XNKFNx2gs^oKvPzR?fqz7hBg z??(8+-Te9OaeNmZyvF;fJ-KUt^L9&c&xhNCclOex|GHb{dOK5p}cRL|CKYW-&uG1Jo;Olxgy{>f3v6aN1+ePkz zU=*3V=gQmBxc|?0xgMmR;Gy2lwK2UTu|L=asEYsXHT8)O;QRKZbXTp z?Thf5{`~rva4gFV)r;_}I$oT+;`13x`TONj-3zn%nCx<_9){zH3cs-$6Uh zh+ny;j8L9>+|R__?luMgEAXE>s-w1Reck6_AKnM4=U&&I5ij|J+s=;GoNqVqFuj!C_iFi}44H-I|j-mQsA-wy+ij z(D7BF8?zqqcc5wL)i>Y;eatwp zEg!NMSK>{dx`~};MZWv1dVx36C;Y3uP?OX+Ewuft)c0^g^$G5-RFy-5R8yQrPy1 zhYq|xMF|q(Xla{7)gO6R?)6movRC)Ud14Z z_bc(6j$PN(_EcHL7#$X5>)++SJCHWlNG^GC|Hf*4JL+nxuSl;S4ofpJG+bzoRH(bh zGuOJ5yJF#@K@i_8b`TbPdKlK2#8I5wW^=)>HL}*cw|jv;f7(FodKfA)#Ob=a_P6O} z#$2e4S7~2lB%%nzi^rkN$*_yF*=}B7`nR@fPKW#IN>}Pw@VvKiSHUa}#T)#{_kR>V znw3!J+ag5k?!R%3X-#swyURFy!0B7W(KWTvTKGHvc3k?)$Xq?`qc=Gk(-YUt;pTBj z)$OcS5W)TXktGuzj_Zc5Enxf|KC+N;s;^cSH~Ya& zLkpt*OLN@VECdx{KU$XqBu0&u+IabZz?QNcU7gyRO1Q(-2@WQC)U%!Lw6ypIvPtys zI7O}Rf=EZM!GJ}Zphc>2fIeu)sIs_Q(#pjLS+zOUTvHHpK`6@mb{#0(oA2~UO7->a z=F9a{6aoX}71A%mO>7h+%n#=wd@atkk<>WIV%&{qpaE;ei}jNy`Ul5kx0<~A#{5AZ zkQ3*e)-z2g)>nmW?ie{!@l@0NZ8xo&_%bD72kvUTE0a8xO)+sI5G@dvlB5~4c$EoD zjq5!U9BNUjaL#ABRd9+?K#_r`s5N2X-e}likzmEbc#N{)r)P}^G_5X2tNeag!MMbs zI^!_(9h~w}ukNEDACrZr zrsiQDCz(JS)J2>rVO`#Pi?5g-+9#l3!TKEwPEq3lD3j3-;lTAk9OXQm@!&|w5+~KQ z6eEywiuiR?!t~Mt?2Z{w6*^{rL7Iz91C=$O)^71bc# zfc+4nm)uR)&F*#_zQ2{TeB)7FwzZdea>hfwL=Ntfu24Gu&{Q@YaJ2>@`F#sFlRXc1 z2q+mm^4ncLA?&Y_>M*p=7JMdJGxyh`+vIqvOypaL4b)bbiOUnH zrYd*e`h=I`(xn3}aLQP{9L?^tlOfs{^$BpfCX6kqhG%X=Oq=U{CHQ84oy5!Wolslh zW}h>&SZs2+t2=sL*uK;&JaU^08G^u^9~t&o?E?8hI_DhJgpM03(b~E=Xix{*itdHh zS1u@7QyC*#@am^(mdOJX@&F~>`~+rf(BxX}uv!w@a2%2r+TZYbN14-EmZ!vF%M9qA{jiw&U<+QV$Z2~q#;cxsU3wI1WsRd8>3}Z|(7$m85eP>Pi zw2DZCzQt0qZSgrDCwW*jh?18(QmygR+oGWY`JePBsMrlaZ=_tUVXrWaR0vV>sVwjW zQ8VY;ow`%wdpX#b6NyE!i@H0jynll|2b72>%9cD2pG9Dn|M9fPmpaE>*c{5xhVZaFPMz{t^(|vlwna%qI%xIF`GWSH;}kCj2HNk*z_OvevU!2L zADKRMbhPA#Z4e6^C&JsZLdl|N_KkQfFw)A5|g|`msrdb^ee&!4fzknnIt5>@?@Yp z1#1|WxTUE<%QsOIEDYIFGBDoJjf>is3LsT!*o;8rL!P-};nfoC1$5M6nyanI-n8-R zFeucg?sCy3y!=TsYqr5wkIeG=Pu$={MvNU1o6AtvtBeS3s8EZFhcpA8E?am7J%)xB z5cc6S;i-VbD$5{h1scIqQrXe=%o(}(DYz4B-#b)cI(xKoPdPzlZ;_>|h%d@sC8Xux z_YX@ljf%vYTeF4N5<}~zzkcUb;YT=fi~l|1bX*(A5HdQEP@-gX+{9*GOdv3~p&buO z$g{zbnc8!0ptk)KJvXwgD2Q;(hF3gQRVP;?O6lS}oaM-}lt51!oMGRmgm*CxAhW5I zTL?E$CpSKM@Ay4b;nyaFOFP($vT;bI%Nz4NV;5)F#v`tJSJX_nFB>R&m@&`eJG5>J zf6#sxw}33Z&gO7SnsJ0``nhBnvzEQ@)w~>>(!{0o>xJ?noV^{AZ2m8Cvw6pfjm__( zt6O9@IfiQ+N9rVgmbfJH1Vez`2rDlNE^L0$n5fx_Ukt!Uj@p3}S(iEN18u?}BdP?ymVdzd$ zu6GOWg$uEqV2UishN}<2U4e+TKwlNBp5=-1 z^5BRh;&Wdy1Y#8iDD`#RErlf3UPHq5ExO5}9@I#|4Dm5VaXJadUjC8bvTrA}Wd;UL zw`tHG)3RcZ+1@0_v5AeC`)ihgjKW-wjCcW=&o-q2E2Q*ven6fjq?KQ$a+*<9yw?KE zb=|d2#7&%bZ0~`x<0(m6TsFZDZyz&C`bAUQi10Yr3A`+~cE^IPhO*uuN7-zQBbkH1 zUYS%`$~<*ktkpf1$zpx1o=X%VZ-$-~ha~+h57q@}RQk;miZa|LQ;-oH#JEnM1VPqB zqa94(MJOl17T4sfwFRmY9i;(-@hFacUN+;S1wdCSSIaJHc!nVCbO~u`xSDT1T)trn zEsLkMS$JZRRzlplGQO>f2%7s{F>?8bTqY%FINXXQptwW(&m=l}Dl-AwG9)%DIhgX^ zsVwc#r=IXhQ%q%trC~7YAowf3`$F{x=)yn`dr_eC1^6l5yc_QiEp=r6?JAFm=7@Mt zJb1~tA|&$AZ$sN9_9Bp4vg`POLU7$h9~iai*qQOCWq3|<2#9P0x?XBk^hs>=hP)7E z_ctEldMlSIGu`yT?nGcKNdxN~wXCURX;j-z9OMnmYiaPZWy=B=XyK7yM&_h^tY3>9 zb+A4TlEdI02t0hIEx|4~!ZQq#sf?$h;*If`&9u}gl%`w>a7P0J=1hu_#?ZuRehS^x znVYELxv+_DW)7<+kA<&6N5*C*h>NIu74n=1X&ni0vcTr`oq?*m-dBO@G;pO%1DSS% zBu5&6%;C2NQ;NoyNrH>YVADJzZeTTw%@!VdSS`plS`5LmlTZ(t?x0X$p$h-4pj|5G zdD8Z~4jx}?n#%i=$Ug#hY!qbuXQ2t3$N(}j-Lqz*u!qHHqfISCBR!)KP1wb8S#p%! z4Seq|CRLA%ahI;` zaE}it#dXc8cDIg^Jg$l!&yXTR`98e$O=4GH-weo7Yw@M-LOS|&mFiT-k|yHH%QU`; zLYbfslz~->Ll7XYPndKC`c`zMZZGnggd7-6tqD1Z%8IGQ17+S|Q^3g1t=TxcA!Ku% znG3*I7Zvdp-ImJz#@EJ(W%@u$vEg6WHvG!H(Xs&Zhkj&FI>X3DdwFU+kjtKI*tPtz3w$#-_5gmW*K zkx!gePdFULW5tVM8*FQH64bM|io2*yicjnU)-VMl3|$=;WhclJvfHHvkEybRiNN|I z()|hfw*|PBie^ajk&QfD&7)L_hm5=r=T{z@@e&JAy;(`|RLpy%#W2lTg_wj6rTB`) z?Y~8+Z$nk$*{TSlKcN!!#62|@kITUkDqGb?42*9()5(5KZiEyayOq2wxO-#_RT(zz zsS>NBr1GDY=D2fMs`5reU~W*ZBSN>YEY9zRc;&>n#Y%C_9CTY_oj9t9(N)^9p%A30 zQi(9*(e*gDs}C2=IR`Qo4X#={f95N}^T-bDDDh+tR3eqCNn!Ga_4|xGHHWoBk+cNh zgm!4g2ruhC+q^z+i$Y&Q(`Xga+Sd6Gjs6ubL_-Zp+s>JzZ8F2px3WY;Iplia1w@C zR*)<+RB&2%>lt_kX>BXL$;XaF95@=AWpEjA3!JKBH>fM4?GV4PY@;p2Oo`-41w*2p z(KhiemXu`(ul{P^C!*xBlZ4X2`+knFC6mnW11QwagMU!EFt?#F2&4K(Cu4vov!~~~ z#LIZ-%NCLq1I29|O=!ZqtIh;2a{sEvVh(N;FR=VU_amPyHNrE4HYPHYVuHgkk0h(b zUVo47l`55EdLOQlrinnPLKer8+AOh++A49 zyM!@B1Ufk=*NZymaWazfa2g4biLH!hh52Z*T*#^M%Dv87#PwRv&Y{t4VVYn{bVp%f zn7}U{MXN+qIX6pAlL=06sIdV|b>&(hzzA1b#RP6d{e3YI9Ru~WC@Qb zkGqJ!6#)I1n^`EQf)61KC{|jfQs9QWEbvr#0%JGi#BEC7c|_t&PIX z^KW|`LMgYopqCDrehJM$o=W7>xnU-zlO5L!SuRdN-f!W>Vw}aL(`yCnK)Mfm;=6I` zNRDy0sGO;l&=nN2t{y$dk;a9sYm^~QU`r2qnQfoApBRYsK(YdfF{8E}c|*L)I=rl_ z#}!T`Z}ZePdeL48+LkHv_7n?^w%JPa!is~Jt|Jt?zO{kvy9R0+fIn)AaV)%13@JTA zf-RtOA#77dEN7*dub>fW8iBaz${8>U9zmgHmQgWLp;y8dxH)ZdBbkSl2J4H{)>sBR zp9W$%#$NG^*i^H@YDkQVd=_7oD;VaClNC*jAgo}^N#JDjbG%yX?EJEIF1M-qTUU1P zBohvYa*v{-x@Ym$1a@zqx)7HwWzwOBMA;ZW2d8P&2Sv>p2GvELOgoylijKOj;2Lgu z5jzQ7*dEmIVe8r;;sCogoxDq-M*dx?hE8~Thy&(fIKRQ2G*BO+PI%@jiF`op>yK!2 z69ieP5C=(0@&amL2^j-<$8yAFGJ@bdFKltJ4KphJ4m4Q4bN9A|GBm6chfMRtY{ARb z(=B|EGX#5M#Z?SlIXTK`tawD2S%KwYM^gNJ+_asqPG|xn0au4Y47hj!{3^K&g8+p0 zMdFriRU`$2r=NQ*5<#!O`0g!e*+TceNLOg1N{8B z4Q1VFOz^<4hxd`e*SOx7-Q)XotLS<0xnog_1};>AKqvp-uk7CUSh7C8t{ z%%S%@e-cei!g<(BwddMg2a{OM5LJcqjoF)>uN$L1q`!=E_Q69nR@AgSf}z(3*g(m? zlY#va_*w~|sT#&c$Ms`rvI5SG)Vk^l!CK~zV6?Fdf+Jj=WMsi$SxGMOuj_DQt+{aX zrHd~8_vu1Uh8f| z$%IeP!2oX;mz#6Q^oO0q%cRlcNf%=glN+&SBs61Ngn4O(V;^6H;1w$QF9x*R!o+eL z`ezTo>iE^NnvPJIA5MeNpP~1KBhWvNs60_z5SI4F>Twxl^OZ@j8=hRjUP<~0^NRL~ zl?I3YJ!>3RqgWn?ocW_uzqi^nISxklqmh%x5}zZZ0Ktw1b!Kab(pj4#zi7GvvL7K^ zB+G8(pvJMOl3VQ|j;xno(u)IBFUy#1T0}-%;L$X5_RG&g(lm7}a)v6RKo*aDI{@Tm zG0vppMWU2nZ)?WeFHURt=8aK;T7>p1f#O2D`aQ;Q>*{y<<_| z3YisTuk(V-GG!Ylo>SFJ=P73B{IQ`8B~oFkC$S zO3UrIDBV+>e7z{8gL1GiI$rtmt4%Pzo)s&Ow(EYdCf9rkBVi|d^RcX_4QC1XyB9h0J)`5ZY4Bd#tXc)lJ7|8O1%^iwXUD(i0YMD zZixu~-_9rPywObh!Dv5L?;&1ZxD?RkC zRuzufO3W!UOOl-dav#5EFm}=+_SSM`3a(j2Pf4A|mLGQv{2v95fFw)Pmc3;Wt?piKT});0{?hdqhlzD!kFPbF$m^A{&>I)&b<_pLZwL zA}<7N3K)`JR*->i#30iZz7gtOsGOGcV@deT-Bb|{?pvh6+4j>SZP{xEo2GjIEYc;YW)J(9OHGMzZ|B0A@wMM%q#SmWca9$r2|= z38}FNH7M}^9%Q)WDi39T$4L2TZ$&3o(}2SaE#ppm$wS)trM@`n0HIopt?FMAdP@|| z_<_SNK~dQC4hmWa?FFSG#zAb9nbqP^$XkXJ+WR6m;s=z)A0dij!bnSRRUNsotQg&Z zccVpHRgJa2ytK~`nUcBp+p}#WpqWfiHmQLdOt_eh1xd$xQb4G+PSDo|G21|syDSUr8nao#>!W=cwIRai3K=!YYI+A z*7Vjw4GHJdalvyOU=aj`gE5)V(1LU&5r&KrMOiUv9X| zL2LbV-R`)%%Ai57HnC8m(0eIC!L`LC6eF(Z47zO4yv%;8&%u~IL%B*cI;v_wT=N8F zT@rsevB3o0A<R65D>as`dnP?t|Rvt85JfIKQIR$nE zK#OKK@4p~Ap-^07XFtSxM3u10g^jV|xIFE!0R1MX<<|L~;`+A@>|~cNcxLgke8Yd7 z>ba`WG?nA<)^P3o3KQz0FUgReTN!jF)RvyTG+351tQE&vexKDD-8A=L$;cN6NBjx^ zN(f6y8X{E84J8YF{0$8wv*lD95>NmGGrtHXccR}38C(#Xjt$U7hV;c+BniukL;G%vffX`YwR?YN9}j8)wI*jTm6>+0QNP@WdAyJ@`un6t%@bhi8cyQo}! zcl&GWEsnd~wr*=B*${Y4O{Q?pp4w)Vne7qKG{RsfW<5Wq1-|Z*4NOA;DPB(30^yC# zhW3WVKTn+HQhQ>OVb>CtA+mfc9}*zgWRvWM*X4%nH4LaM8ydZOHbt$9Oo(f0H;xhx z+Os;&*2WF17+tOuentT!uMZp8x^os*q%Qt-EMr$DD%MnTISXETC0Fz4b@rQv$%`uS zb5wDXCtHiJENQ%`aEbsFCVS|tw%OxVKG@9ew&v<2#ihILNn@Ff{9b~iZej9zJ0~ zsE4wtRWhNAZ5m|ahH%)$R<%9im0!s~#M}e|6BPHH!m~`PIeL;RF&REU^ZQm-$3`OV z9wPWKvWAaSkn#_YM0#PoO>D-$lF#|eW zULpqjtS+KLOT_KiMcGfBX`VTWy8u}!!!lPz1vWuUhE*RufAXCLcR8k-b5PDl`& zH4$=jz@~_h(JL_)k$!fGDsnQuVmfKs}6+bI4re^EEQA)WG#WTJs7<& zWK>}05xam4rpAa z%P*Fdw*xJ^!(37dS8a?tlHiF8mX9hNJVgq!`^$*LCyI4lPjDVJZDoq38IeKA{~IQf z{e!U3idv+oTL$q{3VlOhIc(xSYNUj0xui77bkS>ARxc%rgV|=n0=UiVuN?ezS#%2|X6>;hIo*(7{F&5fkWNHA9l6H0mT};UCO@l>82Ka!&Rfj%fhOycyYisT z-yJtiAprI;L2ks(Mo`W32_&qS98~=DhDSD|$g5az2H;|cG&jK0X$UH9;|i7CB2He~ z8ZkL7QZsBHkefo}{9H^1AIt7DP(^##LOm2Vi3U|RMKxU0ie@X6sm|ddykRCZXKA2V zokUG3eT{f($Yq!XvS>X0;6u}jPQTnvcV@5}+l zmYwaP!V$dchZgOv6pGl2yt5cSNVaTE-;Nw7CV76npuA z)=INn*+U=TC2{RuKCIVCJB(oZDnC0*E3~UrCddY_IOujAlV~Jll;<;MmFEppLSI8& zmNJ1vxAprotmdcT?)|7m@R;_ELc|~Y4>SD~Vg^m|INuEwnwYAU)cw@sP)obC+QUTe z!XMURAwXngoN06yGG8nn&FU_7l$dA@(@3EqxmRKiqie_Mr`yi5pc;YIv{Cyn-b#hk zdrJ;y1`UcdDVVE>067j4?DXCstY4vOHYAzlW*}`)>CxDTWSlktQ3biu-+IyJP%in$ zzo;PtHYz8bwexe!CUNYLv1}J9p((o-%9zwW_Z)t8MzY$LC5q0Q$=Xiy#VI_sqjG2q zE`QQVbtRVymjbN4Yhewp;fR~GQ-?F6D+V})m5)1smlfMVBDj0On@fYG=#Sp8aH1;C zNQ;rlc}5EOio&p>J60Iu(UBC%*&@?~2>_+odMLra=Sux(ucDF& zm!Im))d~D&wpGz`WXxlL0|ATk6)3DaAGi50J@?4xn2n3Ps#ZXXMJy@$+9Rnck35<% z^zDF;T zM1dm^)t@-Y?;PyHM3vkIt%aF~WrbN7?VH8(3V+^TxZb;1wX!T2grW*WFSy@ij6~}y z;3t!78zyqH&VhDEtLCi*JhN=htv^43dVaU>EguL;nXXYS9R7xm`$tbu^@R6^43w$oJSqFZTO*rkRdkLxKRzmZr__%-OF35F=ZvjMcANNe>t1wrkg3mp+cgLSe)E()w%Mniwj*byV?55 z0Tq%R)&#D#kOZL=9^D$ec%@HAc{$r~KxONcWK!@0I_juR`Suz^VUCv!v94gadOY@j zU1DiiZE~uOvBpYw>~^uafosDURabpnV}5(4SyLU}^45Ft+OQ0UDC4Ki=~4+39%*Y5 zVw6=I_r~0~qhjei{ORb9u^Ek_SoN~;fDV)0%nDq-ZAK6%!}(TlK3*LdnP_jxjz=M% zS=2>&Xk+>4=#i;U zMc+g^A>xXKw@}8X7+~I$kHq8HxL8P-BiGz&d1--~fs^RRQX@jV#qSHnOg!&&|bu&vv-{+q%3?w+e&S0d6JuX>!oFji{1Ak0ji(!4!)H^IwFD@GR2kuUqBPc;Nqz?3ob49jX7Fh00!3o`CZ- zT1Le@oFk)&DkY;+%HZ~L&F5V0tfPAws}|TXu{z)d{o6i@LV(IY#IbihS0eBMx^zp4 z*b8iO^KYO}T(9$(U1WGQwZo?i^#+OY!)%X;keYpy@1-Q64-^A`k2fr2%5ub2^Nk~6 zS`2!!=0FoGtTNGduTNJ;0(Y7ag78=GE}(*;T36~VT&@KP^|HTR+Rv(grARbY}XKQ&jf zqJP*OKr2?RciaH^xDlT5kO|_H3eV$>U&Xic%-)YPeIvJujJy5lq0pY5u1*GVqXYD%aln@+i}=Tm^ol4JyM7TRO*MD*;Sp!a&kGS7r1J0yG#ou zPfaB-@nV^}ohB`{Z!H0`ENj?VECZnt6CBaAf1YA4Fg3Epp=+;eN(bXSo+dYo;&2KU zXg8WATe5FY{_HK)L0O3OIrToh7TqFZKStDc@@sIDRTdKgr%Zmcmlk=evqdd%hTW;9 zEj%==LM*U}n&<1P%@&o~1&fOs(}EZ>V)^p2EuGo{!@!Nz#6eFV~*;~V7WHOT97cRQlm?>b=Upfjp{@y( z<*fzX3fq8VWz_2bb*2XVW8FY8KeYcEL2DY;K>=2C$xfFOoseOl;z_ z<6OR7Kq2R>tJpaV9Fs1ylBGoOIEG>3;qDV@*wh`$6-Htiwr>ZSMF2jJM$D=3saAN6 zfrnYUn%trmn+54o(Ez9%6zqvqqS3U%X@NVa$9YScWm^LKpYTucr>2c)rsH=l6^Ha* zYzj!BYmYlYsczrr7pp`nYeINMjAvegXRnQ6Mw6t~!ZG29!oKP?akFMAd>OTB6`OR1 zER6{geNqoRZ(3bM*#`51ImJ{Kow(C9H`jXC&xzpKr?~bokwdnE z2iYGO2V}>Jj$)*ZK*^>Y=4s+u}%6x@=XtwS%3jMs~5;w<%Y{64H8=IaErh_C2kd_UV7w8Jy z!3PcN?T=bF8I3`NL+!Y$|5*443F|`aL947xzC+Hn|EfGi zno7baI1{6$>@nZ1HW`<}ZOK`KT3p596cLV8`G|KBz~yK{P0Y5e8NT3|6eH!J>rF+W z;re$X2aO5bzyg_Gm0S@adcc7siOC`3t9?2k&35vy=`* z7nNz~VaC>iG>XoAY>10jse=tn1G5{7Gjb5iGoS&p(6GbAAp@@L_B2CGuX=^iIr5nJ zas}O{hBp)pjKt83Pzzrk#L(Ex6{M#wCE#5mxqcvMA`^0aMMt!eEKMFiaLUtX;xPszWw->Qu1`9qan1^jG zlJ;3lg=|4yFtLkuPI0JJMrGoHvO`l28bIeV?m#v|D%Q)nXv-RbP$<{{SIS7XC58HujGPzsyEM!JP+DRBwr5_*s(oRqF68D*8C?1y zcx4xtoBJ?s|Gw{>f7`J{@O*3UHGoyl@AC5EzVpi^nDv*YkqUZzS)KLkRzCVu{Sat6*sHY8lJ``XJq>6X_UHxK6#8UgXU zqkPi*%)+LOdt*znMePYZ=l+>pm9>i)K`+*?`AM#2@6CdGoXu?Lj}X z(GKmD?W^2u9eNJbfNRyN=I{pwJ$3!xjKy#bwvscyJ+y(& zRL6+!aMDCyQ>k(Rt>q9q*_E)WR@20BE0{KVja-+++`gUkVFG7mCoCu{aP36@oSmb( zRm=T7W1!$sKO1to?p)*e#@E3%gYTWWzCBTPkFTdV1by3Llywl3Kws6+1T)>4%h|4B zn|Gn+H!%`-xXsAzWeq)?-H}!?KFNrYuN%WatiZi>02A} zVmyyHFmjY+DJf9jkH^;?iik`ReRbZs@ zL&*snw~$zo8CW9%Z7gX4o~$W`Zug=cM)BH5oau@s9%a8pCZk3_1rQpUe(>Ug!X~*0 z9A1{>t8C3)b;eUE!&}PewSfcH8`4O80fIt(S;xFdxKfUdJRU)Qm*?hsub<}A*6$Yz zyN_)zdT-A(^?YYqB=jCzmUF%b#rY3MV>yl&RNYzMi`hTwSoyxQ{jz?L=VQgMnkk6; zqE{CTwKGK_*zqGx<^w5iF#%zRZw;90;2^>-)qLr*4;9!o&>$5Wt0|FKOFnCumzPRF z&In6OA^@-*(8Qd_!BD@M*PdQW)KF%s$ zq3uAUGBx}y;;JI@g`*{Gl$@d&>7K{%JihwZ-JhlY_v3cmqSi^V{EoXKg{^`1o>LzD zw}kY*y-b47zkg+sE6X=MYL{;Ocg^#k#(NHKJ|5xLcE8osnG=rIN=FzG@suq4t9#MB zJjCZW05~m(ghDuhC_UQYFqVfW<|5k7JnFfR3zwuz#2WnwLllXjonu?8byfR{`@aP*JrW6!?8j9m$7&J&;Aew|7SLS3C(Mhb^S-` z&wX8&L|P}x&vUr{ZDYJg$M@|N|JS+3=Xw5B)Ux~M(A@E^|HVo6&&1}ASA*`gdw;&b zO%Dd|lVv&YZJ=A3p8xh{oZkBleK#xo$IzGk&jJPSIf1~}mNUVN$5#_izuVe}z+L06 z&rLpF_mi`gBH5p#!S&Amd4ta*=Q*y!Mg{J#1q%ORj%ON&&GfpS{f%gTw{;wWw?w0d zc;0I_je7;ZPk<-7@BIVE*TG2rrmGMG&uI{W$0Ey|$64hwX#f3)K<`O#eeY*3hwl?j z-u_}wB`}H7hZfk}AA0q1RQUqv8?(gX3`=Q?HnIE%N@Qo{bgZR7Y>>POs~ID#=mO^E zLX%Uc6QS4epU2QSkAqA%r2f~`^6y1!v@T*=ZfgjhKa@weW;YBk24D95FQ4TCccSls z?L9Zc^`2t}`u-oeTpr#l0-x6~b3gPtrtZF1I{wEiFmeaq*4sCIH$S`IYtJkOPh}ka z&x3a8BFMVI5+tO;E*pAy%{xbdd z>-~34U-cf_(chLj9k| zYx?i|#RuUp9IuD^}C<8xG<-71n}_4(fKZ({~`AN{i)XC&YK{-1Nw{GeXu!>O;vatX>n z)V94|18zhZ2cu*$>%64TAtq-f*DjcXYFFwRg{Ju62dtrsqZo)xi$nK;*luq{<@sy| zegD=L*urI>Vr}?KCN(uz?g-Nc`d$ZnbL-|g-!i*j)4x~ax1Ih%@IOyHvz_uk%Tfs1 z=D+4Nzi)IMnGo22WqxQ!&{@kDT4p4_U3Vkny@Axv* z4Oqtey}A3@V=qeWwSB!$nCm-yq6w^iRWf*QzzEAtx(sW8gW%FK+1FZJ>Svb~WZx9J z9MEC7d-o<=VUr#{f?XHrikRMulVL5ibO(^)F-!|sJ&FPJtbbo76Kt;yx^npMhi&#j zJM(w(OxPZ55zC`7%Xw}?)V)`p3V3Tw8oYGsF#If=^Lq`?7<3)h{nN_o;atyN4n-^V z4}srl`_D%HkJ`1uP1k+#oX3z!Ev@HJJNlrJ3rqR#jo+Nd=ivs=Pw$IAA$F|gll6~a z$I&6d$E2P+|H0sHOMffDDa{Ma*HnGC+Yej*!z)GJ-3)^LkJnB+KhllI(kPN3la0Yo zBElEKuIpf3O8@ohoZelgg72gAn*VuSF!i-oyx-?buCILcz5kxn>Gym14iqQS+u7tr zeO>QGv%&Y~hyUTkDc^}y`PR?i6^!3rt1zo;JIZY>t32Al^` zQJkt@9*^LR%p0q-e_n@7(UE1Z#p+CXYMS*NXqL(7fj(YALJv}I_j9p!mX;7{ipEba z2?4Xm=aKsbeJXd;>GI>>_a?ID^XhDXIUEygdkUxFcMvpH_xAF0)ZadHzQ619{&nqq zi06K-f7Z_L@iwP_iy-eg52_vduz{dgR{N&Asp~#PH)i+t=^|8C^+lrbx$N&HQWr_k zdoj88`5HP^@3W5McN0s{@09)Z{g(fEO7OGpOkgc{MTOuoPomIwBWKXd2XVtAKI|9! z9iHCzVi@5#6VC84WR5oFbx2YF+82-iah3lm)(ujghxti2}j{Mttk}XWBs}B0|@Bhd! zgYRPZpZm?7hyCpSf^^pxHVog3_rLrvZ_iP4{C}02Z1?cS>N>)qDU9oEcl<7yB`cPd zHjnx}J_u;?UPj~fz6KS1e1O;bKJ*}H`YhI7Tiw4GJ^`n>e&p+z3=nHyX#Q_w^&T$- z2G60{JY!*Zvp52d+XH-mPkHZ|7LZ;>vVS5uzO!*|y5ztOelGazv- zV^U!-W$OO$vD#Ns?%OA2GUX75Vnf z(ct~^d&#xVUL)w%)zZ?e{dCuN9Eo+`x%Tn=ewxY8?Z0m&@ThM?{2(~^gTe2AA_x&?IzuWzcQyI)SL!1!>p+eX&t(|Ht62C8clb`+8L8-)y@?*Z*079I8tp$vNAS%3m(q?$49R|;Uv}9vgj4s)N&C| z%^dV+Q4>%hEwS*Kp_9>UC))oRckll;@4Jt9$OE#8~7hQR^OXSx_(3ie?ha9^^ z*r1`hn!E0D3Uu*lmix1=u-zBE=yBhE!4sbL%*TG)JefLrn;~lBw~HWc!UFWmLK;QzajX{ zVI-7yiORuWob&L9zW#rC$-Q3jTX*4N``B-1KhmaDFMj${mNTh$Ty{CjRg@+H_Fp&N zdB?>2Xa4qo-j z>w0r`%7Y(p&Lh6*($D^FV`V72+K6A{gc6?+vQK^Hs_Q>{$=}>~!&eU0 z+@JnW%LhZ)i-(u@weR`Bh2QfW{fcuQb7s8zeRFN|mdih)XAU~suyf+XWzv2IQ$qNdGl-#MQ$KnyCM11<@ z&kw*fCE*8e{mfIpdAT`tU;F)b_NtHF`lT=HS3T{_N4Mwd^~WyP_-pcbW{)W zdfjA0!{f07xVSC{SK#wE_mz40hciz(b-9y=NN0}Uo>GH4kMpH4)~)pU$Vo;sf*Ljp zggA$ZLf@TD)wSREdcER%<^9_wvRnQa#GasM1Tmi@h`Y2O_{3m$vgtAFS@m%QR<7Cz~Q$HRke`05|{2TL4t z5fXd&thMRvnGZLn(EC6B@f&Wx0~)k-eA-RzwIqpq0BtaHr;hlE!4+Keum?W43!oUU ze9k{w;+Rf=IU3hAvpF0&8w{;77zUSsW{bPg5a1CwX2irytK?)yoy8y73a0U&li1GC zDzG=Fn-mdKf1b$*6MCmm85D$~Z~5+Kp)WqHkAMA*7r*A`U)V0)*=L^i)_?Ic*WG;U z<)6CYD|gf4ER_5CFZeRP}{dV@bTH#FaymL}1LcZgyoFq$w$1mu^H52QqhC(e;*q$`RMHEl1Y6@t!t+9M3C7LgWPB+ zCv1)c7?K_VvzpFDy#IqvQt^KV4+Bn(tRFL#v^2LJ^5f8(NB6q&cpUrNn{U1COZy95 zzu+g&`@ZKt={s+^?SLsTBQ|Y4gCvhr)weo?IR1>m;XCyZfR@i`St7ZhnH&sH`+_Rc z%cF%>YKf3*po5bFiBTHh@TdlaM^_`=&2A>zbKUw84vAO7gq zGf^3DXUU}Be+>4QyRP_)FS}~L7GJR*0K1XfRlMjUS1(`q5T0iRJ45{DaP&@}^ig1; zTbE5zZ+7=ySYajm|M$iflYaj(*kA6t;@@@6u{%4Xp_~Mc(?6iOqMhgr#A}}1(WP!? zSq5-(u`WgjKy_x2NJC`6BgcyMC}Qps!-Y|kydN3`V;i$zmjVgL-ZM7{^xz$aCtzd3 zaOBQO*inVm#7lnrPk!Uge{siMU%NLWm3jhy?cxtyeC+DufBF83f60G*%SFeoT<=P& z%!og@`s1yg-Tiv=At889Kh?ci;B=e|E{8tH);lTVC}CfAo^yfAju#{N8&nJzfdg@hHCI zvQ9R>`ZL!byX6)QF-J+#7S^^$P9%?5ID_6n1n!}{sea_(x1WCN@BYX4{n?!>YTADB z^Xfl&{ZGIBclN*j_b>a)HL~8rMwSCCSw}n${4_b8pl?)SF}$sPwIz=7izjT_@9~UK z(+xDr%)$4b`s2SL7mA(PW9D^KGE{D43DxTlZ5jlb=%kOyyCOhz4OLTrnXq^2J&u>O%3(t-OqyI?VnA@+gw!s zK&VHexl@7UWKAa`4V@Uy1#Jhh*oHb|*t);yB@ekq9^$?fQwl{aR9N!ZaE5G;bP0{} zI8o*sipNRq_Uja*1=cJgNK&7WQPK$Kk;}y`l1bggZg>$7x%W4al%{I!c%KW0IV3(ZB6T#_Z zqJOTw?u{a%bb05ZL*3!TYgCBjvlkT+DyCz$K#k|N`}5v>td6I<^&4Dix^swO$G2$@ zu*@uIsUNo0Lv8CMUK-I{6(`#^y^&ih!wrHEYs>0tY<@;(G>sKMHJ7h?!S^<#a=`PJ z46L5|8`YpQ8|Es$m{HvXE22_;JSZTeVs-CANGx5OcFt{~X6Ztv zYmGfJz!EHydn4wlSY32T&k7ID>_Y4O=yqi}Tg>&$ua==a^=AjesVWwxZ5WbrE~mDY zF6m-jzVbN(7k~XBcq9vxWuFAV9NChkQ0C!LDw&>S+TzR?f~?t_jz+^VSwL>{_@(Ea z_n9yJ-Tv!7=sx#3_i<;<2>pHw`_8|)PTqlrCYV$~nRSlXhFAyEK+5TFYn%+V1$OvX zE?YHYXptI~Kb0s*nUB`1OO;!8r)jKb9XVPp3|f&6^IdMzxu`r?xn&?d(pi-MZN-u% zPGxJ#Q5Op*jY%#u!9zTjH|MiXpxJ6I`tAnz=HLI$yG#5cRNygoPSlkenNw|L>q02) z9a<{&l#l}v-iL&%jwe#AYNf*meeXZ`QO`U331^@2sH0G${c8RdfA|)5P_G$irnHz^ zm!PGA!vtm%1@-Vg?Nta=_So}CtClM?X{sK0T36ZXsM=8^URU{zgci<{{9#b^A|6?` zu?jI)ZIL0BjbtVts0ABY0!4QY2z4~re%~{5fw3-@pbga67EMZwMH3z^z%W`^5RbFR|IWMq;$OYz5=^m@ zknJ$FHyWDE%-=TpO%C1jhRD8%!g)=lP_~aEmzGb&IAUysDd$eCWCZW0+9uOV=a7(x z<>l&C(B%59l2h1TK|QksG=iI4hq`27ite5&yTiXcDLi;XOi)?Dw^#s`y5#Bp9&%Br z_2M8Kh?|-wy^PF2sOK7-K;aOS0c7Quz|4gM^#(HIZbOnqisPg?<%?Qc=D1f}`5W*0 zi(|Lks=jN;XqW=kDPB|s=At#(RkvcuZ=tXu} z5oma|A~|P5ZJY;E6*K`O5zP|nM9txi_i#W@a4cQD#l$~6*+~%(7|Hu2R31k`c{YT{ zRF$!6YY(rB-au$hb+yGTn`8AWrar5cDp{KuXxA5nXOH<C(>Vs-(Nx&-Gq zpw&Z-O9V#CGoxos_jA>%?#5sEzeNriSjFx+95k)Pt_YRm${i^j}!zx6MVPN zQHk9-)s_knk`#;8h?;%uWyQT}5tZnR5bo_{x2<)DbQpwgL#|KYkvlfTPx=& zs}x~EY=Bee*1EemF4Y+A!OkIr@VGFHYEh9)9QU=%!4XbF zRT)Cd8%%BD-%j<07qo^ zc!2X`B=r}bRE2E+yiiu)E4_kY^G|g>LQ@T48cWK7=7y5u0<&E=xnbsS6U}(nLeIx$ zgsE$UxkpeVuW)4hvRm}|u#ohP0r2FPHnR`3R2i+H0*D3lFJZz&sZ@1@wQInb4t83HBVW9sg z%v3hvcv$r~?lhpZK4>8Ps-iKjHG1noU*tY-2HZ zj(rRDw3Vz-gWeX@C;GKcQ^%a<*W1X9`Q-KwA`W~eRs5|`9u#CmDf>K?*J5)Qq{gn5 zCot%wW~h2)O0dFtH{G+=(4O;61SI1KW@na-2B2gc^fo(u`+?XfFy}OwmTv7XdVmT1 zgLZ(iHFdDEnDAxG2XkfJeA=}_0gdTC zo+?i`7ZRh@)9@6^Xx<%~%vaS)$)`4~XXmTIxgJ%5EfjC75euEdUu7qCh=fj4*DP=3 z;ivAVIbNuai1N*StKWkj{8n`fssyKQk~mT`X?$>42M{zuP!g&kjPF`V=sa`C`jA$t zV%`EJS?5e_4V|i>w(pvpAkpe*Cnz=9nZ1REp;HQ}0Iitz|}^bwIgsdTZ_kQDn2k^4oSG+2%qErgS~4@m*N;q;$Kuk3)@RIV5E7QDt_hklBJG`U zo7(h`)Mt*~h37)&Fd#(4Q5KAePYN7PZ4IHNQAJ~uKJuI`w&XN+sb_SH^Bu7wA%8u! z3}bbMqd{wfnIn}2ZAMKw+&tFT*n+CsqElaN8({8<*rCKK#`B=`G-E}m9$e~dQ)q1^ zaD7j>NvQTki&S^R>1+StULCYl5e#T8#@Ydh$(LKe93dMuJEA9s{qn=}-{o|Gwt!V5 z>jpWq3rl3Bb`5f}(~{aoCs9)mlo1hR1fr0jKRH?7%={-EXdrY@k$xA|zk&kZr-G5X zFHYGq0hK~mEs{gru(Sg@=*TjTw44q%Aekj!uycjl3btXPt`=GcnFNa|GE+w>+cL33 z28@}^qv=n*rk^FYb!|n_Mc^o2$E;3)Vt@dQR*9`Zr?z%A3KDkP29veg)EBZv^0MQW zXqQ8k^)wmc_=oGIM3RTUrl~Dyo2bL?W?g~ir)G&^mZ^k})$eX|WtvL`7k2qCA?y^>g6yUdO>m4WQ~ z_&B1xaXUcSNN5A!dMTSwL*^_nDID97Mww)AQRYT>G~yoSb93T1GuDUB@ISyt98mtC zQr?M4F~3A4vJESaNuB>tr#FfrX%1yzlL(X17wWkss%#7m{gA`WC})}3JPaKyT{)%u zgcm0G;wS7t^7~4`&k2ZViL*F@4k3ZqV#jtNMvE*2g)HZL>BawSF71Bv1hNJm=I8TET17x=%zqte(N?Y_Tf zbr%e@=|}kldAgm@JmEI`apM?ZBrv2-f+P%G(8T573WEdDdu1xa6aHuPdA?}eVQHp8 zq5k_xjc6bmL?+pjqG6Wn6E`uL&@oRr8M3ug6B&&(nkIBHX+vEshiTG};rYO5Qw1?X zr;ueB9wQudPN58)A#5)gLNQa`lcYXn8E|3tVYrN$;z@l$9$)6UmnX~IRpqhf75KdM zDs#`y<^-%&GG;>FI0*Lp%1f%pD-WU zqV_si3w=Xa3Dgj z+Qtm+4tBK-0B7#PXk2E5h$J)W8NaisF$)MpyC6pZE_;(X^cW~@TQ3w^ofRF^WXiUA zMcZUxtD{gFRSB5~;hzF-jsvZX%Q(EW1+f`;Chc5A3{cLkW%?yDLq_+8fnYleHUJhY zF|_s<%ngk*`?zEMx2t{%d(t<~meD6^>qG9^k_Yn~`PLJe*hok!5d zVWcrNvz=4%Pze1>Mf<=3P|R7oWjnSCNPVhnGw;U0G-!iITkU z7fyL+iMwec>@LPJ9stnq8Je{>AWM*&FA^ z@;Kt`t}-rdWRycjnC5RA5~4IT{ffyve$EjEBAPBpeSmcrPoffIrY<)=wo7$O`ZE@$tP+SdNYS<0PE7$B zP%ckYOoV2nb^KMoH|k&tC33fVG9b@r-Lj&nEEtB8DH8M2&5?6nbU}jKZ zwY?EaBIXo1ie4bq^o`T!O4_}K5P>!Cgq4`G<%>C^o64JfQxT!kB!wl;)D10%3!+@G z=`9e#TTGzUYDA;eqck^I47Ph~qCB?dJhUKkwkWhwaO!j(ii$BTKx%m6xn~oxw3@4` zg37bt8eU(pEZugvxh{fB1K|R>8P1=9W2ajqC@xu>=t?BGDvl>z8Hfqj=rb0ltr}-brM2KK5x(}eN`4E!^W=Nlu1#Wv}sKv4>FOJQaQlQb0m z+4%I)iho#X#%Q~>BKz>NP1Z}l578nNsL`oo?q~d#;!A}XsyCoWYQQA;>iMGc0brgG z&1Au>2X-t5&E4Q|Or{vNlnk^l3B^kYnRyjZh|qdZn#wRUA1R|#J}%BbD{F-sk*L+r zNMjOqt=Psw%pRPb?uUW9LCXYNqjUSCK1M4P!kPFCZ0#AUG9FNE+pcmI67#lr)Tn+c zZ+iQ!v+n3YQ^zZqXr8~I`)9c693s1x(N&q(jqJly+?ga6(5+h;!&*e9upS+?Vcndk z+4CHqvtXoDtU1G=n$P#*i>n798rCr>n3%H?waN}PTx=a5*zFaqnGypP9nj@$8N)r( zF)y^Kz7<0-`zA=jigC0Zm9}w8@n$%~>zJtrdP)ms#+Hr6BSuNJ)05$jCMp1J&Db2C zBNPr;q*Y{0Y9Q4}#kA*R4$HdpMA z+TuC*gIpcUOV?o97-+PQ;_#MBPb4SkBw6RT+WtLZBh8bEncRR926904Y=zU3Hq^$6 zVLBBNfQOgTroEWxcC%TZW;u*A2q+U(p!q$s(#(>GA9IuBPMD?|ftnyB$R(0uq3@Tp z6Vk`g=SmX)M5^+Ec67~yf}?R86tx%yztkvgL_U-ePs|2!oiA?SV3e#8qb6|F(JwtG zZ?2fcm_SNH*kjfNZ%p^Sih0p+p%PHQc6OtMW1d#YzJd<6!-q;e_ZvKd4KsYwb2Qv- zhWG#S?s9=7IhUDipgEi8gH;a0MTsy&fpls`S0ltxf@opti1?XlGF)>pWEL!CUt<+H z+YpDLC^rRVLK2MST&X((9Hk6A61{23FP_rU5>T;bkIrKWs9=VI8C38PTRz^{l!W3I zYH=a&$#^5EkKo%u^>P+qHv$E;(A3B$Pjv#-6CFyRb2XKnaa>S*n^|DnIK`n#5I)FX z0p?^h8!I@ibRxa%>OG>ceB&FJPRgW^sheU;6;NF?jJpF!!dG5Xp%5a+k*Qem?Z*xz z&NO1(JzchbBI|ySCORmZ0Mla?jSD>uaM75(w);Umj1*zkT|dXM!($4d+n7W8%2KK@ z1$!|yU})pV!p5k>qfT@k8Zi||mhCH}#o1@Y&o*G|>{tlvs|Gb~(rnh~n*29xKf8rz za{#dO+O74vt_ooySg}{I2~bn7g);?#e$ufmUnBXnaJ^x|+~1aR>9uE@`0?Je^N0Y2 zqiF~zb)P^2Y(3HZ;3-O}4uEFzH>5#CnB1#-{7DpMEaEIlwR6!ae$hD+_|CHhO6fGr z#N(1}r)orNs4aLon*rUnutuS<5jSwDrkec2PBA7d67E~O;sOCDw%`wbom2(Z6u?24 zp&eUne4b=FgR9D@k_c!IxGNc<$q00BGtBJpsa?@q#qK+7Y}m>uAKV8^*RXd0YH~(J z0OaphnAp#$nKtOTX(|L}hw8(9=9rP3A;~GB5qS$nJNkT8bmbPaO3+BqwH(*k*O*S- zPP1i$0O;bJmK#B_mME>aS?5R~5=%E6Ho>*23+^c&Ov@V!grK|h8<`i%w^t`_;}~OD z@guUg~I~7$OdzkpcV{lJ1Zyg&5lT#0SvT)AMnlFa~7gTUbTsL*_dMb z3ZJdm-Bxi`3PMk|$+nVcN8?dmvw};=Tzvyp#%RrmoHPT>@od5THWm!MJCl&9adND<&7+^;Sm3g3xFOLBR^@k=gWsrLG_I zqAmGDQ!aub35EF}0}GtHNJeP<^bnI4AK9=iG$+(Xw~}({wc<&m?S^*R+#D$kI`7`^ zs_IK{OqFdAFq^tT8U?UHH#8xRzCIlPce(>z{vl8a+5BWCs*gVD>N z15Zg_tORt=J}Lg2E3sP}$0IXeL74+nL2;9KwWx}bN+f}-h_2ml86Ub^vPl-&o2OtO z7GFchG7xiydcEIZQ!6s(1}GqJKY;=r(Y zn>gBt;Jw`Gt;o_RS`tW@!_eHF2+3 z{hlTilm)D88(lx6kZTx+s-ghIXR$dA!kv|>5kS)q!tZg@!DsqR-ErM{MkHdwd1pb5e&DP5)n!k&NvDb}D1Hz4EK*j)(`0>Ls?8=~ZT+jQ2^Q%TG) z?`02k=sfV5H;WE~4H$>5MlkE_ai~D>wu8zYA+a$f$J7W(dL>3$ z+Q40dP9?0VI(^ZK9Z>R_8bwEXqk&=(@Ml<4vC+KkNAP8+)2;xatX8L7W~o|mX@Ou* zStAybc4{!Dm_Rw8vN{CO4F0;99@2P3mAFTQ%b24pPN0K5S{QDXt2^gtgiGeA>$!{t z?GcNL8M4#6M~k7ulL4pUytz8;Qib`pV(>kv0692KHWv9)La}C%NtTKyXCzHZv8i!D zR1j$eTV%^VU<{0OJ%z$}M3S>^=LLad|Do@g;a=J&F^G2QZQlw^hKE4sMaQcLpz+p> zsYiszbHR5JRad6y4q8{FfsBh*)0mqJYA$Jbj1ApbGm0MgBXtyqvm?x|B{d7tvJvbV z7OzK649c$yuN*sl-!iBM4Lz?D&aSnlEZGErDLjbqWGQWhmYREHr|Rgt>?{;N>nVqh z3%9}ywb)jK6liEjxrW}FPd~e7ziwAp-3Ie1qU3nWodz4yN@n9H_LE1Hdq z;+lb|%J^ZYqkLWEOv7;l3x59?*q|B6r4gPvZk-Kt65oqVTZP#+6rqK-e}xX zO(?g0mW`AtB4$d1t+!hT!o?tR)q1D=(hcv`^i}iv^chh&J57W<95rIaWu6Owue+vK zsbk32GxM3))aMvUpHzNw-5e@SYi5nmcMrkZp;)+-bc9Wo#3iYv=uw+=Oh9NplAPd6 zp@mef1vjX-PfLjcV&#CMYmhke?z`}~2A+le5*;8nP@NWGRaRN%Ri4Wc#`?vSwAtTg z#L8%(J5~rwia6BY6b}+5$G6_EwPCisnm(ja61!o2oR1QGo*f8Y{Y($R|ASq^TS-1CQ5IZk=N0`yA zX3Q1WVtXk&>sIJA3lj+p3?Noj?E1ZKYoZQGR2>EN{_^CW@ZQP-Bq?mhERG;1GPZY9 z=I+V|V+~ct^aPWKxXd{bMs5_7eP5#H1i^(%*JKWZDjl}9HF@^I2ZhN6L{T}^T}o>w ztn|^`!fjD`*7}n41uzbU7JLDZJ*Lm#Lje)Al-&6G>zcmkK}Wz=mI}&?P&25r0=x!>5BbMF_zMNTkJ}N$J z8$Z~pe7#df-b2n6!CY49s3Ux58!AiI>nyPL5fd=hUxg%w*yre>;Z0HNGSOyvH7sI} zB!P|G*hH}%MWI(~!^HtjRY6%Wp2S!6(+F;{co=cdg}4}lO}pzGVPlcNi026&!9+tc zR~r^kLk`7jfWB+e;CQyD0ovp=M%Z|!j7$~N;8%fh%rSj} z)(^+Y(k$4So?IYJE`i!|pd&upL&Tx7(*#?3UG8Bd`Q%FXS;b9FW7hMob`@H3NX-6M znfzxfSHuD78|joU2sw`IoKWi~4-nvlw8LJ`BAnL|n6 zB6WhqYTjePo;6i6XBK^_MU{3aH8Y0m4e{lL3h-SZb$Q;^k3 zvajP?P}CG9d-W@rzC8E3o?nM23tgTe9wpu(k>0qKg{lx|P}=FJ@SkoUVYAFGT%sey zquirTD2Ji5khCfqGCT`gZ9cJz1NSErZP1wQAk_;@?=o90u7o0~*reh?4TvD)Ev`EO zNEOgrfM=qJIyiVuAX6A=-sItQs-OL_8DUcgE z;TZ1aMvr@fEHz`u|ImfbN!HT@JNUi@W-|t<^i|37Qzl3d9R#6aTyhlUq!vJxN_4$o*-wig<|r*5)7Kw|8WnkAxCYcDJS?-^nB z(#9fyt+Nplq9KjsR@3)f2w|u!)e>D~{uP}TJZHIX=4=;)D=G(vGDfi*+E$Bd)0B?) zo?w2rgHHnH;n~k+&CpEU%d?3Qt&Ag5YEsm*n6rxh^+w;FMqJt%po?~m6W7EL0H1Px zl|EEmxBk%|j||}@kp8Mz)oOVZadTCg=@}<8$T8PktHsa3j#K#jA3*4l+hBFBd(1x^ zl+~SxLeh~-Mg#dHuv#^uNo+GGGbrdS8)ip735BATqjtBtP1~JAXjdN;%E}@pb2UaI zwC6jD>I#+99dPM+S<)}Re^LJ;T9ugpBc`Mr*`t_>7w&U$4t&?@O1Ck${_7e2KIzrs zO?5s-%RK(wO6?|hg;q*iCuSmV&+NX~iWT})D2a^hUPIYA+w2(^9Wx~`gf851Cs!jS z)ahZ6dDy$~bP&0%i;ZMw0*#LJik!Nz3wu2PB`k)wU~}lV`G6?Sr6ZJN3?xGFR;Cl3 z+FUJDPdGtd>kC=4n#u&HoF|~}qBwlVjFB%fM3}QH%&uC0BPZ_ZO(sOU$^TvGMRg`N z^5|PmGELjC#Qnx(Dnh%Ls@V~x#~70^M-$=TL= zDD&WzhJjT)P7bR;7plmSwZ|z=^lptVMj$nv@|^Lq6ePr? z>JnUkt9u&aICIJQg|Cgnw7|I^^$OO4OyE>{cD@ecYJ9`%F%zlLse8H;A?tTj4}7st zisgJz6sGD3U#;)0xliWz&iuF~JcX)rw2!JVLEjr351GVVHXmS0Dl{{rhYNt!c-OVA z`NECG`HksKR&^e2$`N=;4jp8k`hp8WM-HqewONyQdK}uC=5jUo9AD5X)q&Jae`3^l@(3wQe{wp?QV~bE=XZI z9PB8`oA{JEleV3t&1kBO7Tir6LwuWNTzN+G#cqd#Bh&*;c?CZRgRcM2b^58MC!V%i zOU8%n@i^N3FL!zr0J^k*YpTnI9$eQsS}n6E?yxcdkV5xtcBo2wLOltiGmrOhfyi{F zE6uIhCAc5b4Ef_3VTB7ATrwYiis}Ur-Q;UUBJ#z=5Q56#y|TDc!5*@^ISkx0iXmNH zAs|zbb12UClmgh0RF}#vmU`ptcdY9l$%*fc?D_pDcN|D@JagwY^GIU=%efoGkn@B* z7L2S1y$Dg!5$EBtxPpZ=TEFjxoxRn{gzXwn8v+uzn6#4k6$3~^CK;}H2J6;b-9zCf zR+jFZT_{+OnC>j#oVYW_j$Hch*|-W*(}*`gD+;ICMcmXPgvoBxz&Zl(t@CrL{4%*s z1$=}zUZot?1pWP24#od$WX~JT6p=kqt-n>Iwio$*$*vW?YG`WA}`%2GgH@ywYEkL`bpw zr0>$Pir6p>Q#rS4ur3Nap%2n2_glD;VKAjk6aVu!iJ1$!*N+&7&Nefner7%UQen_S z@mmi)?aU|)x$=12D;|vOvC@16&u%wsfTO;j?%pUiSl^GoJ-zM{=w~~6Uuc>?k+4L6l5Q?cq_JLbQWo^{8{0ydYeORG*oAmaisHfoIlJ7SLWMobaq1g;NvN-u@= zkWC%UAC4z8Jx1xE8I$)!6hfPH-6|3DV-~CqLu)2p`p8ZvQaZ3oz6|2^&T_150Pw+R z@oY4lWpTo(JbRfG%dfvTf+a)B7mtKz7!OSJLep8di`)>VqR zWO)Y9(KV1(x-*u3lEW6Qenp`B*g@y^Ta*PH!}+%@m2eM$7niHX-0u_~-ga3e)f}2x zB=x7!`k|xMPwcG$W!3FAmz$b;z**$vCej1Q_M~+RTA`uPAkmpsNC1aMo?l1+^`X2H zoA8>YNEwgx=tDIZOR;bZ!uY4PjeeFPRF+zpx|s%gw$-t6WO zp1Q<6ypaG69`{;(N0)Lg7qhdU!qY83v=2*>^_A_F(Op;6G+LfO4BG%h83kAb_nl^s znoTtB3$#}!&iORrzB0+@D^h61+YH_Alo1p7ipwx;gc-p%2aliIq`)3ypECb!>G?_i zTw(T_-l&JQGiCUS96RM!Cv8sIZ;Vhl*dDsOl&JP|wxd>?<;s8Wi+s&E*25>oCz|yk zF3(OHf%a&X>dv7=`$&dSS+S4iY`Pq~!2@oeRMDL|a#_AQ3o8XI_pchI2R1(U>FcX$ znKSGVXX73<;mUv_Gv6d<9qpbKl*ES-+xVSRx>#wq=K2|CoUjIjFV&H zil|=s+o{Ul!5dys=g|98WBt{szg*)Ga#k%eIt!=e(%=KzSIh1iz+s_r^CPaF1@nH5 zf8DBbua_LWJ(RD?7w%~fX$dquhIYJ4*O;5ns)o$kTLwu6esVn1-m2P}PRx{hI;eDq2}rdEM+ zLFt~BCrR*md)H$JCZ^LjCSNTw`^yvoNgRKN+9zf+6m{iUt9o_R!GH(3&Hdh4YQ&bQ zE3_>^Q0$fx9R)LCAmJm;@^rhC3gb!S^ie9=LvA(Y`BT^`k{NXT - -## Cite this work - -If you use [Containernet](containernet.github.io) for your work, please cite the following publication: - -* M. Peuster, H. Karl, and S. v. Rossem: [MeDICINE: Rapid Prototyping of Production-Ready Network Services in Multi-PoP Environments](http://ieeexplore.ieee.org/document/7919490/). IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN), Palo Alto, CA, USA, pp. 148-153. doi: 10.1109/NFV-SDN.2016.7919490. (2016) - - -# [](#get-started)Get started - -Using Containernet is very similar to using Mininet with [custom topologies](http://mininet.org/walkthrough/#custom-topologies). - -## Create a custom topology - -First, a Python-based topology has to be created as shown in the following example. - -```python -""" -Example topology with two containers (d1, d2), -two switches, and one controller: - - - (c)- - | | -(d1) - (s1) - (s2) - (d2) -""" -from mininet.net import Containernet -from mininet.node import Controller -from mininet.cli import CLI -from mininet.link import TCLink -from mininet.log import info, setLogLevel -setLogLevel('info') - -net = Containernet(controller=Controller) -info('*** Adding controller\n') -net.addController('c0') -info('*** Adding docker containers using ubuntu:trusty images\n') -d1 = net.addDocker('d1', ip='10.0.0.251', dimage="ubuntu:trusty") -d2 = net.addDocker('d2', ip='10.0.0.252', dimage="ubuntu:trusty") -info('*** Adding switches\n') -s1 = net.addSwitch('s1') -s2 = net.addSwitch('s2') -info('*** Creating links\n') -net.addLink(d1, s1) -net.addLink(s1, s2, cls=TCLink, delay='100ms', bw=1) -net.addLink(s2, d2) -info('*** Starting network\n') -net.start() -info('*** Testing connectivity\n') -net.ping([d1, d2]) -info('*** Running CLI\n') -CLI(net) -info('*** Stopping network') -net.stop() -``` - -You can find this topology in [`containernet/examples/containernet_example.py`](https://github.com/containernet/containernet/tree/master/examples/containernet_example.py). - -## Run emulation and interact with containers - -Containernet requires root access to configure the emulated network described by the topology script: - -```bash -sudo python containernet_example.py -``` - -After launching the emulated network, you can interact with the involved containers through Mininet's interactive CLI as shown with the `ping` command in the following example: - -```bash -containernet> d1 ping -c3 d2 -PING 10.0.0.252 (10.0.0.252) 56(84) bytes of data. -64 bytes from 10.0.0.252: icmp_seq=1 ttl=64 time=200 ms -64 bytes from 10.0.0.252: icmp_seq=2 ttl=64 time=200 ms -64 bytes from 10.0.0.252: icmp_seq=3 ttl=64 time=200 ms - ---- 10.0.0.252 ping statistics --- -3 packets transmitted, 3 received, 0% packet loss, time 2002ms -rtt min/avg/max/mdev = 200.162/200.316/200.621/0.424 ms -containernet> -``` - -To stop the emulation, do: - -``` -containernet> exit -``` - -# [](#installation)Installation - -Automatic installation is provided using an Ansible playbook. Requires a bare-metal machine or VM with Ubuntu **16.04 LTS**. - -```bash -sudo apt-get install ansible git aptitude -git clone https://github.com/containernet/containernet.git -cd containernet/ansible -sudo ansible-playbook -i "localhost," -c local install.yml -``` - -# [](#references)References - -Containernet has been used for a variety of research tasks and networking projects. If you use Containernet, let us [know](mailto:containernet@peuster.de). - -## Publications - -* S. v. Rossem, W. Tavernier, M. Peuster, D. Colle, M. Pickavet and P. Demeester: [Monitoring and debugging using an SDK for NFV-powered telecom applications](https://biblio.ugent.be/publication/8521281/file/8521284.pdf). IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN), Palo Alto, CA, USA, Demo Session. (2016) - -* M. Peuster, H. Karl: [Understand Your Chains: Towards Performance Profile-based Network Service Management.](http://ieeexplore.ieee.org/document/7956044/) Accepted in Fifth European Workshop on Software Defined Networks (EWSDN). IEEE. (2016) - -* Qiao, Yuansong, et al. [Doopnet: An emulator for network performance analysis of Hadoop clusters using Docker and Mininet.](http://ieeexplore.ieee.org/document/7543832/) Computers and Communication (ISCC), 2016 IEEE Symposium on. IEEE, 2016. - -* M. Peuster, S. Dräxler, H. Razzaghi, S. v. Rossem, W. Tavernier and H. Karl: [A Flexible Multi-PoP Infrastructure Emulator for Carrier-grade MANO Systems](https://cs.uni-paderborn.de/fileadmin/informatik/fg/cn/Publications_Conference_Paper/Publications_Conference_Paper_2017/peuster_netsoft_demo_paper_2017.pdf). In IEEE 3rd Conference on Network Softwarization (NetSoft) Demo Track . (2017) **Best demo award!** - -* M. Peuster and H. Karl: Profile Your Chains, Not Functions: Automated Network Service Profiling in DevOps Environments. IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN), Berlin, Germany. (2017) (accepted) - -## Links - -* [Mininet website](http://mininet.org) -* [Maxinet website](http://maxinet.github.io) -* [Docker](https://www.docker.com) - -# [](#contact)Contact - -## Support -If you have any questions, please use GitHub's [issue system](https://github.com/containernet/containernet/issues) or Containernet's [Gitter channel](https://gitter.im/containernet/) to get in touch. - -## Contribute -Your contributions are very welcome! Please fork the GitHub repository and create a pull request. We use [Travis-CI](https://travis-ci.org/containernet/containernet) to automatically test new commits. - -## Lead developer - -Manuel Peuster -* Mail: -* GitHub: [@mpeuster](https://github.com/mpeuster) -* Website: [Paderborn University](https://cs.uni-paderborn.de/cn/person/?tx_upbperson_personsite%5BpersonId%5D=13271&tx_upbperson_personsite%5Bcontroller%5D=Person&cHash=bafec92c0ada0bdfe8af6e2ed99efb4e) diff --git a/docs/jekyll-theme-cayman.gemspec b/docs/jekyll-theme-cayman.gemspec deleted file mode 100644 index f5363f3..0000000 --- a/docs/jekyll-theme-cayman.gemspec +++ /dev/null @@ -1,19 +0,0 @@ -# encoding: utf-8 - -Gem::Specification.new do |s| - s.name = "jekyll-theme-cayman" - s.version = "0.1.0" - s.license = "CC0-1.0" - s.authors = ["Jason Long", "GitHub, Inc."] - s.email = ["opensource+jekyll-theme-cayman@github.com"] - s.homepage = "https://github.com/pages-themes/cayman" - s.summary = "Cayman is a Jekyll theme for GitHub Pages" - - s.files = `git ls-files -z`.split("\x0").select do |f| - f.match(%r{^((_includes|_layouts|_sass|assets)/|(LICENSE|README)((\.(txt|md|markdown)|$)))}i) - end - - s.platform = Gem::Platform::RUBY - s.add_runtime_dependency "jekyll", "~> 3.5" - s.add_runtime_dependency "jekyll-seo-tag", "~> 2.0" -end diff --git a/docs/script/bootstrap b/docs/script/bootstrap deleted file mode 100755 index 492e553..0000000 --- a/docs/script/bootstrap +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -set -e - -gem install bundler -bundle install diff --git a/docs/script/cibuild b/docs/script/cibuild deleted file mode 100755 index f627530..0000000 --- a/docs/script/cibuild +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -set -e - -bundle exec jekyll build -gem build jekyll-theme-cayman.gemspec diff --git a/docs/script/release b/docs/script/release deleted file mode 100755 index fb400aa..0000000 --- a/docs/script/release +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh -# Tag and push a release. - -set -e - -# Make sure we're in the project root. - -cd $(dirname "$0")/.. - -# Make sure the darn thing works - -bundle update - -# Build a new gem archive. - -rm -rf jekyll-theme-cayman-*.gem -gem build -q jekyll-theme-cayman.gemspec - -# Make sure we're on the master branch. - -(git branch | grep -q 'master') || { - echo "Only release from the master branch." - exit 1 -} - -# Figure out what version we're releasing. - -tag=v`ls jekyll-theme-cayman-*.gem | sed 's/^jekyll-theme-cayman-\(.*\)\.gem$/\1/'` - -# Make sure we haven't released this version before. - -git fetch -t origin - -(git tag -l | grep -q "$tag") && { - echo "Whoops, there's already a '${tag}' tag." - exit 1 -} - -# Tag it and bag it. - -gem push jekyll-theme-cayman-*.gem && git tag "$tag" && - git push origin master && git push origin "$tag" diff --git a/docs/script/server b/docs/script/server deleted file mode 100755 index d8c3e15..0000000 --- a/docs/script/server +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -bundle exec jekyll serve -- 2.25.1