diff --git a/README.md b/README.md
index 039b5d5..63e37cd 100644
--- a/README.md
+++ b/README.md
@@ -49,6 +49,15 @@
 enable
 ```
 
+#### VOLTHA 2.X
+
+_This assumes `voltctl` is installed an configured_
+
+```
+voltctl device create -t openolt -H $(kubectl get -n voltha service/bbsim -o go-template='{{.spec.clusterIP}}'):50060
+voltctl device enable $(voltctl device list --filter Type~openolt -q)
+```
+
 ## Control API
 
 BBSim comes with a gRPC interface to control the internal state.
@@ -79,6 +88,38 @@
     }
   ]
 }
+
+$ grpcurl -plaintext 127.0.0.1:50070 bbsim.BBSim/GetONUs
+{
+  "items": [
+    {
+      "ID": 1,
+      "SerialNumber": "vendor_id:\"BBSM\" vendor_specific:\"\\000\\000\\000\\001\" ",
+      "OperState": "up",
+      "InternalState": "auth_started"
+    },
+    {
+      "ID": 2,
+      "SerialNumber": "vendor_id:\"BBSM\" vendor_specific:\"\\000\\000\\000\\002\" ",
+      "OperState": "up",
+      "InternalState": "auth_started"
+    },
+    {
+      "ID": 1,
+      "SerialNumber": "vendor_id:\"BBSM\" vendor_specific:\"\\000\\000\\001\\001\" ",
+      "OperState": "up",
+      "InternalState": "auth_started",
+      "PonPortID": 1
+    },
+    {
+      "ID": 2,
+      "SerialNumber": "vendor_id:\"BBSM\" vendor_specific:\"\\000\\000\\001\\002\" ",
+      "OperState": "up",
+      "InternalState": "auth_started",
+      "PonPortID": 1
+    }
+  ]
+}
 ```
 
 ## Development
diff --git a/examples/sadis-minimal.json b/examples/sadis-minimal.json
index 10adc68..a37c3fe 100644
--- a/examples/sadis-minimal.json
+++ b/examples/sadis-minimal.json
@@ -11,7 +11,7 @@
       "entries": [
         {
           "id": "BBSM00000001",
-          "cTag": 83,
+          "cTag": 101,
           "sTag": 99,
           "nasPortId": "BBSM00000001",
           "technologyProfileId": 64,
@@ -19,6 +19,33 @@
           "downstreamBandwidthProfile": "User1-Specific"
         },
         {
+          "id": "BBSM00000002",
+          "cTag": 102,
+          "sTag": 99,
+          "nasPortId": "BBSM00000002",
+          "technologyProfileId": 64,
+          "upstreamBandwidthProfile": "High-Speed-Internet",
+          "downstreamBandwidthProfile": "User1-Specific"
+        },
+        {
+          "id": "BBSM00000101",
+          "cTag": 111,
+          "sTag": 99,
+          "nasPortId": "BBSM00000101",
+          "technologyProfileId": 64,
+          "upstreamBandwidthProfile": "High-Speed-Internet",
+          "downstreamBandwidthProfile": "User1-Specific"
+        },
+        {
+          "id": "BBSM00000102",
+          "cTag": 112,
+          "sTag": 99,
+          "nasPortId": "BBSM00000102",
+          "technologyProfileId": 64,
+          "upstreamBandwidthProfile": "High-Speed-Internet",
+          "downstreamBandwidthProfile": "User1-Specific"
+        },
+        {
           "id": "BBSIM_OLT_0",
           "hardwareIdentifier": "00:1b:22:00:b1:78",
           "ipAddress": "192.168.1.252",
@@ -38,27 +65,25 @@
       "entries": [
         {
           "id": "High-Speed-Internet",
-          "cir": 200000000,
-          "cbs": 348000,
-          "eir": 10000000,
-          "ebs": 348000,
-          "air": 10000000
-        },
-        {
+          "cir": 600,
+          "cbs": 2000,
+          "eir": 5000,
+          "ebs": 2000,
+          "air": 100000
+        }, {
           "id": "User1-Specific",
-          "cir": 300000000,
-          "cbs": 348000,
-          "eir": 20000000,
-          "ebs": 348000,
-          "air": 30000000
-        },
-        {
+          "cir": 600,
+          "cbs": 3000,
+          "eir": 3000,
+          "ebs": 4000,
+          "air": 100000
+        }, {
           "id": "Default",
-          "cir": 300000000,
-          "cbs": 348000,
-          "eir": 20000000,
-          "ebs": 348000,
-          "air": 30000000
+          "cir": 600,
+          "cbs": 30,
+          "eir": 400,
+          "ebs": 30,
+          "air": 100000
         }
       ]
     }
diff --git a/go.mod b/go.mod
index bfea739..ffee23a 100644
--- a/go.mod
+++ b/go.mod
@@ -4,6 +4,7 @@
 
 require (
 	github.com/golang/protobuf v1.3.2
+	github.com/google/gopacket v1.1.17
 	github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 // indirect
 	github.com/looplab/fsm v0.1.0
 	github.com/opencord/omci-sim v0.0.0-20190826212842-203314beba7e
diff --git a/go.sum b/go.sum
index 25e3e31..0cfff06 100644
--- a/go.sum
+++ b/go.sum
@@ -14,6 +14,8 @@
 github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
 github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc=
+github.com/google/gopacket v1.1.17 h1:rMrlX2ZY2UbvT+sdz3+6J+pp2z+msCq9MxTU6ymxbBY=
+github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM=
 github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -44,9 +46,12 @@
 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
diff --git a/internal/bbsim/bbsim.go b/internal/bbsim/bbsim.go
index deb7f40..268be8e 100644
--- a/internal/bbsim/bbsim.go
+++ b/internal/bbsim/bbsim.go
@@ -62,8 +62,8 @@
 }
 
 func init() {
-	//log.SetLevel(log.DebugLevel)
-	log.SetLevel(log.TraceLevel)
+	log.SetLevel(log.DebugLevel)
+	//log.SetLevel(log.TraceLevel)
 	//log.SetReportCaller(true)
 }
 
diff --git a/internal/bbsim/devices/olt.go b/internal/bbsim/devices/olt.go
index 7ace1c0..3b50584 100644
--- a/internal/bbsim/devices/olt.go
+++ b/internal/bbsim/devices/olt.go
@@ -92,7 +92,7 @@
 	olt.Nnis = append(olt.Nnis, nniPort)
 
 	// create PON ports
-	onuId := 1
+	//onuId := 1
 	for i := 0; i < pon; i++ {
 		p := PonPort{
 			NumOnu: olt.NumOnuPerPon,
@@ -107,9 +107,10 @@
 
 		// create ONU devices
 		for j := 0; j < onuPerPon; j++ {
-			o := CreateONU(olt, p, uint32(onuId))
+			//o := CreateONU(olt, p, uint32(onuId))
+			o := CreateONU(olt, p, uint32(j + 1))
 			p.Onus = append(p.Onus, o)
-			onuId = onuId + 1
+			//onuId = onuId + 1
 		}
 
 		olt.Pons = append(olt.Pons, p)
@@ -185,6 +186,7 @@
 
 		for _, onu := range pon.Onus {
 			go onu.processOnuMessages(stream)
+			go onu.processOmciMessages(stream)
 			msg := Message{
 				Type:      OnuDiscIndication,
 				Data: OnuDiscIndicationMessage{
@@ -381,9 +383,39 @@
 	return new(openolt.Empty) , nil
 }
 
-func (o OltDevice) FlowAdd(context.Context, *openolt.Flow) (*openolt.Empty, error)  {
-	oltLogger.Info("received FlowAdd")
-	// TODO store flows somewhere
+func (o OltDevice) FlowAdd(ctx context.Context, flow *openolt.Flow) (*openolt.Empty, error)  {
+	oltLogger.WithFields(log.Fields{
+		"IntfId": flow.AccessIntfId,
+		"OnuId": flow.OnuId,
+		"EthType": fmt.Sprintf("%x", flow.Classifier.EthType),
+		"InnerVlan": flow.Classifier.IVid,
+		"OuterVlan": flow.Classifier.OVid,
+		"FlowType": flow.FlowType,
+		"FlowId": flow.FlowId,
+		"UniID": flow.UniId,
+		"PortNo": flow.PortNo,
+	}).Infof("OLT receives Flow")
+	// TODO optionally store flows somewhere
+
+	if flow.AccessIntfId == -1 {
+		oltLogger.WithFields(log.Fields{
+			"FlowId": flow.FlowId,
+		}).Debugf("This is an OLT flow")
+	} else {
+		pon, _ := o.getPonById(uint32(flow.AccessIntfId))
+		onu, _ := pon.getOnuById(uint32(flow.OnuId))
+
+		msg := Message{
+			Type:      FlowUpdate,
+			Data:      OnuFlowUpdateMessage{
+				PonPortID:  pon.ID,
+				OnuID: 	onu.ID,
+				Flow: 	flow,
+			},
+		}
+		onu.channel <- msg
+	}
+
 	return new(openolt.Empty) , nil
 }
 
diff --git a/internal/bbsim/devices/onu.go b/internal/bbsim/devices/onu.go
index 172ead4..94e0705 100644
--- a/internal/bbsim/devices/onu.go
+++ b/internal/bbsim/devices/onu.go
@@ -17,10 +17,14 @@
 package devices
 
 import (
-	"github.com/opencord/voltha-protos/go/openolt"
+	"fmt"
+	"github.com/opencord/bbsim/internal/bbsim/responders"
+	"github.com/google/gopacket/layers"
 	"github.com/looplab/fsm"
 	omci "github.com/opencord/omci-sim"
+	"github.com/opencord/voltha-protos/go/openolt"
 	log "github.com/sirupsen/logrus"
+	bbsim "github.com/opencord/bbsim/internal/bbsim/types"
 )
 
 var onuLogger = log.WithFields(log.Fields{
@@ -32,7 +36,9 @@
 			ID: id,
 			PonPortID: pon.ID,
 			PonPort: pon,
+			// NOTE can we combine everything in a single channel?
 			channel: make(chan Message),
+			eapolPktOutCh: make(chan *bbsim.ByteMsg, 1024),
 		}
 		o.SerialNumber = o.NewSN(olt.ID, pon.ID, o.ID)
 
@@ -50,19 +56,68 @@
 			fsm.Events{
 				{Name: "discover", Src: []string{"created"}, Dst: "discovered"},
 				{Name: "enable", Src: []string{"discovered"}, Dst: "enabled"},
-				{Name: "start_omci", Src: []string{"enabled"}, Dst: "starting_openomci"},
+				{Name: "receive_eapol_flow", Src: []string{"enabled", "gem_port_added"}, Dst: "eapol_flow_received"},
+				{Name: "add_gem_port", Src: []string{"enabled", "eapol_flow_received"}, Dst: "gem_port_added"},
+				{Name: "start_auth", Src: []string{"eapol_flow_received", "gem_port_added"}, Dst: "auth_started"},
 			},
 			fsm.Callbacks{
 				"enter_state": func(e *fsm.Event) {
-					onuLogger.WithFields(log.Fields{
-						"ID": o.ID,
-					}).Debugf("Changing ONU InternalState from %s to %s", e.Src, e.Dst)
+					o.logStateChange(e.Src, e.Dst)
+				},
+				"enter_eapol_flow_received": func(e *fsm.Event) {
+					o.logStateChange(e.Src, e.Dst)
+					if e.Src == "enter_gem_port_added" {
+						if err := o.InternalState.Event("start_auth"); err != nil {
+							log.Infof("Transitioning to StartAuth")
+							onuLogger.WithFields(log.Fields{
+								"OnuId":  o.ID,
+								"IntfId": o.PonPortID,
+								"OnuSn":  o.SerialNumber,
+							}).Errorf("Error while transitioning ONU State")
+						}
+					}
+				},
+				"enter_gem_port_added": func(e *fsm.Event) {
+					o.logStateChange(e.Src, e.Dst)
+					if e.Src == "eapol_flow_received" {
+						log.Infof("Transitioning to StartAuth")
+						if err := o.InternalState.Event("start_auth"); err != nil {
+							onuLogger.WithFields(log.Fields{
+								"OnuId": o.ID,
+								"IntfId": o.PonPortID,
+								"OnuSn": o.SerialNumber,
+							}).Errorf("Error while transitioning ONU State")
+						}
+					}
+				},
+				"enter_auth_started": func(e *fsm.Event) {
+					o.logStateChange(e.Src, e.Dst)
+					msg := Message{
+						Type:      StartEAPOL,
+						Data: EapStartMessage{
+							PonPortID: o.PonPortID,
+							OnuID: o.ID,
+						},
+					}
+					go func(msg Message){
+						// you can only send a value on an unbuffered channel without blocking
+						o.channel <- msg
+					}(msg)
+
 				},
 			},
 		)
 		return o
 }
 
+func (o Onu) logStateChange(src string, dst string) {
+	onuLogger.WithFields(log.Fields{
+		"OnuId": o.ID,
+		"IntfId": o.PonPortID,
+		"OnuSn": o.SerialNumber,
+	}).Debugf("Changing ONU InternalState from %s to %s", src, dst)
+}
+
 func (o Onu) processOnuMessages(stream openolt.Openolt_EnableIndicationServer)  {
 	onuLogger.WithFields(log.Fields{
 		"onuID": o.ID,
@@ -74,7 +129,7 @@
 			"onuID": o.ID,
 			"onuSN": o.SerialNumber,
 			"messageType": message.Type,
-		}).Trace("Received message")
+		}).Tracef("Received message on ONU Channel")
 
 		switch message.Type {
 		case OnuDiscIndication:
@@ -85,14 +140,53 @@
 			o.sendOnuIndication(msg, stream)
 		case OMCI:
 			msg, _ := message.Data.(OmciMessage)
-			o.InternalState.Event("start_omci")
 			o.handleOmciMessage(msg, stream)
+		case FlowUpdate:
+			msg, _ := message.Data.(OnuFlowUpdateMessage)
+			o.handleFlowUpdate(msg, stream)
+		case StartEAPOL:
+			log.Infof("Receive StartEAPOL message on ONU channel")
+			go func() {
+
+				responders.StartWPASupplicant(o.ID, o.PonPortID, o.SerialNumber, stream, o.eapolPktOutCh)
+			}()
 		default:
 			onuLogger.Warnf("Received unknown message data %v for type %v in OLT channel", message.Data, message.Type)
 		}
 	}
 }
 
+func (o Onu) processOmciMessages(stream openolt.Openolt_EnableIndicationServer)  {
+	ch := omci.GetChannel()
+
+	onuLogger.WithFields(log.Fields{
+		"onuID": o.ID,
+		"onuSN": o.SerialNumber,
+	}).Debug("Started OMCI Indication Channel")
+
+	for message := range ch {
+		switch message.Type {
+		case omci.GemPortAdded:
+			log.WithFields(log.Fields{
+				"OnuId": message.Data.OnuId,
+				"IntfId": message.Data.IntfId,
+			}).Infof("GemPort Added")
+
+			// NOTE if we receive the GemPort but we don't have EAPOL flows
+			// go an intermediate state, otherwise start auth
+			if o.InternalState.Is("enabled") {
+				if err := o.InternalState.Event("add_gem_port"); err != nil {
+					log.Errorf("Can't go to gem_port_added: %v", err)
+				}
+			} else if  o.InternalState.Is("eapol_flow_received"){
+				if err := o.InternalState.Event("start_auth"); err != nil {
+					log.Errorf("Can't go to auth_started: %v", err)
+				}
+			}
+		}
+	}
+}
+
 func (o Onu) NewSN(oltid int, intfid uint32, onuid uint32) *openolt.SerialNumber {
 
 	sn := new(openolt.SerialNumber)
@@ -116,6 +210,7 @@
 	onuLogger.WithFields(log.Fields{
 		"IntfId": msg.Onu.PonPortID,
 		"SerialNumber": msg.Onu.SerialNumber,
+		"OnuId": o.ID,
 	}).Debug("Sent Indication_OnuDiscInd")
 }
 
@@ -175,6 +270,33 @@
 	}).Tracef("Sent OMCI message")
 }
 
+func (o Onu) handleFlowUpdate(msg OnuFlowUpdateMessage, stream openolt.Openolt_EnableIndicationServer) {
+	onuLogger.WithFields(log.Fields{
+		"IntfId": msg.Flow.AccessIntfId,
+		"OnuId": msg.Flow.OnuId,
+		"EthType": fmt.Sprintf("%x", msg.Flow.Classifier.EthType),
+		"InnerVlan": msg.Flow.Classifier.IVid,
+		"OuterVlan": msg.Flow.Classifier.OVid,
+		"FlowType": msg.Flow.FlowType,
+		"FlowId": msg.Flow.FlowId,
+		"UniID": msg.Flow.UniId,
+		"PortNo": msg.Flow.PortNo,
+	}).Infof("ONU receives Flow")
+	if msg.Flow.Classifier.EthType == uint32(layers.EthernetTypeEAPOL) && msg.Flow.Classifier.OVid == 4091 {
+		// NOTE if we receive the EAPOL flows but we don't have GemPorts
+		// go an intermediate state, otherwise start auth
+		if o.InternalState.Is("enabled") {
+			if err := o.InternalState.Event("receive_eapol_flow"); err != nil {
+				log.Errorf("Can't go to eapol_flow_received: %v", err)
+			}
+		} else if  o.InternalState.Is("gem_port_added"){
+			if err := o.InternalState.Event("start_auth"); err != nil {
+				log.Errorf("Can't go to auth_started: %v", err)
+			}
+		}
+	}
+}
+
 // HexDecode converts the hex encoding to binary
 func HexDecode(pkt []byte) []byte {
 	p := make([]byte, len(pkt)/2)
diff --git a/internal/bbsim/devices/types.go b/internal/bbsim/devices/types.go
index 068ad66..4c92849 100644
--- a/internal/bbsim/devices/types.go
+++ b/internal/bbsim/devices/types.go
@@ -22,8 +22,14 @@
 	"fmt"
 	"github.com/opencord/voltha-protos/go/openolt"
 	"github.com/looplab/fsm"
+	bbsim "github.com/opencord/bbsim/internal/bbsim/types"
 )
 
+// TODO get rid of this file
+// - move ONU and OLT struct in their respective file
+// - create files for PonPorts and NniPorts
+// - move messages in the `types` package
+
 // Devices
 type Onu struct {
 	ID uint32
@@ -35,6 +41,7 @@
 	SerialNumber *openolt.SerialNumber
 
 	channel chan Message
+	eapolPktOutCh chan *bbsim.ByteMsg
 }
 
 
@@ -96,6 +103,7 @@
 }
 
 // BBSim Internals
+
 type MessageType int
 
 const (
@@ -105,6 +113,8 @@
 	OnuDiscIndication MessageType = 3
 	OnuIndication     MessageType = 4
 	OMCI              MessageType = 5
+	FlowUpdate		  MessageType = 6
+	StartEAPOL		  MessageType = 7
 )
 
 func (m MessageType) String() string {
@@ -115,6 +125,8 @@
 		"OnuDiscIndication",
 		"OnuIndication",
 		"OMCI",
+		"FlowUpdate",
+		"StartEAPOL",
 	}
 	return names[m]
 }
@@ -156,6 +168,17 @@
 	omciMsg   *openolt.OmciMsg
 }
 
+type OnuFlowUpdateMessage struct {
+	PonPortID uint32
+	OnuID     uint32
+	Flow      *openolt.Flow
+}
+
+type EapStartMessage struct {
+	PonPortID uint32
+	OnuID     uint32
+}
+
 
 type OperState int
 
diff --git a/internal/bbsim/responders/eapol.go b/internal/bbsim/responders/eapol.go
new file mode 100644
index 0000000..4e7cd34
--- /dev/null
+++ b/internal/bbsim/responders/eapol.go
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package responders
+
+import (
+	bbsim "github.com/opencord/bbsim/internal/bbsim/types"
+	"github.com/google/gopacket"
+	"github.com/google/gopacket/layers"
+	omci "github.com/opencord/omci-sim"
+	"github.com/opencord/voltha-protos/go/openolt"
+	log "github.com/sirupsen/logrus"
+	"net"
+)
+
+var eapolLogger = log.WithFields(log.Fields{
+	"module": "EAPOL",
+})
+
+func StartWPASupplicant(onuId uint32, ponPortId uint32, serialNumber *openolt.SerialNumber, stream openolt.Openolt_EnableIndicationServer, pktOutCh chan *bbsim.ByteMsg)  {
+	// NOTE pckOutCh is channel to listen on for packets received by VOLTHA
+	// the ONU device will publish messages on that channel
+
+	eapolLogger.WithFields(log.Fields{
+		"OnuId": onuId,
+		"IntfId": ponPortId,
+		"OnuSn": serialNumber,
+	}).Infof("EAPOL State Machine starting")
+
+	// send the packet (hacked together)
+	gemid, err := omci.GetGemPortId(ponPortId, onuId)
+	if err != nil {
+		eapolLogger.WithFields(log.Fields{
+			"OnuId": onuId,
+			"IntfId": ponPortId,
+			"OnuSn": serialNumber,
+		}).Errorf("Can't retrieve GemPortId: %s", err)
+		return
+	}
+
+	buffer := gopacket.NewSerializeBuffer()
+	options := gopacket.SerializeOptions{}
+
+	ethernetLayer := &layers.Ethernet{
+		SrcMAC:       net.HardwareAddr{0x2e, 0x60, 0x70, 0x13, 0x07, byte(onuId)},
+		DstMAC:       net.HardwareAddr{0x01, 0x80, 0xC2, 0x00, 0x00, 0x03},
+		EthernetType: layers.EthernetTypeEAPOL,
+	}
+
+	gopacket.SerializeLayers(buffer, options,
+		ethernetLayer,
+		&layers.EAPOL{Version: 1, Type: 1, Length: 0},
+	)
+
+	msg := buffer.Bytes()
+
+	data := &openolt.Indication_PktInd{
+		PktInd: &openolt.PacketIndication{
+			IntfType: "pon",
+			IntfId: ponPortId,
+			GemportId: uint32(gemid),
+			Pkt: msg,
+		},
+	}
+	// end of hacked (move in an EAPOL state machine)
+	if err := stream.Send(&openolt.Indication{Data: data}); err != nil {
+		eapolLogger.Error("Fail to send EAPOL PktInd indication. %v", err)
+	}
+}
\ No newline at end of file
diff --git a/internal/bbsim/types.go b/internal/bbsim/types.go
index e429bf4..6a6ce76 100644
--- a/internal/bbsim/types.go
+++ b/internal/bbsim/types.go
@@ -23,6 +23,4 @@
 	NumNniPerOlt int
 	NumPonPerOlt int
 	NumOnuPerPon int
-}
-
-
+}
\ No newline at end of file
diff --git a/internal/bbsim/types/types.go b/internal/bbsim/types/types.go
new file mode 100644
index 0000000..3245add
--- /dev/null
+++ b/internal/bbsim/types/types.go
@@ -0,0 +1,23 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package types
+
+type ByteMsg struct {
+	IntfId uint32
+	OnuId  uint32
+	Byte   []byte
+}
\ No newline at end of file
