Upload
phungkien
View
227
Download
0
Embed Size (px)
Citation preview
Device Programmability Options with APIs
Thusi Kumarage
Lead Systems Engineer – Service Provider
BRKSDN-1119
• What People Want To Automate
• Key Technologies, Protocols & APIs
• NETCONF / YANG
• REST
• JSON-RPC
• RESTCONF
• Above the Device API
• DevOps
• Controllers
Agenda
Types of Interactions:
Bootstrap
Configure
Monitoring
Extend
What’s Evolving:
Manual -> Automated
Static -> Dynamic
Generic -> Custom
Why:
Agility
Scale
Cost
Complexity
Evolving Our Interaction with Network OS
The Evolution of Device Interaction
Traditional
Evolving ONIE
iPXE
Plug n Play
PoAP
Smart Install
Auto Install
CLI
BootstrapControllers
Openstack
Puppet/Chef
REST
JSON RPC
NETCONF
CLI
ConfigureI2RS
onePK
OpenFlow
Onbox
Python
EEM
ExtendPush model
BGP-LS
Netflow
SNMP
Syslog
CLI
Monitor
Configuration Management
Device 1
Vendor A
Model a
Version 1.1
Device 2
Vendor B
Model b
Version 2.3
Device X
Vendor Y
Model Ya
Version a.b
Device 3
Vendor C
Model C2
Version 11.5
Device 4
Vendor D
Model Dx
Version 1.7
• Different Management Interfaces
• Different Capabilities and Limitations
How > 70% of Config Management is Done Today
zaphod# conf t
Enter configuration commands, one per line. End with CNTL/Z.
zaphod(config)#
Task Oriented
Engineer
Friendly
Easy To Replay
No Special Tools
Software Unfriendly
Subject To Change
No Common Data Model
No Error Reporting
What about SNMP? That’s Software-Friendly…Right?
• SNMP works “reasonably well for device monitoring” (RFC 3535)
• Typical config: SNMPv2 read-only community strings
• Typical usage: interface statistics queries and traps
• Empirical Observation: SNMP is not used for configuration management
Lack of Writeable
MIBs
Security Concerns
Hard to Replay / Rollback
Requires special
applications
Requirements of Next-Gen Config Management
Easy to Use
Separates Config and Operational Data
Lots of Tooling
Accessible Format
Error Checking
Backup/Restore Capability
Human & Machine Friendly
Key Protocols: NETCONF
NETCONF is an IETF Config Management Protocol
V 1.0
• RFC 3535 Background and requirements
• RFC 47411.0 Base NETCONF Protocol
• RFC 4742NETCONF over SSH
V 1.1
• RFC 6241 –1.1 Base NETCONF Protocol
• RFC 6242 –NETCONF over SSH
Extensions
• RFC 5277 Notifications
• RFC 5717 Partial Locking
• RFC 6243 With defaults
• RFC 6244 NETCONF + YANG Architectural Overview
Content
Operations
Messages
Transport
Protocol Stack
• NMS
• Script
• Plugin
• Cut-n-Paste
NETCONF Uses a Client-Server Model
ServerClient
SSH
Connection-Oriented
Authenticated
Reliable
Trustworthy
Secure
Clients Make Requests Using RPCs
ServerClient
<rpc message-id=“1”>
<rpc-reply message-id=“1”>
A simple Remote Procedure Call (RPC) paradigm facilitates communication
between the client and the server (aka the network device).
Operations: What Clients Do to ServersOperation Description
<get-config> Retrieve all or part of specified configuration datastore
<edit-config> Loads all or part of a configuration to the specified configuration datastore
<copy-config> Replace an entire configuration datastore with another
<delete-config> Delete a configuration datastore
<commit> Copy candidate datastore to running datastore
<get> Retrieve running configuration and device state information
<lock> / <unlock> Lock or unlock the entire configuration datastore system
<close-session> Graceful termination of NETCONF session
<kill-session> Forced termination of NETCONF session
NETCONF Data Stores: Target of Operations
• Named containers that may hold an entire copy of the configuration
• Not all data stores are supported by all devices
• Running is the only mandatory data store
• Not all data stores are writable
• Check the device’s capabilities
• To make changes to a non-writeable data store, copy from a writable one
• URL is supported by IOS (for config-copy)
<running> <startup> <candidate> <URL>
NETCONF Encodes Everything In XML
<?xml version='1.0' encoding='UTF-8'?>
<rpc message-id="1001">
<get-config>
<source>
<running/>
</source>
</get-config>
</rpc>
eXtensible Markup Language
• XML describes data
• <> delimit markup text (tags)
• Machine and human readable
• W3C Recommendation
• Self-descriptive
NETCONF Protocol Stack Summary
• Config / Operational DataContent
• <get>, <get-config>, etcOperations
• <rpc>,<rpc-reply>Messages
• SSHTransport
Configuring Cisco Network Devices for NETCONF
Configuration Notes
XR5.2 (config)#ssh server v2
(config)#netconf agent tty
Requires k9sec and
mgbl packages
XR5.3/
6.0
(config)#ssh server v2
(config)#ssh server netconf port 830
(config)#netconf-yang agent ssh
NETCONF 1.1
Specifying port is
optional, default is 830
NXOS (config)#feature ssh Enabled by default
IOS /
XE
(config)#ip ssh version 2
(config)#netconf ssh
Need to enable SSH
Demo: NETCONFThe Hard Way
NETCONF Demo – Hard Way
ssh [email protected] -p 830 -s netconf
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:hello
xmlns:ns2="urn:ietf:params:xml:ns:netconf:base:1.0"><capabilities><capability>ur
n:ietf:params:netconf:base:1.1</capability><capability>urn:ietf:params:xml:ns:yan
g:ietf-netconf-
monitoring</capability><capability>urn:ietf:params:netconf:capability:candidate:1.
0</capability><capability>urn:ietf:params:netconf:capability:rollback-on-
error:1.0</capability><capability>urn:ietf:params:netconf:capability:validate:1.1</c
apability><capability>urn:ietf:params:netconf:capability:confirmed-
commit:1.1</capability></capabilities></ns2:hello>
]]>]]>
NETCONF Demo – Hard Way
#166
<?xml version="1.0" encoding="UTF-8"?><rpc message-id="101"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><get-
config><source><running/></source></get-config></rpc>
##
#266
<?xml version="1.0" encoding="UTF-8"?><rpc message-id="102"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><get-
config><source><running/></source><filter><interface-configurations
xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg"/></filter></get-
config></rpc>
##
NETCONF Demo – Hard Way#463
<?xml version="1.0" encoding="UTF-8"?><rpc message-id="104"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><edit-
config><target><candidate/></target><config><interface-configurations
xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-ifmgr-cfg"><interface-
configuration><active>act</active><interface-name>Loopback100</interface-
name><description>Configured by Netconf CLI</description></interface-
configuration></interface-configurations></config></edit-config></rpc>
##
#123
<?xml version="1.0" encoding="UTF-8"?><rpc message-id="106"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><commit/></rpc>
##
<hello> in IOS XRTKUMARAG-M-80UC:~ tkumarag$ ssh -p 830 -s [email protected] netconf
[email protected]'s password:
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.1</capability>
<capability>urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring</capability>
<capability>urn:ietf:params:netconf:capability:candidate:1.0</capability>
<capability>urn:ietf:params:netconf:capability:rollback-on-error:1.0</capability>
<capability>urn:ietf:params:netconf:capability:validate:1.1</capability>
<capability>urn:ietf:params:netconf:capability:confirmed-commit:1.1</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-cdp-cfg?module=Cisco-IOS-XR-cdp-
cfg&revision=2015-01-07</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-cdp-oper?module=Cisco-IOS-XR-cdp-
oper&revision=2015-01-07</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-config-mibs-cfg?module=Cisco-IOS-XR-config-
mibs-cfg&revision=2015-01-07</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-crypto-sam-cfg?module=Cisco-IOS-XR-crypto-sam-
cfg&revision=2015-01-07</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-crypto-sam-oper?module=Cisco-IOS-XR-crypto-sam-
oper&revision=2015-01-07</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-crypto-ssh-cfg?module=Cisco-IOS-XR-crypto-ssh-
cfg&revision=2015-01-07</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-crypto-ssh-oper?module=Cisco-IOS-XR-crypto-ssh-
oper&revision=2015-06-02</capability>
<snipped>
<hello> in IOS XETKUMARAG-M-80UC:~ tkumarag$ ssh -s [email protected] netconf
Password:
<?xml version="1.0" encoding="UTF-8"?>
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>
urn:ietf:params:netconf:base:1.0
</capability>
<capability>
urn:ietf:params:netconf:capability:writeable-running:1.0
</capability>
<capability>
urn:ietf:params:netconf:capability:startup:1.0
</capability>
<capability>
urn:ietf:params:netconf:capability:url:1.0
</capability>
<capability>
urn:cisco:params:netconf:capability:pi-data-model:1.0
</capability>
<capability>
urn:cisco:params:netconf:capability:notification:1.0
</capability>
</capabilities>
<session-id>3090573800</session-id>
</hello>
]]>]]>
Demo: NETCONFEasy Ways
NETCONF Demo – Easy Way
Download @ https://developer.cisco.com/site/confD/downloads/
Example:
./netconf-console --user=thusi --password=thusi --host=10.67.182.158 --port=830
--get-config
NETCONF References
• Tutorials:
• https://www.youtube.com/watch?v=Vr4kB1_6fLQ
• https://www.youtube.com/watch?v=xoPZO1N-x38
• Tools:
• Ncclient: https://github.com/leopoul/ncclient/
• Confd Netconf-console: http://www.tail-f.com/management-agent/
• References
• RFC 6241 https://tools.ietf.org/html/rfc6241
• RFC 6242 https://tools.ietf.org/html/rfc6242
Key Technologies: Data Models & YANG
Models
Source: https://en.wikipedia.org/wiki/Bunnings_Warehouse
Data Model Requirements for NETCONF
Easily Instantiated as XML
Easy to Read
Domain Specific
Extensible
Rich Conditions & Constraints
✖
✖
✖
✖
✖
✖
✖
✖
✖
Network Management
Device 1
Vendor A
Model a
Version 1.1
Device 2
Vendor B
Model b
Version 2.3
Device X
Vendor Y
Model Ya
Version a.b
Device 3
Vendor C
Model C2
Version 11.5
Device 4
Vendor D
Model Dx
Version 1.7
Netconf
Yang
Device Models Service Models
Container
Leaf
Container
Leaf-List
Container
List
Leaf
Container Leaf Leaf Leaf-Ref
Leaf
Container Leaf Leaf Leaf-Ref
Leaf
Container Leaf Leaf Leaf-Ref
YANG Model Statements and Hierarchy
Leaf: single value of a defined type
Leaf-list: multiple values of the same type
List: multiple records containing at least one leaf (key) and an arbitrary hierarchy of other statements
Container: groups other statements; has no value
Leafref: is a reference to another leaf
RFC6020
YANG Is A Language
module ietf-interfaces {import ietf-yang-types {
prefix yang; }container interfaces {
list interface { key "name"; leaf name {
type string;}leaf enabled {
type boolean; default "true";
}…
Self-contained top-level hierarchy of nodes
Import or define data types
RFC7223
Edited for Brevity
Leaf nodes for simple data
Lists for sequence of entries
Containers group related nodes
The Interfaces Data Model in Tree Diagram
Source: http://www.ietf.org/rfc/rfc7223.txt
The XML Instantiation<rpc-reply
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"
message-id="101">
<data>
<interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces”
xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type” >
<interface>
<name>eth0</name>
<type>ianaift:ethernetCsmacd</type>
<enabled>false</enabled>
</interface>
</interfaces>
</data>
</rpc-reply>
Where Yang Models Come From
IETF Vendors OpenConfig Other
YANG References
• Tutorials
• http://www.yang-central.org/twiki/bin/view/Main/YangTutorials
• https://www.youtube.com/watch?v=33VBb6N4yOY
• Tools
• Pyang (python) https://code.google.com/p/pyang/
• Commercial YANG browsers – MG-Soft, Segue Soft
• http://rob.sh/post/209 (pyangbind)
• References
• RFC 6020 (YANG) : http://tools.ietf.org/html/rfc6020
• RFC 7223 (Interface Model) http://www.ietf.org/rfc/rfc7223.txt
• https://github.com/YangModels/yang/tree/master/experimental/openconfig (OpenConfig)
• https://github.com/YangModels/yang/tree/master/vendor/cisco (Cisco)
Demo: YANG
Yang Demo
get-schema for Cisco-IOS-XR-ifmgr-cfg
#248
<?xml version="1.0" encoding="UTF-8"?><rpc message-id="102"
xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><get-schema
xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring" ><identifier>Cisco-
IOS-XR-ifmgr-cfg</identifier></get-schema></rpc>
##
Yang Demo
~ ubuntu$ git clone https://github.com/YangModels/yang.git
~ ubuntu$ cd /yang/vendor/cisco/xr/600
ubuntu:~/yang/vendor/cisco/xr/600$ vim Cisco-IOS-XR-ifmgr-cfg.yang
ubuntu:~/yang/vendor/cisco/xr/600$ pyang -f tree Cisco-IOS-XR-ifmgr-cfg.yang
Available Tools : Yang Explorer
Key API: REST
REST Follows a Familiar Model
HTTP GET
HTML
Describes how data
should be displayed to
please human viewer
HTTP GET
JSON/XML
Describes data in a
format applications
can understand
{"ids":[303776224, 19449911, 607032789,
86544242, 2506725913, 17631389],
"next_cursor":0, "next_cursor_str":"0",
"previous_cursor":0, "previous_cursor_str":"0"}
Web Browsing REST API
This is a RESTful API. Try It Yourself!https://restcountries.eu/
JSON
• JavaScript Object Notation
• Language independent data
format
• Light-weight, open
standard, human readable
• Compact alternative to XML
• RFC 4627
REST= REpresentational State Transfer
Proposed by Roy Fielding in 2000
Developed by W3C in parallel with HTTP 1.1
REST is An Architectural Style
Simple CRUD using HTTP
Stateless client-server model
Uses URIs to identify resources of interest
There Are LOTS of RESTful APIs
Why Does This Matter for Networking?
Human Readable
Software Friendly
Large Developer
Base
Client Libraries in Many
Languages
REST: It’s Not Just for Web Services
https://developer.cisco.com/
REST: Coming Soon to a Device Near You?
CSR1kV in 3.10S, RSP2 in XE 3.16
ASR1001-X, ASR1002-X in XE 3.14S
ASA 5500-X/ASAv v1.0 Dec14,FP9300 ASA Module v1.2 March15
Support Features are evolving
Demo: CURLing/ POSTMAN
Enabling REST API – CSR1000v
Configuration Notes
(config)#interfaceGigabitEthernet1
(config)#ip address <address> <mask>
Configure shared
Management Interface
(config)#virtual-service csr_mgmt
(config-virt-serv)#no activate
(config-virt-serv)#ip shared host-
interface GigabitEthernet1
(config-virt-serv)#activate
Configure virtual service
container and map
management interface
http://www.cisco.com/c/en/us/td/docs/routers/csr1000/software/configuration/csr1000Vswcfg/RESTAPI.html
REST Demo – Curling
##### Curl - Authenticate and Create a New Token
curl -X POST https://10.67.182.155:55443/api/v1/auth/token-services -H "Accept:application/json" -u "cisco:cisco" -k -3 -s | ./TXTFormat
TOKEN={”returned token ID”}
##### Show Interface Config
curl -H "Accept:application/json" -H "X-Auth-Token:$TOKEN" -H "content-type:application/json" -X GET https://10.67.182.155:55443/api/v1/interfaces/Gigabitethernet1 -k -3 -s | ./TXTFormat
##### Show Interface Stats
curl -H "Accept:application/json" -H "X-Auth-Token:$TOKEN" -H "content-type:application/json" -X GET https://10.67.182.155:55443/api/v1/interfaces/Gigabitethernet1/statistics -k -3 -s | ./TXTFormat
REST Demo – Curling
##### Configure ACL without port ##
curl -H "Accept:application/json" -H "X-Auth-Token:$TOKEN" -H "content-type:application/json" -X POST https://10.67.182.155:55443/api/v1/acl -d '{"rules":[{"sequence":"1","protocol":"tcp", "source":"10.1.1.0/24", "destination":"20.1.1.0/24", "action":"permit" }]}' -k -3 -s
##### Show ACL ##
curl -H "Accept:application/json" -H "X-Auth-Token:$TOKEN" -H "content-type:application/json" -X GET https://10.67.182.155:55443/api/v1/acl -k -3 -s | ./TXTFormat
##### Delete ACL ##
curl -H "Accept:application/json" -H "X-Auth-Token:$TOKEN" -H "content-type:application/json" -X DELETE https://10.67.182.155:55443/api/v1/acl/onep-acl-2953-2 -k -3 -s
REST Demo – POSTMAN
Key APIs: JSON-RPC
JSON-RPC: Like REST but Different
Source: http://www.drive.com.au/motor-news/head-to-head-subaru-brz-v-toyota-86-gts-20120806-23otc.html
Alike: Both Send/Receive JSON
REST (CSR 1000v) JSON-RPC (N7K NX-API)
REST: Many Resources
• https://10.67.182.155/api/v1…
…/global/banner
…/global/hostname
…/global/reload
…/interfaces/…
…/routing-svc/…
…/nat-svc/…
…/acl/…
…
JSON-RPC: Few Resources
• https://10.66.166.94/ins
Different: Resources (URIs)
CSR1kV Nexus 3/5/7/9K
REST: Standard HTTP Methods
• GET: Retrieve/List
• PUT: Replace
• POST: Create New Entry
• DELETE: Delete
JSON-RPC: POST + body method
Different: Methods
JSON-RPC Details
• A very simple remote procedure call protocol encoded in JSON
• http://www.jsonrpc.org/specification
JSON RPC Request Properties
• jsonrpc - (string) specifying the version - MUST be exacly "2.0"
• method – (string) name of the method to be invoked.
• params – (array) objects to be passed as parameters to the defined method.
• Id – (any type) used to match the response with request
JSON RPC Response Properties
• jsonrpc - (string) specifying the version - MUST be exacly "2.0"
• result - data returned by the invoked method.
• error - specified Error code if there was an error invoking the method, otherwise null.
• id - id of the corresponding request.
NX-API: JSON-RPC (and XML, JSON)
Nexus 9000, Nexus 3000, Nexus 7000 and 5000
Extension of CLI over HTTPs
• Show, config, Linux Bash
Demo: JSON-RPC
JSON-RPC Demo
curl -X POST http://10.66.166.94/ins -u "admin:123Cisco123" -H "content-type:application/json-rpc" -d '{"jsonrpc": "2.0", "method": "cli", "params": {"cmd": "show int count err", "version": 1.2 }, "id": 1}’
Interface config – change description :
curl -X POST http://10.66.166.94/ins -u "admin:123Cisco123" -H "content-type:application/json-rpc" -d '[{"jsonrpc": "2.0", "method": "cli", "params": {"cmd": "conf t", "version": 1.2}, "id": 1}, {"jsonrpc": "2.0", "method": "cli", "params": {"cmd": "interface eth 2/1", "version": 1.2}, "id": 2}, {"jsonrpc": "2.0", "method":"cli", "params": {"cmd": "description changed by CiscoLiveDemo", "version": 1.2}, "id": 3}]'
JSON-RPC Demo
Key APIs: RESTCONF
RESTCONF: Best of Both Worlds?
NETCONF/YANG
– SSH
– XML
+ JSON
+ HTTP(S)
RESTCONF
NETCONF RESTYANG
JSON
HTTP
“the simplicity of the HTTP protocol with the predictability
and automation potential of a schema-driven API”
RESTCONF is Not A Replacement for NETCONF
• Enables Web Applications to access configuration and operational data
• A simplified transaction model
• Data can be XML or JSON
• Operations include: DELETE, PATCH, POST, PUT, GET
NETCONF Operations Not Supported By RESTCONF
• Config locking
• Candidate config
• Startup config
• Validate
• Confirmed commit
It’s Still Early Days for RESTCONF
RESTCONF
NETCONF http://datatracker.ietf.org/doc/draft-ietf-netconf-
restconf/
HTTP REQUEST:
GET /restconf/operational/opendaylight-inventory:nodes/node/pe1
HTTP/1.1
Host: norcal-00:8181
Accept: application/xml
Above the API
DevOps: Applying IT Automation Tools to Networks
Master/client
Agent-driven (mostly)
Intent-based
Openstack: Applying Cloud Automation Tools To Networks
• Openstack: set of software tools for building and managing cloud computing platforms
• Allows users to spin up and connect VMs and other resources
• Can spin up virtual routers (e.g. CSR) and configure physical and virtual routers.
• Actual interface to device: NETCONF (NX), REST (CSR)
Controllers: Applying a Centralized Model
Controllers: Applying a Centralized ModelTAIL-F NCS
Controllers: Applying a Centralized Model
Resources• Devops
• http://www.infoworld.com/article/2609482/data-center/data-center-review-puppet-vs-chef-vs-ansible-vs-salt.html
• http://jedelman.com/home/leveraging-cisco-nx-api-with-ansible-to-make-your-life-easier/
• https://github.com/spotify/napalm
• Openstack
• http://www.cisco.com/c/en/us/solutions/data-center-virtualization/openstack-at-cisco/index.html
• http://docwiki.cisco.com/wiki/Install_and_Setup_of_Cisco_Cloud_Services_Router_(CSR)_for_OpenStack_VPN
• Controllers
• http://www.opendaylight.org/
• http://www.tail-f.com/
• https://developer.cisco.com/site/apic-em/
Conclusion
The Network Isn’t Isolated Anymore
Network
Web Apps
Cloud
DevOpsREST
JSON
RubyPython
JSON-RPC
XMLNETCONF
RESTCONFAnsible
Puppet
Openstack
Mashups
YANG
Chef
Configuration Automation SummaryProtocol / Tool Platform Availability Coverage Pros Cons
XR NX XE IO
S
ASA
CLI All All Features, All
Platforms
Not Automation Friendly
NETCONF All Industry Standard Evolving Data Models
YANG Growing Tooling Early days
REST Task-specific Popular format Limited Platforms
JSON-RPC All Popular format Limited Platforms
Puppet/Chef Task-specific Devops-ready Server optimized
Openstack Task-specific Cloud-ready Limited use cases
Further Interested ?
• DEVNET-1000 - Coding 100: Why should I care about APIs?
• DEVNET-1077 - Automating with NX-OS - Let's Get Started
• BRKSPG-3630 - Service Driven Network Automation - Powered by Tail-f
• DEVNET-1081 - Introduction to RESTCONF
• BRKSPG-3616 - SDN and NFV for Service Providers
• BRKSEC-2760 - Automating and Accelerating Security Through SDN and NFV Architecture
• BRKSDN-2065 - Cisco Virtual Managed Services (vMS)
• DEVNET-1623 - The APIC Enterprise Module API - Overview
Q & A
Complete Your Online Session Evaluation
Learn online with Cisco Live!
Visit us online after the conference
for full access to session videos and
presentations.
www.CiscoLiveAPAC.com
Give us your feedback and receive a
Cisco 2016 T-Shirt by completing the
Overall Event Survey and 5 Session
Evaluations.– Directly from your mobile device on the Cisco Live
Mobile App
– By visiting the Cisco Live Mobile Site http://showcase.genie-connect.com/ciscolivemelbourne2016/
– Visit any Cisco Live Internet Station located
throughout the venue
T-Shirts can be collected Friday 11 March
at Registration
Thank you