diff --git a/hackfest/commands.txt b/hackfest/commands.txt
index c8e4868de5186b9ba9ad20ad1e632e97fdabc12c..a71e55a5cd71ef06ea7a01608614c6337f214fc3 100644
--- a/hackfest/commands.txt
+++ b/hackfest/commands.txt
@@ -166,6 +166,7 @@ curl -X DELETE -H "Content-Type: application/json" http://127.0.0.1:8080/restcon
 
 
 ## EXERCISE
+
 # Exercise: retrieve and draw the topology
 # solution in folder tapi_app
 
@@ -178,6 +179,8 @@ python3 tapi_app.py
 # Deploy TeraFlowSDN
 ################################################################################
 
+## GUIDED
+
 # Check status of MicroK8s
 microk8s.status --wait-ready
 
@@ -211,6 +214,8 @@ source my_deploy.sh
 
 # (done) Build a Netconf server supporting basic OpenConfig data model
 
+## GUIDED
+
 # Start the Netconf/OpenConfig server
 cd ~/tfs-ctrl/hackfest/netconf-oc
 python3 server_openconfig.py 8300
@@ -221,7 +226,8 @@ python3 server_openconfig.py 8300
 # Service requests
 ################################################################################
 
-## L3VPN service from JSON descriptors
+## EXERCISE
+# Exercise: L3VPN service from JSON descriptors
 
 # (in a new terminal) Start OLS TAPI server:
 cd ~/tfs-ctrl/hackfest/tapi/server
@@ -245,9 +251,8 @@ python3 server_openconfig.py 8304
 
 
 
-############
-# Mock OSM
-############
+## EXERCISE
+# Exercise: L2VPN slice from Mock OSM
 
 $ cd ~/tfs-ctrl/hackfest/
 $ python -m mock_osm
@@ -273,12 +278,63 @@ Bye!
 
 
 
+############
+# gRPC
+############
+
+## GUIDED
+
+# Generate connection messages from .proto
+cd ~/tfs-ctrl/hackfest/grpc
+python -m grpc_tools.protoc -I=. --python_out=connection/ connection.proto
+
+# Create a connection message and save to a file
+cd ~/tfs-ctrl/hackfest/grpc/connection
+python3 create.py connection.txt 
+
+# List a connection from a file
+cd ~/tfs-ctrl/hackfest/grpc/connection
+python3 list.py connection.txt 
+
+# Build ConnectionService from .proto
+cd ~/tfs-ctrl/hackfest/grpc 
+python -m grpc_tools.protoc -I=. --python_out=connectionService/ --grpc_python_out=connectionService/ connectionService.proto
+
+# Start ConnectionService server
+cd ~/tfs-ctrl/hackfest/grpc/connectionService
+python3 connectionService_server.py
+
+# Start ConnectionService client (in another terminal)
+cd ~/tfs-ctrl/hackfest/grpc/connectionService
+python3 connectionService_client.py
+
+
+## EXERCISE
+# Exercise: add streams
+
+# Build ConnectionServiceWithNotif from .proto
+cd ~/tfs-ctrl/hackfest/grpc
+python -m grpc_tools.protoc -I=. --python_out=connectionServiceWithNotif/ --grpc_python_out=connectionServiceWithNotif/ connectionServiceWithNotif.proto
+
+## Solution:
+# Run ConnectionServiceWithNotif server
+cd ~/tfs-ctrl/hackfest/grpc/connectionServiceWithNotif
+python3 connectionServiceWithNotif_server.py
+
+# Run ConnectionServiceWithNotif client (in another terminal)
+$ cd ~/tfs-ctrl/hackfest/grpc/connectionServiceWithNotif
+$ python3 connectionServiceWithNotif_client.py
+
+
+
 ############
 # gNMI
 ############
 
+## GUIDED
+
 ## Download and install the latest release
-$ sudo bash -c "$(curl -sL https://get.containerlab.dev)“
+$ sudo bash -c "$(curl -sL https://get.containerlab.dev)"
 
 ## Deploy proposed two SR node scenario
 $ cd tfs-ctrl/hackfest/gnmi
diff --git a/hackfest/gnmi/sonic.clab.yml b/hackfest/gnmi/srlinux.clab.yml
similarity index 83%
rename from hackfest/gnmi/sonic.clab.yml
rename to hackfest/gnmi/srlinux.clab.yml
index 47c1e64643a70e3e0caff12aff8a6796598cea1f..a589292ac5b58664646ab7d3cccebfd62c28a540 100644
--- a/hackfest/gnmi/sonic.clab.yml
+++ b/hackfest/gnmi/srlinux.clab.yml
@@ -12,18 +12,17 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# file: sonic.clab.yml
-name: sonic-vs
+# file: srlinux.clab.yml
+name: srlinux
 
 topology:
   nodes:
     srl1:
-      kind: sonic-vs
-      image: docker-sonic-vs
+      kind: srl
+      image: ghcr.io/nokia/srlinux
     srl2:
-      kind: sonic-vs
-      image: docker-sonic-vs
+      kind: srl
+      image: ghcr.io/nokia/srlinux
 
   links:
     - endpoints: ["srl1:e1-1", "srl2:e1-1"]
-
diff --git a/hackfest/grpc/connection/connection_pb2.py b/hackfest/grpc/connection/connection_pb2.py
index e66b665b22303fbf582de9ec378591fae4e09659..4d642577df514be773ce4dc20df2cf34380410c1 100644
--- a/hackfest/grpc/connection/connection_pb2.py
+++ b/hackfest/grpc/connection/connection_pb2.py
@@ -1,9 +1,9 @@
+# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: connection.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+"""Generated protocol buffer code."""
 from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
@@ -14,163 +14,34 @@ _sym_db = _symbol_database.Default()
 
 
 
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='connection.proto',
-  package='connection',
-  syntax='proto3',
-  serialized_options=None,
-  serialized_pb=_b('\n\x10\x63onnection.proto\x12\nconnection\"\xf5\x01\n\nConnection\x12\x14\n\x0c\x63onnectionId\x18\x01 \x01(\t\x12\x12\n\nsourceNode\x18\x02 \x01(\t\x12\x12\n\ntargetNode\x18\x03 \x01(\t\x12\x12\n\nsourcePort\x18\x04 \x01(\t\x12\x12\n\ntargetPort\x18\x05 \x01(\t\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x43\n\x11layerProtocolName\x18\x07 \x01(\x0e\x32(.connection.Connection.LayerProtocolName\")\n\x11LayerProtocolName\x12\x07\n\x03\x45TH\x10\x00\x12\x0b\n\x07OPTICAL\x10\x01\"<\n\x0e\x43onnectionList\x12*\n\nconnection\x18\x01 \x03(\x0b\x32\x16.connection.Connectionb\x06proto3')
-)
-
-
-
-_CONNECTION_LAYERPROTOCOLNAME = _descriptor.EnumDescriptor(
-  name='LayerProtocolName',
-  full_name='connection.Connection.LayerProtocolName',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='ETH', index=0, number=0,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='OPTICAL', index=1, number=1,
-      serialized_options=None,
-      type=None),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=237,
-  serialized_end=278,
-)
-_sym_db.RegisterEnumDescriptor(_CONNECTION_LAYERPROTOCOLNAME)
-
-
-_CONNECTION = _descriptor.Descriptor(
-  name='Connection',
-  full_name='connection.Connection',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connectionId', full_name='connection.Connection.connectionId', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sourceNode', full_name='connection.Connection.sourceNode', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='targetNode', full_name='connection.Connection.targetNode', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sourcePort', full_name='connection.Connection.sourcePort', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='targetPort', full_name='connection.Connection.targetPort', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='bandwidth', full_name='connection.Connection.bandwidth', index=5,
-      number=6, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='layerProtocolName', full_name='connection.Connection.layerProtocolName', index=6,
-      number=7, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _CONNECTION_LAYERPROTOCOLNAME,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=33,
-  serialized_end=278,
-)
-
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x63onnection.proto\x12\nconnection\"\xf5\x01\n\nConnection\x12\x14\n\x0c\x63onnectionId\x18\x01 \x01(\t\x12\x12\n\nsourceNode\x18\x02 \x01(\t\x12\x12\n\ntargetNode\x18\x03 \x01(\t\x12\x12\n\nsourcePort\x18\x04 \x01(\t\x12\x12\n\ntargetPort\x18\x05 \x01(\t\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x43\n\x11layerProtocolName\x18\x07 \x01(\x0e\x32(.connection.Connection.LayerProtocolName\")\n\x11LayerProtocolName\x12\x07\n\x03\x45TH\x10\x00\x12\x0b\n\x07OPTICAL\x10\x01\"<\n\x0e\x43onnectionList\x12*\n\nconnection\x18\x01 \x03(\x0b\x32\x16.connection.Connectionb\x06proto3')
 
-_CONNECTIONLIST = _descriptor.Descriptor(
-  name='ConnectionList',
-  full_name='connection.ConnectionList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection', full_name='connection.ConnectionList.connection', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=280,
-  serialized_end=340,
-)
 
-_CONNECTION.fields_by_name['layerProtocolName'].enum_type = _CONNECTION_LAYERPROTOCOLNAME
-_CONNECTION_LAYERPROTOCOLNAME.containing_type = _CONNECTION
-_CONNECTIONLIST.fields_by_name['connection'].message_type = _CONNECTION
-DESCRIPTOR.message_types_by_name['Connection'] = _CONNECTION
-DESCRIPTOR.message_types_by_name['ConnectionList'] = _CONNECTIONLIST
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
-Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), dict(
-  DESCRIPTOR = _CONNECTION,
-  __module__ = 'connection_pb2'
+_CONNECTION = DESCRIPTOR.message_types_by_name['Connection']
+_CONNECTIONLIST = DESCRIPTOR.message_types_by_name['ConnectionList']
+_CONNECTION_LAYERPROTOCOLNAME = _CONNECTION.enum_types_by_name['LayerProtocolName']
+Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), {
+  'DESCRIPTOR' : _CONNECTION,
+  '__module__' : 'connection_pb2'
   # @@protoc_insertion_point(class_scope:connection.Connection)
-  ))
+  })
 _sym_db.RegisterMessage(Connection)
 
-ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), dict(
-  DESCRIPTOR = _CONNECTIONLIST,
-  __module__ = 'connection_pb2'
+ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), {
+  'DESCRIPTOR' : _CONNECTIONLIST,
+  '__module__' : 'connection_pb2'
   # @@protoc_insertion_point(class_scope:connection.ConnectionList)
-  ))
+  })
 _sym_db.RegisterMessage(ConnectionList)
 
+if _descriptor._USE_C_DESCRIPTORS == False:
 
+  DESCRIPTOR._options = None
+  _CONNECTION._serialized_start=33
+  _CONNECTION._serialized_end=278
+  _CONNECTION_LAYERPROTOCOLNAME._serialized_start=237
+  _CONNECTION_LAYERPROTOCOLNAME._serialized_end=278
+  _CONNECTIONLIST._serialized_start=280
+  _CONNECTIONLIST._serialized_end=340
 # @@protoc_insertion_point(module_scope)
diff --git a/hackfest/grpc/connectionService/connectionService_pb2.py b/hackfest/grpc/connectionService/connectionService_pb2.py
index 9f1951fa92a017baf4f44470e833aae8d74e0f3b..a7efb7d21aa948134388dd6918a57d816ba4bcff 100644
--- a/hackfest/grpc/connectionService/connectionService_pb2.py
+++ b/hackfest/grpc/connectionService/connectionService_pb2.py
@@ -1,9 +1,9 @@
+# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: connectionService.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+"""Generated protocol buffer code."""
 from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
@@ -15,197 +15,37 @@ _sym_db = _symbol_database.Default()
 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
 
 
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='connectionService.proto',
-  package='connection',
-  syntax='proto3',
-  serialized_options=None,
-  serialized_pb=_b('\n\x17\x63onnectionService.proto\x12\nconnection\x1a\x1bgoogle/protobuf/empty.proto\"\xf5\x01\n\nConnection\x12\x14\n\x0c\x63onnectionId\x18\x01 \x01(\t\x12\x12\n\nsourceNode\x18\x02 \x01(\t\x12\x12\n\ntargetNode\x18\x03 \x01(\t\x12\x12\n\nsourcePort\x18\x04 \x01(\t\x12\x12\n\ntargetPort\x18\x05 \x01(\t\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x43\n\x11layerProtocolName\x18\x07 \x01(\x0e\x32(.connection.Connection.LayerProtocolName\")\n\x11LayerProtocolName\x12\x07\n\x03\x45TH\x10\x00\x12\x0b\n\x07OPTICAL\x10\x01\"<\n\x0e\x43onnectionList\x12*\n\nconnection\x18\x01 \x03(\x0b\x32\x16.connection.Connection2\xa1\x01\n\x11\x43onnectionService\x12\x44\n\x10\x43reateConnection\x12\x16.connection.Connection\x1a\x16.google.protobuf.Empty\"\x00\x12\x46\n\x0eListConnection\x12\x16.google.protobuf.Empty\x1a\x1a.connection.ConnectionList\"\x00\x62\x06proto3')
-  ,
-  dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,])
-
-
-
-_CONNECTION_LAYERPROTOCOLNAME = _descriptor.EnumDescriptor(
-  name='LayerProtocolName',
-  full_name='connection.Connection.LayerProtocolName',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='ETH', index=0, number=0,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='OPTICAL', index=1, number=1,
-      serialized_options=None,
-      type=None),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=273,
-  serialized_end=314,
-)
-_sym_db.RegisterEnumDescriptor(_CONNECTION_LAYERPROTOCOLNAME)
-
-
-_CONNECTION = _descriptor.Descriptor(
-  name='Connection',
-  full_name='connection.Connection',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connectionId', full_name='connection.Connection.connectionId', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sourceNode', full_name='connection.Connection.sourceNode', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='targetNode', full_name='connection.Connection.targetNode', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sourcePort', full_name='connection.Connection.sourcePort', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='targetPort', full_name='connection.Connection.targetPort', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='bandwidth', full_name='connection.Connection.bandwidth', index=5,
-      number=6, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='layerProtocolName', full_name='connection.Connection.layerProtocolName', index=6,
-      number=7, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _CONNECTION_LAYERPROTOCOLNAME,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=69,
-  serialized_end=314,
-)
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x63onnectionService.proto\x12\nconnection\x1a\x1bgoogle/protobuf/empty.proto\"\xf5\x01\n\nConnection\x12\x14\n\x0c\x63onnectionId\x18\x01 \x01(\t\x12\x12\n\nsourceNode\x18\x02 \x01(\t\x12\x12\n\ntargetNode\x18\x03 \x01(\t\x12\x12\n\nsourcePort\x18\x04 \x01(\t\x12\x12\n\ntargetPort\x18\x05 \x01(\t\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x43\n\x11layerProtocolName\x18\x07 \x01(\x0e\x32(.connection.Connection.LayerProtocolName\")\n\x11LayerProtocolName\x12\x07\n\x03\x45TH\x10\x00\x12\x0b\n\x07OPTICAL\x10\x01\"<\n\x0e\x43onnectionList\x12*\n\nconnection\x18\x01 \x03(\x0b\x32\x16.connection.Connection2\xa1\x01\n\x11\x43onnectionService\x12\x44\n\x10\x43reateConnection\x12\x16.connection.Connection\x1a\x16.google.protobuf.Empty\"\x00\x12\x46\n\x0eListConnection\x12\x16.google.protobuf.Empty\x1a\x1a.connection.ConnectionList\"\x00\x62\x06proto3')
 
 
-_CONNECTIONLIST = _descriptor.Descriptor(
-  name='ConnectionList',
-  full_name='connection.ConnectionList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection', full_name='connection.ConnectionList.connection', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=316,
-  serialized_end=376,
-)
 
-_CONNECTION.fields_by_name['layerProtocolName'].enum_type = _CONNECTION_LAYERPROTOCOLNAME
-_CONNECTION_LAYERPROTOCOLNAME.containing_type = _CONNECTION
-_CONNECTIONLIST.fields_by_name['connection'].message_type = _CONNECTION
-DESCRIPTOR.message_types_by_name['Connection'] = _CONNECTION
-DESCRIPTOR.message_types_by_name['ConnectionList'] = _CONNECTIONLIST
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), dict(
-  DESCRIPTOR = _CONNECTION,
-  __module__ = 'connectionService_pb2'
+_CONNECTION = DESCRIPTOR.message_types_by_name['Connection']
+_CONNECTIONLIST = DESCRIPTOR.message_types_by_name['ConnectionList']
+_CONNECTION_LAYERPROTOCOLNAME = _CONNECTION.enum_types_by_name['LayerProtocolName']
+Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), {
+  'DESCRIPTOR' : _CONNECTION,
+  '__module__' : 'connectionService_pb2'
   # @@protoc_insertion_point(class_scope:connection.Connection)
-  ))
+  })
 _sym_db.RegisterMessage(Connection)
 
-ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), dict(
-  DESCRIPTOR = _CONNECTIONLIST,
-  __module__ = 'connectionService_pb2'
+ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), {
+  'DESCRIPTOR' : _CONNECTIONLIST,
+  '__module__' : 'connectionService_pb2'
   # @@protoc_insertion_point(class_scope:connection.ConnectionList)
-  ))
+  })
 _sym_db.RegisterMessage(ConnectionList)
 
-
-
-_CONNECTIONSERVICE = _descriptor.ServiceDescriptor(
-  name='ConnectionService',
-  full_name='connection.ConnectionService',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  serialized_start=379,
-  serialized_end=540,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='CreateConnection',
-    full_name='connection.ConnectionService.CreateConnection',
-    index=0,
-    containing_service=None,
-    input_type=_CONNECTION,
-    output_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
-    serialized_options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListConnection',
-    full_name='connection.ConnectionService.ListConnection',
-    index=1,
-    containing_service=None,
-    input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
-    output_type=_CONNECTIONLIST,
-    serialized_options=None,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_CONNECTIONSERVICE)
-
-DESCRIPTOR.services_by_name['ConnectionService'] = _CONNECTIONSERVICE
-
+_CONNECTIONSERVICE = DESCRIPTOR.services_by_name['ConnectionService']
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  _CONNECTION._serialized_start=69
+  _CONNECTION._serialized_end=314
+  _CONNECTION_LAYERPROTOCOLNAME._serialized_start=273
+  _CONNECTION_LAYERPROTOCOLNAME._serialized_end=314
+  _CONNECTIONLIST._serialized_start=316
+  _CONNECTIONLIST._serialized_end=376
+  _CONNECTIONSERVICE._serialized_start=379
+  _CONNECTIONSERVICE._serialized_end=540
 # @@protoc_insertion_point(module_scope)
diff --git a/hackfest/grpc/connectionService/connectionService_pb2_grpc.py b/hackfest/grpc/connectionService/connectionService_pb2_grpc.py
index 94ffffbf7fd3c90b541f36bd1aac6f23e1b5913b..0278d6fa443960a5fcfdb166e5dbeea3b31b6cc2 100644
--- a/hackfest/grpc/connectionService/connectionService_pb2_grpc.py
+++ b/hackfest/grpc/connectionService/connectionService_pb2_grpc.py
@@ -1,4 +1,5 @@
 # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
 import grpc
 
 import connectionService_pb2 as connectionService__pb2
@@ -6,59 +7,94 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
 
 
 class ConnectionServiceStub(object):
-  # missing associated documentation comment in .proto file
-  pass
+    """Missing associated documentation comment in .proto file."""
 
-  def __init__(self, channel):
-    """Constructor.
+    def __init__(self, channel):
+        """Constructor.
 
-    Args:
-      channel: A grpc.Channel.
-    """
-    self.CreateConnection = channel.unary_unary(
-        '/connection.ConnectionService/CreateConnection',
-        request_serializer=connectionService__pb2.Connection.SerializeToString,
-        response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-        )
-    self.ListConnection = channel.unary_unary(
-        '/connection.ConnectionService/ListConnection',
-        request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
-        response_deserializer=connectionService__pb2.ConnectionList.FromString,
-        )
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.CreateConnection = channel.unary_unary(
+                '/connection.ConnectionService/CreateConnection',
+                request_serializer=connectionService__pb2.Connection.SerializeToString,
+                response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+                )
+        self.ListConnection = channel.unary_unary(
+                '/connection.ConnectionService/ListConnection',
+                request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+                response_deserializer=connectionService__pb2.ConnectionList.FromString,
+                )
 
 
 class ConnectionServiceServicer(object):
-  # missing associated documentation comment in .proto file
-  pass
+    """Missing associated documentation comment in .proto file."""
 
-  def CreateConnection(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    def CreateConnection(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
-  def ListConnection(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    def ListConnection(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
 
 def add_ConnectionServiceServicer_to_server(servicer, server):
-  rpc_method_handlers = {
-      'CreateConnection': grpc.unary_unary_rpc_method_handler(
-          servicer.CreateConnection,
-          request_deserializer=connectionService__pb2.Connection.FromString,
-          response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
-      ),
-      'ListConnection': grpc.unary_unary_rpc_method_handler(
-          servicer.ListConnection,
-          request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-          response_serializer=connectionService__pb2.ConnectionList.SerializeToString,
-      ),
-  }
-  generic_handler = grpc.method_handlers_generic_handler(
-      'connection.ConnectionService', rpc_method_handlers)
-  server.add_generic_rpc_handlers((generic_handler,))
+    rpc_method_handlers = {
+            'CreateConnection': grpc.unary_unary_rpc_method_handler(
+                    servicer.CreateConnection,
+                    request_deserializer=connectionService__pb2.Connection.FromString,
+                    response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+            ),
+            'ListConnection': grpc.unary_unary_rpc_method_handler(
+                    servicer.ListConnection,
+                    request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+                    response_serializer=connectionService__pb2.ConnectionList.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'connection.ConnectionService', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class ConnectionService(object):
+    """Missing associated documentation comment in .proto file."""
+
+    @staticmethod
+    def CreateConnection(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/connection.ConnectionService/CreateConnection',
+            connectionService__pb2.Connection.SerializeToString,
+            google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def ListConnection(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/connection.ConnectionService/ListConnection',
+            google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+            connectionService__pb2.ConnectionList.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2.py b/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2.py
index 403dd0ce409700875e8fc80b011564d055c5c4cb..f6ce23ef00c01aab9463e122198a91bd66051100 100644
--- a/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2.py
+++ b/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2.py
@@ -1,9 +1,9 @@
+# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: connectionServiceWithNotif.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+"""Generated protocol buffer code."""
 from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
@@ -15,245 +15,47 @@ _sym_db = _symbol_database.Default()
 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
 
 
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='connectionServiceWithNotif.proto',
-  package='connection',
-  syntax='proto3',
-  serialized_options=None,
-  serialized_pb=_b('\n connectionServiceWithNotif.proto\x12\nconnection\x1a\x1bgoogle/protobuf/empty.proto\"\x14\n\x03\x42\x65r\x12\r\n\x05value\x18\x01 \x01(\x01\"\xf5\x01\n\nConnection\x12\x14\n\x0c\x63onnectionId\x18\x01 \x01(\t\x12\x12\n\nsourceNode\x18\x02 \x01(\t\x12\x12\n\ntargetNode\x18\x03 \x01(\t\x12\x12\n\nsourcePort\x18\x04 \x01(\t\x12\x12\n\ntargetPort\x18\x05 \x01(\t\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x43\n\x11layerProtocolName\x18\x07 \x01(\x0e\x32(.connection.Connection.LayerProtocolName\")\n\x11LayerProtocolName\x12\x07\n\x03\x45TH\x10\x00\x12\x0b\n\x07OPTICAL\x10\x01\"<\n\x0e\x43onnectionList\x12*\n\nconnection\x18\x01 \x03(\x0b\x32\x16.connection.Connection2\xe1\x01\n\x1a\x43onnectionServiceWithNotif\x12\x44\n\x10\x43reateConnection\x12\x16.connection.Connection\x1a\x16.google.protobuf.Empty\"\x00\x12\x46\n\x0eListConnection\x12\x16.google.protobuf.Empty\x1a\x1a.connection.ConnectionList\"\x00\x12\x35\n\x06GetBer\x12\x16.connection.Connection\x1a\x0f.connection.Ber\"\x00\x30\x01\x62\x06proto3')
-  ,
-  dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,])
-
-
-
-_CONNECTION_LAYERPROTOCOLNAME = _descriptor.EnumDescriptor(
-  name='LayerProtocolName',
-  full_name='connection.Connection.LayerProtocolName',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='ETH', index=0, number=0,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='OPTICAL', index=1, number=1,
-      serialized_options=None,
-      type=None),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=304,
-  serialized_end=345,
-)
-_sym_db.RegisterEnumDescriptor(_CONNECTION_LAYERPROTOCOLNAME)
-
-
-_BER = _descriptor.Descriptor(
-  name='Ber',
-  full_name='connection.Ber',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='value', full_name='connection.Ber.value', index=0,
-      number=1, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=77,
-  serialized_end=97,
-)
-
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n connectionServiceWithNotif.proto\x12\nconnection\x1a\x1bgoogle/protobuf/empty.proto\"\x14\n\x03\x42\x65r\x12\r\n\x05value\x18\x01 \x01(\x01\"\xf5\x01\n\nConnection\x12\x14\n\x0c\x63onnectionId\x18\x01 \x01(\t\x12\x12\n\nsourceNode\x18\x02 \x01(\t\x12\x12\n\ntargetNode\x18\x03 \x01(\t\x12\x12\n\nsourcePort\x18\x04 \x01(\t\x12\x12\n\ntargetPort\x18\x05 \x01(\t\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x43\n\x11layerProtocolName\x18\x07 \x01(\x0e\x32(.connection.Connection.LayerProtocolName\")\n\x11LayerProtocolName\x12\x07\n\x03\x45TH\x10\x00\x12\x0b\n\x07OPTICAL\x10\x01\"<\n\x0e\x43onnectionList\x12*\n\nconnection\x18\x01 \x03(\x0b\x32\x16.connection.Connection2\xe1\x01\n\x1a\x43onnectionServiceWithNotif\x12\x44\n\x10\x43reateConnection\x12\x16.connection.Connection\x1a\x16.google.protobuf.Empty\"\x00\x12\x46\n\x0eListConnection\x12\x16.google.protobuf.Empty\x1a\x1a.connection.ConnectionList\"\x00\x12\x35\n\x06GetBer\x12\x16.connection.Connection\x1a\x0f.connection.Ber\"\x00\x30\x01\x62\x06proto3')
 
-_CONNECTION = _descriptor.Descriptor(
-  name='Connection',
-  full_name='connection.Connection',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connectionId', full_name='connection.Connection.connectionId', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sourceNode', full_name='connection.Connection.sourceNode', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='targetNode', full_name='connection.Connection.targetNode', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sourcePort', full_name='connection.Connection.sourcePort', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='targetPort', full_name='connection.Connection.targetPort', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='bandwidth', full_name='connection.Connection.bandwidth', index=5,
-      number=6, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='layerProtocolName', full_name='connection.Connection.layerProtocolName', index=6,
-      number=7, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _CONNECTION_LAYERPROTOCOLNAME,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=100,
-  serialized_end=345,
-)
 
 
-_CONNECTIONLIST = _descriptor.Descriptor(
-  name='ConnectionList',
-  full_name='connection.ConnectionList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection', full_name='connection.ConnectionList.connection', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=347,
-  serialized_end=407,
-)
-
-_CONNECTION.fields_by_name['layerProtocolName'].enum_type = _CONNECTION_LAYERPROTOCOLNAME
-_CONNECTION_LAYERPROTOCOLNAME.containing_type = _CONNECTION
-_CONNECTIONLIST.fields_by_name['connection'].message_type = _CONNECTION
-DESCRIPTOR.message_types_by_name['Ber'] = _BER
-DESCRIPTOR.message_types_by_name['Connection'] = _CONNECTION
-DESCRIPTOR.message_types_by_name['ConnectionList'] = _CONNECTIONLIST
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Ber = _reflection.GeneratedProtocolMessageType('Ber', (_message.Message,), dict(
-  DESCRIPTOR = _BER,
-  __module__ = 'connectionServiceWithNotif_pb2'
+_BER = DESCRIPTOR.message_types_by_name['Ber']
+_CONNECTION = DESCRIPTOR.message_types_by_name['Connection']
+_CONNECTIONLIST = DESCRIPTOR.message_types_by_name['ConnectionList']
+_CONNECTION_LAYERPROTOCOLNAME = _CONNECTION.enum_types_by_name['LayerProtocolName']
+Ber = _reflection.GeneratedProtocolMessageType('Ber', (_message.Message,), {
+  'DESCRIPTOR' : _BER,
+  '__module__' : 'connectionServiceWithNotif_pb2'
   # @@protoc_insertion_point(class_scope:connection.Ber)
-  ))
+  })
 _sym_db.RegisterMessage(Ber)
 
-Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), dict(
-  DESCRIPTOR = _CONNECTION,
-  __module__ = 'connectionServiceWithNotif_pb2'
+Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), {
+  'DESCRIPTOR' : _CONNECTION,
+  '__module__' : 'connectionServiceWithNotif_pb2'
   # @@protoc_insertion_point(class_scope:connection.Connection)
-  ))
+  })
 _sym_db.RegisterMessage(Connection)
 
-ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), dict(
-  DESCRIPTOR = _CONNECTIONLIST,
-  __module__ = 'connectionServiceWithNotif_pb2'
+ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), {
+  'DESCRIPTOR' : _CONNECTIONLIST,
+  '__module__' : 'connectionServiceWithNotif_pb2'
   # @@protoc_insertion_point(class_scope:connection.ConnectionList)
-  ))
+  })
 _sym_db.RegisterMessage(ConnectionList)
 
-
-
-_CONNECTIONSERVICEWITHNOTIF = _descriptor.ServiceDescriptor(
-  name='ConnectionServiceWithNotif',
-  full_name='connection.ConnectionServiceWithNotif',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  serialized_start=410,
-  serialized_end=635,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='CreateConnection',
-    full_name='connection.ConnectionServiceWithNotif.CreateConnection',
-    index=0,
-    containing_service=None,
-    input_type=_CONNECTION,
-    output_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
-    serialized_options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListConnection',
-    full_name='connection.ConnectionServiceWithNotif.ListConnection',
-    index=1,
-    containing_service=None,
-    input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
-    output_type=_CONNECTIONLIST,
-    serialized_options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetBer',
-    full_name='connection.ConnectionServiceWithNotif.GetBer',
-    index=2,
-    containing_service=None,
-    input_type=_CONNECTION,
-    output_type=_BER,
-    serialized_options=None,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_CONNECTIONSERVICEWITHNOTIF)
-
-DESCRIPTOR.services_by_name['ConnectionServiceWithNotif'] = _CONNECTIONSERVICEWITHNOTIF
-
+_CONNECTIONSERVICEWITHNOTIF = DESCRIPTOR.services_by_name['ConnectionServiceWithNotif']
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  _BER._serialized_start=77
+  _BER._serialized_end=97
+  _CONNECTION._serialized_start=100
+  _CONNECTION._serialized_end=345
+  _CONNECTION_LAYERPROTOCOLNAME._serialized_start=304
+  _CONNECTION_LAYERPROTOCOLNAME._serialized_end=345
+  _CONNECTIONLIST._serialized_start=347
+  _CONNECTIONLIST._serialized_end=407
+  _CONNECTIONSERVICEWITHNOTIF._serialized_start=410
+  _CONNECTIONSERVICEWITHNOTIF._serialized_end=635
 # @@protoc_insertion_point(module_scope)
diff --git a/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2_grpc.py b/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2_grpc.py
index 9a88a22b4bd9055f1d2e905abaa2496faadb5533..9a5a844c8d10e0fa9087d97050c1bc92de8a868d 100644
--- a/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2_grpc.py
+++ b/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_pb2_grpc.py
@@ -1,4 +1,5 @@
 # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
 import grpc
 
 import connectionServiceWithNotif_pb2 as connectionServiceWithNotif__pb2
@@ -6,76 +7,127 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
 
 
 class ConnectionServiceWithNotifStub(object):
-  # missing associated documentation comment in .proto file
-  pass
-
-  def __init__(self, channel):
-    """Constructor.
-
-    Args:
-      channel: A grpc.Channel.
-    """
-    self.CreateConnection = channel.unary_unary(
-        '/connection.ConnectionServiceWithNotif/CreateConnection',
-        request_serializer=connectionServiceWithNotif__pb2.Connection.SerializeToString,
-        response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-        )
-    self.ListConnection = channel.unary_unary(
-        '/connection.ConnectionServiceWithNotif/ListConnection',
-        request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
-        response_deserializer=connectionServiceWithNotif__pb2.ConnectionList.FromString,
-        )
-    self.GetBer = channel.unary_stream(
-        '/connection.ConnectionServiceWithNotif/GetBer',
-        request_serializer=connectionServiceWithNotif__pb2.Connection.SerializeToString,
-        response_deserializer=connectionServiceWithNotif__pb2.Ber.FromString,
-        )
+    """Missing associated documentation comment in .proto file."""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.CreateConnection = channel.unary_unary(
+                '/connection.ConnectionServiceWithNotif/CreateConnection',
+                request_serializer=connectionServiceWithNotif__pb2.Connection.SerializeToString,
+                response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+                )
+        self.ListConnection = channel.unary_unary(
+                '/connection.ConnectionServiceWithNotif/ListConnection',
+                request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+                response_deserializer=connectionServiceWithNotif__pb2.ConnectionList.FromString,
+                )
+        self.GetBer = channel.unary_stream(
+                '/connection.ConnectionServiceWithNotif/GetBer',
+                request_serializer=connectionServiceWithNotif__pb2.Connection.SerializeToString,
+                response_deserializer=connectionServiceWithNotif__pb2.Ber.FromString,
+                )
 
 
 class ConnectionServiceWithNotifServicer(object):
-  # missing associated documentation comment in .proto file
-  pass
-
-  def CreateConnection(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
-
-  def ListConnection(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
-
-  def GetBer(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    """Missing associated documentation comment in .proto file."""
+
+    def CreateConnection(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def ListConnection(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def GetBer(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
 
 def add_ConnectionServiceWithNotifServicer_to_server(servicer, server):
-  rpc_method_handlers = {
-      'CreateConnection': grpc.unary_unary_rpc_method_handler(
-          servicer.CreateConnection,
-          request_deserializer=connectionServiceWithNotif__pb2.Connection.FromString,
-          response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
-      ),
-      'ListConnection': grpc.unary_unary_rpc_method_handler(
-          servicer.ListConnection,
-          request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
-          response_serializer=connectionServiceWithNotif__pb2.ConnectionList.SerializeToString,
-      ),
-      'GetBer': grpc.unary_stream_rpc_method_handler(
-          servicer.GetBer,
-          request_deserializer=connectionServiceWithNotif__pb2.Connection.FromString,
-          response_serializer=connectionServiceWithNotif__pb2.Ber.SerializeToString,
-      ),
-  }
-  generic_handler = grpc.method_handlers_generic_handler(
-      'connection.ConnectionServiceWithNotif', rpc_method_handlers)
-  server.add_generic_rpc_handlers((generic_handler,))
+    rpc_method_handlers = {
+            'CreateConnection': grpc.unary_unary_rpc_method_handler(
+                    servicer.CreateConnection,
+                    request_deserializer=connectionServiceWithNotif__pb2.Connection.FromString,
+                    response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+            ),
+            'ListConnection': grpc.unary_unary_rpc_method_handler(
+                    servicer.ListConnection,
+                    request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+                    response_serializer=connectionServiceWithNotif__pb2.ConnectionList.SerializeToString,
+            ),
+            'GetBer': grpc.unary_stream_rpc_method_handler(
+                    servicer.GetBer,
+                    request_deserializer=connectionServiceWithNotif__pb2.Connection.FromString,
+                    response_serializer=connectionServiceWithNotif__pb2.Ber.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'connection.ConnectionServiceWithNotif', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class ConnectionServiceWithNotif(object):
+    """Missing associated documentation comment in .proto file."""
+
+    @staticmethod
+    def CreateConnection(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/connection.ConnectionServiceWithNotif/CreateConnection',
+            connectionServiceWithNotif__pb2.Connection.SerializeToString,
+            google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def ListConnection(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/connection.ConnectionServiceWithNotif/ListConnection',
+            google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+            connectionServiceWithNotif__pb2.ConnectionList.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def GetBer(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_stream(request, target, '/connection.ConnectionServiceWithNotif/GetBer',
+            connectionServiceWithNotif__pb2.Connection.SerializeToString,
+            connectionServiceWithNotif__pb2.Ber.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)