Skip to content

Commit

Permalink
Merge pull request #9 from lasseufpa/onos
Browse files Browse the repository at this point in the history
Replace Ryu with ONOS
  • Loading branch information
glaucogoncalves authored Jul 20, 2023
2 parents b203e08 + f7eb96f commit 0ae2e6a
Show file tree
Hide file tree
Showing 5 changed files with 241 additions and 12 deletions.
5 changes: 5 additions & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# DO NOT CHANGE THIS
export ONOS_DEFAULT_APPS=drivers,optical-model,hostprovider,lldpprovider,openflow-base

# Add here new apps when needed
export ONOS_APPS_CUSTOM=openflow,fwd
194 changes: 194 additions & 0 deletions .tmux.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
# Credits to https://github.com/klaxalk/linux-setup

set-option -g assume-paste-time 1
set-option -g default-command ""
set-option -g destroy-unattached off
set-option -g detach-on-destroy on
set-option -g display-panes-active-colour red
set-option -g display-panes-colour blue
set-option -g display-panes-time 1000
set-option -g display-time 750
set-option -g history-limit 5000
set-option -g key-table "root"
set-option -g lock-after-time 0
set-option -g lock-command "lock -np"
set-option -g message-command-style fg=yellow,bg=black
set-option -g message-style fg=black,bg=yellow
set-option -g mouse off
set-option -g prefix C-b
set-option -g prefix2 None
set-option -g renumber-windows on
set-option -g repeat-time 500
set-option -g set-titles off
set-option -g set-titles-string "#S:#I:#W - "#T" #{session_alerts}"
set-option -g status on
set-option -g status-interval 15
set-option -g status-justify left
set-option -g status-keys vi
set-option -g status-left "[#S] "
set-option -g status-left-length 10
set-option -g status-left-style default
set-option -g status-position bottom
set-option -g status-right " "#{=21:pane_title}" %H:%M"
set-option -g status-right-length 40
set-option -g status-right-style default
set-option -g status-style fg=black,bg=green
set-option -g update-environment "DISPLAY SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"
set-option -g visual-activity off
set-option -g visual-bell off
set-option -g visual-silence off
set-option -g word-separators " -_@"
set-option -g aggressive-resize on
set-window-option -g allow-rename off
set-window-option -g automatic-rename off

## Status bar design
# status line
set -g status-justify left
set -g status-bg default
set -g status-fg colour12
set -g status-interval 2

# window status
setw -g window-status-format " #F#I:#W#F "
setw -g window-status-current-format " #F#I:#W#F "
setw -g window-status-format "#[fg=magenta]#[bg=black] #I #[bg=cyan]#[fg=colour8] #W "
setw -g window-status-current-format "#[bg=brightmagenta]#[fg=colour8] #I #[fg=colour8]#[bg=colour14] #W "

# Info on left (I don't have a session display for now)
set -g status-left ''

# loud or quiet?
set-option -g visual-activity off
set-option -g visual-bell off
set-option -g visual-silence off
set-window-option -g monitor-activity off
set-option -g bell-action none

set -g default-terminal "screen-256color"

# The modes {
setw -g clock-mode-colour colour135
# }

# The statusbar {
set -g status-position bottom
set -g status-bg colour234
set -g status-fg colour15

# EPIGEN_DEL_BLOCK_COLORSCHEME_LIGHT {
set -g status-left "#[fg=colour15,bg=colour26] #S #[fg=colour103,bg=colour236,nobold,nounderscore,noitalics]"
set -g status-right "#[fg=colour239] #(echo $ROS_MASTER_URI) #[fg=colour239,bg=colour236,nobold,nounderscore,noitalics]#[fg=colour248,bg=colour239] %H:%M #[fg=colour15,bg=colour26] #H"
# EPIGEN_DEL_BLOCK_COLORSCHEME_LIGHT }

# EPIGEN_ADD_BLOCK_COLORSCHEME_LIGHT {
# set -g status-left ''
# set -g status-right '#[fg=colour15,bg=colour241,bold] %d/%m #[fg=colour15,bg=colour245,bold] %H:%M:%S #[fg=colour15,bg=colour241,bold] #H '
# EPIGEN_ADD_BLOCK_COLORSCHEME_LIGHT }

set -g status-right-length 50
set -g status-left-length 20

setw -g window-status-current-format "#[fg=colour236,bg=colour239,nobold,nounderscore,noitalics]#[fg=colour253,bg=colour239] #I |#[fg=colour253,bg=colour239] #W #[fg=colour239,bg=colour236,nobold,nounderscore,noitalics]" # EPIGEN_DEL_LINE_COLORSCHEME_LIGHT
# setw -g window-status-current-format ' #I#[fg=colour250]:#[fg=colour255]#W#[fg=colour50]#F ' # EPIGEN_ADD_LINE_COLORSCHEME_LIGHT

setw -g window-status-format "#[fg=colour244,bg=colour236] #I |#[fg=colour244,bg=colour236] #W " # EPIGEN_DEL_LINE_COLORSCHEME_LIGHT
# setw -g window-status-format ' #I#[fg=colour237]:#[fg=colour250]#W#[fg=colour244]#F ' # EPIGEN_ADD_LINE_COLORSCHEME_LIGHT

# }

# set vim control
setw -g mode-keys vi
bind -n F2 copy-mode
bind-key -Tcopy-mode-vi 'v' send -X begin-selection
bind-key -Tcopy-mode-vi 'y' send -X copy-pipe-and-cancel "xclip -selection clipboard -i"
bind-key -Tcopy-mode-vi 'C-V' send -X rectangle-toggle
unbind p
bind p run-shell "tmux set-buffer \"$(xclip -o)\"; tmux paste-buffer"

# key bindings for moving over pannels
# binded to arrows for normal people
bind-key -n M-Left select-pane -L
bind-key -n M-Right select-pane -R
bind-key -n M-Up select-pane -U
bind-key -n M-Down select-pane -D
# binded to yuio for me
bind-key -n M-y select-pane -L
bind-key -n M-o select-pane -R
bind-key -n M-i select-pane -U
bind-key -n M-u select-pane -D

# colors
set-option -g default-terminal "screen-256color"

# remap kill button
bind-key k \
split-window \; \
setw synchronize-panes on \; \
send-keys "sleep 1; pwd >> /tmp/tmux_restore_path.txt; tmux list-panes -s -F \"#{pane_pid} #{pane_current_command}\" | grep -v tmux | awk '{print $1}' | while read in; do killp \$in; done" C-m exit C-m

# you still want the original bindings for splitting? CTRL+0 for horizontal, CTRL+9 for vertical?

# EPIGEN_ADD_BLOCK_TMUX_OLD_BINDINGS {
# bind -n C-s split-window -v -c "#{pane_current_path}"
# bind -n C-d split-window -h -c "#{pane_current_path}"
# EPIGEN_ADD_BLOCK_TMUX_OLD_BINDINGS }

# the new key bindings for splitting, CTRL-9 ( like CTRL-( ) for vertical, CTRL-0 ( like CTRL-) ) for horizontal
bind -n C-9 split-window -v -c "#{pane_current_path}"
bind -n C-0 split-window -h -c "#{pane_current_path}"

# bind c new-window -c "#{pane_current_path}"

# remap Ctrl-b
set-option -g prefix C-a

# Smart pane switching with awareness of Vim splits.
# See: https://github.com/christoomey/vim-tmux-navigator
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
bind-key -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L"
bind-key -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D"
bind-key -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U"
bind-key -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R"
# bind-key -n C-\ if-shell "$is_vim" "send-keys C-\\" "select-pane -l"

# allow to use vim's ctrlp from terminal

bind -r C-h resize-pane -L 5
bind -r C-j resize-pane -D 5
bind -r C-k resize-pane -U 5
bind -r C-l resize-pane -R 5

bind -n C-t new-window -a -c "#{pane_current_path}"
bind -n M-u next
bind -n M-i prev

# EPIGEN_DEL_BLOCK_TOMAS {
bind -n S-Right next
bind -n S-Left prev
# EPIGEN_DEL_BLOCK_TOMAS }

bind -n C-S-Left swap-window -t -1
bind -n C-S-Right swap-window -t +1

# reload config file (change file location to your the tmux.conf you want to use)
bind r source-file ~/.tmux.conf

# make delay shorter
set -sg escape-time 0

# Toggle synchronize-panes with ^S m
bind s \
set synchronize-panes \;\
display "Sync #{?synchronize-panes,ON,OFF}"

# make window/pane index start with 1
# set -g base-index 1
# setw -g pane-base-index 1

# example of interactive tmux commands... maybe it could be used in some way..
# bind C-e command-prompt -p "session?,message?" "run-shell \"tmux list-windows -t %1 \| cut -d: -f1\|xargs -I\{\} tmux send-keys -t %1:\{\} %2\""

bind-key m run-shell "~/git/linux-setup/scripts/tmux_mount.sh"
bind-key u run-shell "~/git/linux-setup/scripts/tmux_unmount.sh"
11 changes: 11 additions & 0 deletions onos.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
version: '3.4'

services:
onos:
container_name: onos
image: onosproject/onos
expose:
- 6653:6653
- 8181:8181
- 8101:8101
network_mode: host
26 changes: 19 additions & 7 deletions run_demo.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import atexit
from logging import info
from mininet.net import Mininet
from mininet.link import TCLink
from mininet.node import Docker, RemoteController
from mininet.topo import Topo
from mininet.cli import CLI
from mininet.log import info,setLogLevel

from src.routing.mininet_based.routing import StaticRouter
from src.topologies.nsfnet import NSFNet
Expand All @@ -12,8 +14,11 @@
# - configures sFlow on OVS
# - posts topology to sFlow-RT

with open("tools/sflow-rt/extras/sflow.py") as f:
exec(f.read())
#with open("tools/sflow-rt/extras/sflow.py") as f:
# exec(f.read())

net = None
#router = None

def main():
### Init network
Expand Down Expand Up @@ -60,11 +65,11 @@ def main():
net.start()

### Routing
router = StaticRouter(topo)
router.view() # view network topology
router.reset() # reset any routing trash from previous runs
#router = StaticRouter(topo)
#router.view() # view network topology
#router.reset() # reset any routing trash from previous runs

router.route(src=None, dst=None) # every host can reach every other host
#router.route(src=None, dst=None) # every host can reach every other host
# router.route(dst='h2') # every host can reach only h2

### Start mininet CLI
Expand All @@ -76,7 +81,14 @@ def main():
### End network

net.stop()
router.reset() # reset routing
#router.reset() # reset routing

def stopNetwork():
if net is not None:
net.stop()
#router.reset() # reset routing

if __name__ == '__main__':
atexit.register(stopNetwork)
setLogLevel('info')
main()
17 changes: 12 additions & 5 deletions start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,17 @@

source $HOME/.bashrc

if [ ! -f ~/.tmux.conf ];
then
cp .tmux.conf ~/
do

# set paths
SFLOW_DIR="$PWD/tools/sflow-rt"
SETUP_DIR="$PWD"

source ${SETUP_DIR}/.env

dir_exists () {
if [ ! -d $1 ]; then
echo "Directory $1 DOES NOT exists."
Expand Down Expand Up @@ -33,9 +40,9 @@ fi
# 'name' 'command'
# DO NOT PUT spaces in the names
input=(
'sflow' "$SFLOW_DIR/start.sh
"
'ryu' "cd $SETUP_DIR/controller/ryu_app; ryu-manager dumb_switch.py ryu.app.ofctl_rest ryu.app.rest_topology --observe-links
'onos' "ONOS_APPS=${ONOS_DEFAULT_APPS},${ONOS_APPS_CUSTOM} docker compose -f onos.yml up -d ;
sleep 20 ;
sshpass -p karaf ssh -p 8101 -o UserKnownHostsFile=/dev/null karaf@localhost
"
'routing_server' "cd $SETUP_DIR/controller; python3 server.py
"
Expand Down Expand Up @@ -144,9 +151,9 @@ do
fi
done

$TMUX_BIN select-window -t $SESSION_NAME:$init_index
$TMUX_BIN select-window -t ${SESSION_NAME}:$init_index

$TMUX_BIN -2 attach-session -t $SESSION_NAME
$TMUX_BIN -2 attach-session -t ${SESSION_NAME}

# clear

0 comments on commit 0ae2e6a

Please sign in to comment.