35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/fluent/plugin/in_telemetry_iosxe.rb', line 35
def start
super
@sigint = false
trap :INT do
log.info "got SIGINT ..."
@sigint = true
end
@hello_done = false
@buffer = ""
@parser = Nori.new(:parser => @parser, :advanced_typecasting => false)
hello = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<hello xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n <capabilities>\n<capability>urn:ietf:params:netconf:base:1.0</capability>\n </capabilities>\n</hello>]]>]]>\n EOS\n\n subscription = <<-EOS\n<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<rpc message-id=\"101\" xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\">\n <establish-subscription xmlns=\"urn:ietf:params:xml:ns:yang:ietf-event-notifications\" xmlns:yp=\"urn:ietf:params:xml:ns:yang:ietf-yang-push\">\n<stream>yp:yang-push</stream>\n<yp:xpath-filter>\#{@xpath_filter}</yp:xpath-filter>\n<yp:period>\#{@period}</yp:period>\n </establish-subscription>\n</rpc>\n EOS\n \n @ssh = Net::SSH.start(@server, @user, :port => @port, :password => @password, :timeout => 10)\n @channel = @ssh.open_channel do |channel|\n channel.subsystem(\"netconf\") do |ch, success|\n raise \"subsystem could not be started\" unless success\n ch.on_data do |c, data|\n log.debug \"on data ...\"\n log.debug data\n receive_data(data)\n end\n ch.on_close do |c|\n log.debug \"on close ...\"\n end\n ch.on_eof do |c|\n log.debug \"on eof ...\"\n end\n log.info \"send hello\"\n ch.send_data(hello)\n log.info \"send subscription\"\n ch.send_data(subscription)\n end\n end\n @ssh.loop(1) { not @sigint } # if we get sigint, we need to end loop \nend\n"
|