diff --git a/operator/deploy/controller/deployController.yaml b/operator/deploy/controller/deployController.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e229fc0d6fe4fe7880c7fbaa3c35519f962d74bb
--- /dev/null
+++ b/operator/deploy/controller/deployController.yaml
@@ -0,0 +1,36 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: l2sm-controller-deployment
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: l2sm-controller
+  template:
+    metadata:
+      labels:
+        app: l2sm-controller
+    spec:
+      containers:
+      - name: l2sm-controller
+        image: alexdecb/l2sm-controller:latest
+        ports:
+        - containerPort: 6633
+        - containerPort: 8181
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: l2sm-controller-service
+spec:
+  selector:
+    app: l2sm-controller
+  ports:
+    - protocol: TCP
+      port: 6633
+      targetPort: 6633
+    - protocol: TCP
+      port: 8181
+      targetPort: 8181
+  type: ClusterIP
diff --git a/operator/src/controller/Dockerfile b/operator/src/controller/Dockerfile
deleted file mode 100644
index 18801b81f8778e043569c4e9138ddfc5ca6553e8..0000000000000000000000000000000000000000
--- a/operator/src/controller/Dockerfile
+++ /dev/null
@@ -1,7 +0,0 @@
-FROM onosproject/onos:2.7.0
-
-COPY . ./
-
-RUN chmod +x ./setup_controller.sh
-
-ENTRYPOINT ["./setup_controller.sh"]
\ No newline at end of file
diff --git a/operator/src/controller/api/go.mod b/operator/src/controller/api/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..06106f30e1ee8ce2eb92f3b5b848c9d40c0cd12f
--- /dev/null
+++ b/operator/src/controller/api/go.mod
@@ -0,0 +1,13 @@
+module l2sm_controller_api
+
+go 1.18
+
+require (
+	github.com/hashicorp/errwrap v1.0.0 // indirect
+	github.com/hashicorp/go-multierror v1.1.1 // indirect
+	github.com/helloyi/go-sshclient v1.2.0 // indirect
+	github.com/kr/fs v0.1.0 // indirect
+	github.com/pkg/sftp v1.13.5 // indirect
+	golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d // indirect
+	golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64 // indirect
+)
diff --git a/operator/src/controller/api/go.sum b/operator/src/controller/api/go.sum
new file mode 100644
index 0000000000000000000000000000000000000000..2313e5b3f693e36ed96a7c81b1edc582d539f066
--- /dev/null
+++ b/operator/src/controller/api/go.sum
@@ -0,0 +1,44 @@
+github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
+github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
+github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
+github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
+github.com/helloyi/go-sshclient v1.2.0 h1:36YOcHjtb3QhtZPTFthb0kvDlfQqVHErwfObVq6omck=
+github.com/helloyi/go-sshclient v1.2.0/go.mod h1:L2+lPFL4TshqEu5fl5FHqtojNDzUtPFIjHXgaZYMX0Q=
+github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
+github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
+github.com/pkg/sftp v1.13.5 h1:a3RLUqkyjYRtBTZJZ1VRrKbN3zhuPLlUc3sphVz81go=
+github.com/pkg/sftp v1.13.5/go.mod h1:wHDZ0IZX6JcBYRK1TH9bcVq8G7TLpVHYIGJRFnmPfxg=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d h1:3qF+Z8Hkrw9sOhrFHti9TlB1Hkac1x+DNRkv0XQiFjo=
+golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64 h1:UiNENfZ8gDvpiWw7IpOMQ27spWmThO1RwwdQVbJahJM=
+golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/operator/src/controller/api/main.go b/operator/src/controller/api/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..ce76639a7904e3087b35bcea0b1c2f05ebce3faf
--- /dev/null
+++ b/operator/src/controller/api/main.go
@@ -0,0 +1,119 @@
+package main
+
+import (
+	"bytes"
+	"encoding/json"
+	"fmt"
+	"log"
+	"net/http"
+
+	"golang.org/x/crypto/ssh"
+)
+
+type Network struct {
+	Name  string   `json:"name"`
+	Ports []string `json:"ports"`
+}
+
+func main() {
+
+	//var hostKey ssh.PublicKey
+	// An SSH client is represented with a ClientConn.
+	//
+	// To authenticate with the remote server you must pass at least one
+	// implementation of AuthMethod via the Auth field in ClientConfig,
+	// and provide a HostKeyCallback.
+	config := &ssh.ClientConfig{
+		User: "root",
+		Auth: []ssh.AuthMethod{
+			ssh.Password("root123"),
+		},
+		HostKeyCallback: ssh.InsecureIgnoreHostKey(),
+	}
+	client, err := ssh.Dial("tcp", "172.17.0.2:22", config)
+	if err != nil {
+		log.Fatal("Failed to dial: ", err)
+	}
+	defer client.Close()
+
+	// Each ClientConn can support multiple interactive sessions,
+	// represented by a Session.
+	session, err := client.NewSession()
+	if err != nil {
+		log.Fatal("Failed to create session: ", err)
+	}
+	defer session.Close()
+
+	// Once a Session is created, you can execute a single command on
+	// the remote side using the Run method.
+	var b bytes.Buffer
+	session.Stdout = &b
+	if err := session.Run("/usr/bin/whoami"); err != nil {
+		log.Fatal("Failed to run: " + err.Error())
+	}
+	fmt.Println(b.String())
+
+	http.HandleFunc("/network", func(w http.ResponseWriter, r *http.Request) {
+		switch r.Method {
+		case "GET":
+			getNetwork(w, r)
+		case "POST":
+			createNetwork(w, r)
+		case "PUT":
+			updateNetwork(w, r)
+		default:
+			http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
+		}
+	})
+
+	fmt.Println("Server is running on port 8080...")
+	http.ListenAndServe(":8080", nil)
+
+}
+
+func getNetwork(w http.ResponseWriter, r *http.Request) {
+	//var network Network
+	queryValues := r.URL.Query()
+	name := queryValues.Get("name")
+	//network = l2sm-get-network Name
+
+	//json.NewEncoder(w).Encode(&network)
+	fmt.Printf("GET %s", name)
+}
+
+func createNetwork(w http.ResponseWriter, r *http.Request) {
+	var network Network
+	if err := json.NewDecoder(r.Body).Decode(&network); err != nil {
+		http.Error(w, err.Error(), http.StatusBadRequest)
+		return
+	}
+	//l2sm-create-network network.Name
+	w.WriteHeader(http.StatusCreated)
+	fmt.Printf("POST")
+
+}
+
+func updateNetwork(w http.ResponseWriter, r *http.Request) {
+	var network Network
+
+	// l2sm-add-port network.Port
+	// if err := json.NewDecoder(r.Body).Decode(&network); err != nil {
+	// 	http.Error(w, err.Error(), http.StatusBadRequest)
+	// 	return
+	// }
+	// params := r.URL.Query()
+	// name := params.Get("name")
+	// port := params.Get("port")
+
+	// for i, net := range networks {
+	// 	if net.Name == name {
+	// 		networks[i].Ports = append(networks[i].Ports, port)
+	// 		w.WriteHeader(http.StatusOK)
+	// 		return
+	// 	}
+	// }
+
+	// http.Error(w, "Network not found", http.StatusNotFound)
+	fmt.Printf("UPDATE")
+
+}
diff --git a/operator/src/controller/idco/Dockerfile b/operator/src/controller/idco/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..ab610527de746cf5b102f9be78fe6d106ddfacc9
--- /dev/null
+++ b/operator/src/controller/idco/Dockerfile
@@ -0,0 +1,9 @@
+FROM onosproject/onos:2.7.0
+
+COPY . ./
+
+RUN apt-get update && \
+    apt-get install wget && \
+    chmod +x ./setup_controller.sh
+
+ENTRYPOINT ["./setup_controller.sh"]
\ No newline at end of file
diff --git a/operator/src/controller/idco-app-1.0.oar b/operator/src/controller/idco/idco-app-1.0.oar
similarity index 100%
rename from operator/src/controller/idco-app-1.0.oar
rename to operator/src/controller/idco/idco-app-1.0.oar
diff --git a/operator/src/controller/setup_controller.sh b/operator/src/controller/idco/setup_controller.sh
similarity index 50%
rename from operator/src/controller/setup_controller.sh
rename to operator/src/controller/idco/setup_controller.sh
index c9f1a51242fe2aee9b6ba0cf46b2188e84ada5eb..d39ed1199c3b3feab28226e6d9d23752b6499d7d 100644
--- a/operator/src/controller/setup_controller.sh
+++ b/operator/src/controller/idco/setup_controller.sh
@@ -3,12 +3,25 @@
 # turn on bash's job control
 set -m
 
-# Start the primary process and put it in the background
+# Start the onos server and put it on the background
 ./bin/onos-service server &
 
-sleep 90
+sleep 10
 
-# Start the helper process
+while true; do
+    response=$(wget --spider --server-response http://localhost:8181/onos/ui 2>&1)
+    status_codes=$(echo "$response" | awk '/HTTP\/1.1/{print $2}')
+
+    if echo "$status_codes" | grep -q "200"; then
+        echo "Starting the configuration"
+        break
+    fi
+
+    sleep 10
+done
+
+
+# Start the configuration
 ./bin/onos-app localhost install idco-app-1.0.oar
 ./bin/onos-app localhost activate org.idco.app
 ./bin/onos-app localhost activate org.onosproject.drivers
@@ -18,11 +31,5 @@ sleep 90
 
 
 
-    
-    
-    
-
-
-# now we bring the primary process back into the foreground
-# and leave it there
+# now we bring the server into the foreground
 fg %1
\ No newline at end of file