trisulrp 1.2.3 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +10 -1
- data/VERSION +1 -1
- data/lib/trisulrp/guids.rb +43 -0
- data/lib/trisulrp/keys.rb +200 -0
- data/lib/trisulrp/protocol.rb +103 -0
- data/lib/{trp.pb.rb → trisulrp/trp.pb.rb} +91 -48
- data/lib/{trp.proto → trisulrp/trp.proto} +84 -49
- data/lib/trisulrp.rb +6 -5
- data/test/Demo_Client.key +13 -16
- data/test/test_alerts.rb +84 -0
- data/test/test_cap.rb +55 -0
- data/test/test_key_flows.rb +61 -0
- data/test/test_resources.rb +76 -0
- data/test/test_trisulrp.rb +13 -4
- data/trisulrp.gemspec +15 -5
- metadata +17 -7
- data/lib/trplib.rb +0 -330
data/README.rdoc
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
= trisulrp
|
2
2
|
|
3
|
-
|
3
|
+
Trisul Remote Protocol
|
4
|
+
This gem allows you to script advanced network security analysis tasks via Ruby.
|
5
|
+
|
6
|
+
Key Features :
|
7
|
+
* Analysis done remotely (at Trisul server)
|
8
|
+
* All communications over TLS
|
9
|
+
* Strong authentication using Client Certificates
|
10
|
+
* Easy to use
|
11
|
+
|
12
|
+
|
4
13
|
|
5
14
|
== Contributing to trisulrp
|
6
15
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.4
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# == Guids - shortcuts to some wellknown guids
|
2
|
+
#
|
3
|
+
module TrisulRP::Guids
|
4
|
+
|
5
|
+
CG_AGGREGATE = "{393B5EBC-AB41-4387-8F31-8077DB917336}" # Aggregate statistics
|
6
|
+
CG_APP = "{C51B48D4-7876-479E-B0D9-BD9EFF03CE2E}" # Application wise traffic
|
7
|
+
CG_DIRMAC = "{79F60A94-44BD-4C55-891A-77823D59161B}" # Traffic between two MACs
|
8
|
+
CG_HOST = "{4CD742B1-C1CA-4708-BE78-0FCA2EB01A86}" # Stats for each IP Host
|
9
|
+
CG_EXTERNAL_HOST = "{00AA77BB-0063-11A5-8380-FEBDBABBDBEA}" # Hosts outside HOME NETWORK
|
10
|
+
CG_INTERNAL_HOST = "{889900CC-0063-11A5-8380-FEBDBABBDBEA}" # Hosts in HOME NETWORK
|
11
|
+
CG_WEB_HOST = "{EEF95297-0C8D-4673-AD6B-F4BD2345FD69}" # Hosts talking HTTP/HTTPS
|
12
|
+
CG_EMAIL_HOST = "{22D4082E-B8BA-40D0-A287-1F524DF8DA7B}" # Hosts with Email traffic
|
13
|
+
CG_SSH_HOST = "{439002E4-3758-4E88-9438-8034FE1616AF}" # Hosts with SSH traffic
|
14
|
+
CG_UNUSUAL_TRAFFIC_HOSTS = "{AE3A1449-5663-41A5-A028-FDE61DBB7EFA}" # Hosts with Unusual traffic
|
15
|
+
CG_SUBNET = "{429B65AD-CDA4-452E-A852-24D8A3D0FBB3}" # Stats for configured IP Subnets
|
16
|
+
CG_INTERFACE = "{8AC478BC-8891-0009-5F31-80774B010086}" # Per interface statistics
|
17
|
+
CG_UNLEASH_APPS = "{FF889910-9293-AAA5-0028-883991889884}" # Demo of Rule based cg,count your enterprise apps
|
18
|
+
CG_ALERT_SIGNATURES = "{A0FA9464-B496-4A20-A9AB-4D2D09AFF902}" # Individual Alert Signatures
|
19
|
+
CG_ALERT_CLASSES = "{20BC4345-37F0-44D0-ABFF-3BED97363CB1}" # IDS Alert Classfication
|
20
|
+
CG_META_COUNTER_GROUP = "{4D88CC23-2883-4DEA-A313-A23B60FE8BDA}" # Second order stats for counters
|
21
|
+
CG_META_SESSION_GROUP = "{594606BD-EEB2-4E0B-BAC4-84B7057088C8}" # Second order stats for flow activity
|
22
|
+
CG_FLOWGENS = "{2314BB8E-2BCC-4B86-8AA2-677E5554C0FE}" # Flow generator traffic
|
23
|
+
CG_FLOWINTFS = "{C0B04CA7-95FA-44EF-8475-3835F3314761}" # Flow interface traffic
|
24
|
+
CG_HTTP_HOSTS = "{D2AAD7C6-E129-4366-A2AD-A8CB9AA4C2F4}" # Traffic by HTTP Host Headers
|
25
|
+
CG_HTTP_CONTENT_TYPES = "{C0C9757F-2005-4CC5-BB96-D72F607E6188}" # Traffic by HTTP Content Types
|
26
|
+
CG_MAC = "{4B09BD22-3B99-40FC-8215-94A430EA0A35}" # Traffic per Ethernet MAC
|
27
|
+
CG_LINKLAYERSTATS = "{9F5AD3A9-C74D-46D8-A8A8-DCDD773730BA}" # Breakdown of activity at link layer
|
28
|
+
CG_NETWORKLAYERSTATS = "{E89BCD56-30AD-40F5-B1C8-8B7683F440BD}" # Breakdown of activity at network layer
|
29
|
+
CG_VSAT = "{A8776788-B8E3-4108-AD24-0E3927D9364B}" # Traffic per VSAT
|
30
|
+
CG_VLANSTATS = "{0EC72E9E-3AD2-43FD-8173-74693EEA08D0}" # Per VLAN Activity Monitor
|
31
|
+
CG_HOSTSIPV6 = "{6CD742B1-C1CA-4708-BE78-0FCA2EB01A86}" # Stats for each IPv6 Host
|
32
|
+
|
33
|
+
AG_IDS = "{9AFD8C08-07EB-47E0-BF05-28B4A7AE8DC9}" # Track IDS Alerts
|
34
|
+
AG_BLACKLIST = "{5E97C3A3-41DB-4E34-92C3-87C904FAB83E}" # Blacklist used for Badfellas and Malware
|
35
|
+
AG_TCA = "{03AC6B72-FDB7-44C0-9B8C-7A1975C1C5BA}" # Track TCA Alerts
|
36
|
+
AG_FLOWTRACK = "{18CE5961-38FF-4AEA-BAF8-2019F3A09063}" # Track flow based Alerts
|
37
|
+
|
38
|
+
RG_URL = "{4EF9DEB9-4332-4867-A667-6A30C5900E9E}" # URL Resources
|
39
|
+
RG_DNS = "{D1E27FF0-6D66-4E57-BB91-99F76BB2143E}" # DNS Resources
|
40
|
+
|
41
|
+
SG_TCP = "{99A78737-4B41-4387-8F31-8077DB917336}" # TCP Sessions
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,200 @@
|
|
1
|
+
# == Keys - Utilities to convert a key to a human readable string & back
|
2
|
+
#
|
3
|
+
module TrisulRP::Keys
|
4
|
+
|
5
|
+
class Null
|
6
|
+
def self.xform(kstring)
|
7
|
+
yield kstring if block_given?
|
8
|
+
kstring
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class HNumber
|
13
|
+
# key to human string
|
14
|
+
# => width unused
|
15
|
+
# => kstring = hex number like A011
|
16
|
+
# output is a decimal number
|
17
|
+
def self.xform(kstring)
|
18
|
+
ret = kstring.hex.to_s
|
19
|
+
yield ret if block_given?
|
20
|
+
ret
|
21
|
+
end
|
22
|
+
|
23
|
+
# human string to key
|
24
|
+
# => width padding eg to output 000B when input = 11 and field is a 2 byte
|
25
|
+
# => dstring input decimal
|
26
|
+
def self.invert_xform(width,dstring)
|
27
|
+
ret = dstring.to_i.to_s(16).rjust(width,"0").upcase
|
28
|
+
yield ret if block_given?
|
29
|
+
ret
|
30
|
+
end
|
31
|
+
|
32
|
+
# is_key_pattern?
|
33
|
+
def self.is_key_form? patt
|
34
|
+
return false if patt.nil?
|
35
|
+
[2,4,8].member? patt.length and patt =~ /(\d|[a-f]|[A-F])+/
|
36
|
+
end
|
37
|
+
|
38
|
+
# is_human_pattern?
|
39
|
+
def self.is_human_form? patt
|
40
|
+
patt.to_i > 0 or patt.squeeze("0") == "0"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
class Host
|
46
|
+
# key to human string
|
47
|
+
def self.xform(kstring)
|
48
|
+
ret = kstring.split('.').collect { |hexbyte| hexbyte.hex.to_s }.join('.')
|
49
|
+
yield ret if block_given?
|
50
|
+
ret
|
51
|
+
end
|
52
|
+
|
53
|
+
# human string to key
|
54
|
+
def self.invert_xform(dstring)
|
55
|
+
ret = dstring.split('.').collect { |decbyte| decbyte.to_i.to_s(16).rjust(2,"00").upcase}.join('.')
|
56
|
+
yield ret if block_given?
|
57
|
+
ret
|
58
|
+
end
|
59
|
+
|
60
|
+
# is_key_pattern?
|
61
|
+
def self.is_key_form? patt
|
62
|
+
return false if patt.nil?
|
63
|
+
patt.length == 11 and (patt[2] == "." || patt[5] == "." || patt[8] == ".")
|
64
|
+
end
|
65
|
+
|
66
|
+
# is_human_pattern?
|
67
|
+
def self.is_human_form? patt
|
68
|
+
patt.split('.').select { |szbyte| (1..255).cover?(szbyte.to_i) or szbyte.squeeze("0") == "0" }.size == 4
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# UDP/TCP port a 2 byte number
|
73
|
+
class Port
|
74
|
+
|
75
|
+
# key to human string
|
76
|
+
def self.xform(kstring)
|
77
|
+
s = "Port-" + kstring[2..-1].hex.to_s
|
78
|
+
yield s if block_given?
|
79
|
+
return s
|
80
|
+
end
|
81
|
+
|
82
|
+
# human string to key
|
83
|
+
# handles formats
|
84
|
+
# => Port-80
|
85
|
+
# => port-80
|
86
|
+
# => 80
|
87
|
+
def self.invert_xform(dstring)
|
88
|
+
if dstring.size > 5 and dstring[0..4].upcase == "PORT-"
|
89
|
+
return "p-"+dstring.slice(5..-1).to_i.to_s(16).rjust(4,"0000").upcase
|
90
|
+
else
|
91
|
+
return "p-"+dstring.to_i.to_s(16).rjust(4,"0000").upcase
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# is_key_form?
|
96
|
+
def self.is_key_form? patt
|
97
|
+
return false if patt.nil?
|
98
|
+
patt.length == 6 and patt[0] == 'p' and patt[1] == '-'
|
99
|
+
end
|
100
|
+
|
101
|
+
# is_human_form?
|
102
|
+
def self.is_human_form? patt
|
103
|
+
patt[0..4].upcase == "PORT-" and ((1..65535).include? patt[5..-1].to_i)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
class Subnet
|
108
|
+
# key to human string
|
109
|
+
# => key - 00.00.00.00_8888
|
110
|
+
def self.xform(kstring)
|
111
|
+
parts=kstring.split('/')
|
112
|
+
ret = Host.xform(parts[0]) + "/" + HNumber.xform(parts[1])
|
113
|
+
yield ret if block_given?
|
114
|
+
ret
|
115
|
+
end
|
116
|
+
|
117
|
+
# human string to key
|
118
|
+
def self.invert_xform(dstring)
|
119
|
+
parts=dstring.split('/')
|
120
|
+
ret = Host.invert_xform(parts[0]) + "/" + HNumber.invert_xform(2,parts[1])
|
121
|
+
yield ret if block_given?
|
122
|
+
ret
|
123
|
+
end
|
124
|
+
|
125
|
+
# is_key_pattern?
|
126
|
+
def self.is_key_form? patt
|
127
|
+
return false if patt.nil?
|
128
|
+
parts = patt.split('/')
|
129
|
+
parts.size == 2 and Host.is_key_form?(parts[0]) and HNumber.is_key_form?(parts[1])
|
130
|
+
end
|
131
|
+
|
132
|
+
# is_human_pattern?
|
133
|
+
def self.is_human_form? patt
|
134
|
+
parts = patt.split('/')
|
135
|
+
parts.size == 2 and Host.is_human_form?(parts[0]) and HNumber.is_human_form?(parts[1])
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
class HostInterface
|
141
|
+
# key to human string
|
142
|
+
# => key - 00.00.00.00/10
|
143
|
+
def self.xform(kstring)
|
144
|
+
parts=kstring.split('_')
|
145
|
+
ret = Host.xform(parts[0]) + "_" + HNumber.xform(parts[1])
|
146
|
+
yield ret if block_given?
|
147
|
+
ret
|
148
|
+
end
|
149
|
+
|
150
|
+
# human string to key
|
151
|
+
def self.invert_xform(dstring)
|
152
|
+
parts=dstring.split('_')
|
153
|
+
ret = Host.invert_xform(parts[0]) + "_" + HNumber.invert_xform(4,parts[1])
|
154
|
+
yield ret if block_given?
|
155
|
+
ret
|
156
|
+
end
|
157
|
+
|
158
|
+
# is_key_pattern?
|
159
|
+
def self.is_key_form? patt
|
160
|
+
return false if patt.nil?
|
161
|
+
parts = patt.split('_')
|
162
|
+
parts.size == 2 and Host.is_key_form?(parts[0]) and HNumber.is_key_form?(parts[1])
|
163
|
+
end
|
164
|
+
|
165
|
+
# is_human_pattern?
|
166
|
+
def self.is_human_form? patt
|
167
|
+
parts = patt.split('_')
|
168
|
+
parts.size == 2 and Host.is_human_form?(parts[0]) and HNumber.is_human_form?(parts[1])
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
# key and human form are same
|
173
|
+
class ASNumber
|
174
|
+
# key to human string
|
175
|
+
# => key - ASnnn
|
176
|
+
def self.xform(kstring)
|
177
|
+
yield kstring if block_given?
|
178
|
+
kstring
|
179
|
+
end
|
180
|
+
|
181
|
+
# human string to key
|
182
|
+
def self.invert_xform(dstring)
|
183
|
+
yield dstring if block_given?
|
184
|
+
dstring
|
185
|
+
end
|
186
|
+
|
187
|
+
# is_key_pattern?
|
188
|
+
def self.is_key_form? patt
|
189
|
+
return false if patt.nil?
|
190
|
+
patt[0..1]=="AS"
|
191
|
+
end
|
192
|
+
|
193
|
+
# is_human_pattern?
|
194
|
+
def self.is_human_form? patt
|
195
|
+
return false if patt.nil?
|
196
|
+
patt[0..1]=="AS"
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# = Trisul Remote Protocol helper functions
|
2
|
+
#
|
3
|
+
# dependency = ruby_protobuf
|
4
|
+
#
|
5
|
+
# Akhil.M & Dhinesh.K (c) 2010 Unleash Networks
|
6
|
+
require 'openssl'
|
7
|
+
require 'socket'
|
8
|
+
require 'time'
|
9
|
+
|
10
|
+
module TrisulRP::Protocol
|
11
|
+
include TrisulRP::Guids
|
12
|
+
|
13
|
+
# == TLS Connect to a Trisul instance
|
14
|
+
# => server : IP Address or hostname
|
15
|
+
# => port : TRP port, typically 12001 (see trisulConfig.xml)
|
16
|
+
# => client_cert_file : Client certificate file issued by admin
|
17
|
+
# => client_key_file : Client key file issued by admin
|
18
|
+
#
|
19
|
+
# yields or returns a connection object that can be used in subsequent
|
20
|
+
# calls to communicate to the trisul instance
|
21
|
+
#
|
22
|
+
#
|
23
|
+
def connect(server,port,client_cert_file,client_key_file)
|
24
|
+
tcp_sock=TCPSocket.open(server,port)
|
25
|
+
ctx = OpenSSL::SSL::SSLContext.new
|
26
|
+
ctx.cert = OpenSSL::X509::Certificate.new(File.read(client_cert_file))
|
27
|
+
ctx.key = OpenSSL::PKey::RSA.new(File.read(client_key_file))
|
28
|
+
ssl_sock = OpenSSL::SSL::SSLSocket.new(tcp_sock, ctx)
|
29
|
+
ssl_sock.connect
|
30
|
+
yield ssl_sock if block_given?
|
31
|
+
return ssl_sock
|
32
|
+
end
|
33
|
+
|
34
|
+
# == Dispatch request & get response
|
35
|
+
# => trp_socket : socket previously opened via connect_trp
|
36
|
+
# => trp_request : a TRP request object
|
37
|
+
#
|
38
|
+
# yields or returns a response object
|
39
|
+
# raises an error if the server returns an ErrorResponse
|
40
|
+
#
|
41
|
+
def get_response(trp_socket,trp_request)
|
42
|
+
outbuf=""
|
43
|
+
outbuf=trp_request.serialize_to_string
|
44
|
+
trp_socket.write([outbuf.length].pack("N*"))
|
45
|
+
trp_socket.write(outbuf)
|
46
|
+
inbuf = trp_socket.read(4)
|
47
|
+
buflenarr=inbuf.unpack("N*")
|
48
|
+
datalen=buflenarr[0]
|
49
|
+
dataarray=trp_socket.read(datalen)
|
50
|
+
resp =TRP::Message.new
|
51
|
+
resp.parse dataarray
|
52
|
+
raise resp.error_response if resp.trp_command == TRP::Message::Command::ERROR_RESPONSE
|
53
|
+
yield resp if block_given?
|
54
|
+
return resp
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
# returns an array of [Time_from, Time_to] representing time window available on Trisul
|
59
|
+
def get_available_time(conn)
|
60
|
+
from_tm=to_tm=nil
|
61
|
+
req=mk_request(TRP::Message::Command::COUNTER_GROUP_INFO_REQUEST,
|
62
|
+
:counter_group => TrisulRP::Guids::CG_AGGREGATE)
|
63
|
+
get_response(conn,req) do |resp|
|
64
|
+
from_tm = Time.at(resp.counter_group_info_response.group_details[0].time_interval.from.tv_sec)
|
65
|
+
to_tm = Time.at(resp.counter_group_info_response.group_details[0].time_interval.to.tv_sec)
|
66
|
+
end
|
67
|
+
return [from_tm,to_tm]
|
68
|
+
end
|
69
|
+
|
70
|
+
# returns a hash of key => label
|
71
|
+
def get_labels_for_keys(conn, cgguid, key_arr)
|
72
|
+
req = mk_request(TRP::Message::Command::KEY_LOOKUP_REQUEST,
|
73
|
+
:counter_group => cgguid, :keys => key_arr.uniq )
|
74
|
+
h = key_arr.inject({}) { |m,i| m.store(i,i); m }
|
75
|
+
get_response(conn,req) do |resp|
|
76
|
+
resp.key_lookup_response.key_details.each { |d| h.store(d.key,d.label) }
|
77
|
+
end
|
78
|
+
return h
|
79
|
+
end
|
80
|
+
|
81
|
+
# fill up time_interval
|
82
|
+
def mk_time_interval(tmarr)
|
83
|
+
tint=TRP::TimeInterval.new
|
84
|
+
tint.from=TRP::Timestamp.new(:tv_sec => tmarr[0].tv_sec, :tv_usec => 0)
|
85
|
+
tint.to=TRP::Timestamp.new(:tv_sec => tmarr[1].tv_sec, :tv_usec => 0)
|
86
|
+
return tint
|
87
|
+
end
|
88
|
+
|
89
|
+
# shortcut to make a request
|
90
|
+
def mk_request(cmd_id,params)
|
91
|
+
req = TRP::Message.new(:trp_command => cmd_id )
|
92
|
+
case cmd_id
|
93
|
+
when TRP::Message::Command::COUNTER_GROUP_INFO_REQUEST
|
94
|
+
req.counter_group_info_request = TRP::CounterGroupInfoRequest.new(params)
|
95
|
+
when TRP::Message::Command::KEY_LOOKUP_REQUEST
|
96
|
+
req.key_lookup_request = TRP::KeyLookupRequest.new(params)
|
97
|
+
else
|
98
|
+
raise "Unknown TRP command ID"
|
99
|
+
end
|
100
|
+
return req
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
@@ -61,6 +61,8 @@ module TRP
|
|
61
61
|
class ResourceItemResponse < ::ProtocolBuffers::Message; end
|
62
62
|
class ResourceGroupRequest < ::ProtocolBuffers::Message; end
|
63
63
|
class ResourceGroupResponse < ::ProtocolBuffers::Message; end
|
64
|
+
class KeyLookupRequest < ::ProtocolBuffers::Message; end
|
65
|
+
class KeyLookupResponse < ::ProtocolBuffers::Message; end
|
64
66
|
|
65
67
|
# enums
|
66
68
|
module AuthLevel
|
@@ -212,6 +214,8 @@ module TRP
|
|
212
214
|
RESOURCE_ITEM_RESPONSE = 47
|
213
215
|
RESOURCE_GROUP_REQUEST = 48
|
214
216
|
RESOURCE_GROUP_RESPONSE = 49
|
217
|
+
KEY_LOOKUP_REQUEST = 50
|
218
|
+
KEY_LOOKUP_RESPONSE = 51
|
215
219
|
end
|
216
220
|
|
217
221
|
required ::TRP::Message::Command, :trp_command, 1
|
@@ -257,6 +261,8 @@ module TRP
|
|
257
261
|
optional ::TRP::ResourceItemResponse, :resource_item_response, 46
|
258
262
|
optional ::TRP::ResourceGroupRequest, :resource_group_request, 47
|
259
263
|
optional ::TRP::ResourceGroupResponse, :resource_group_response, 48
|
264
|
+
optional ::TRP::KeyLookupRequest, :key_lookup_request, 49
|
265
|
+
optional ::TRP::KeyLookupResponse, :key_lookup_response, 50
|
260
266
|
|
261
267
|
gen_methods! # new fields ignored after this point
|
262
268
|
end
|
@@ -372,7 +378,8 @@ module TRP
|
|
372
378
|
required ::TRP::TimeInterval, :time_interval, 3
|
373
379
|
required :int64, :num_datagrams, 4
|
374
380
|
required :int64, :num_bytes, 5
|
375
|
-
required :string, :
|
381
|
+
required :string, :sha1, 6
|
382
|
+
required :bytes, :contents, 7
|
376
383
|
|
377
384
|
gen_methods! # new fields ignored after this point
|
378
385
|
end
|
@@ -393,7 +400,7 @@ module TRP
|
|
393
400
|
end
|
394
401
|
|
395
402
|
class SearchKeysRequest < ::ProtocolBuffers::Message
|
396
|
-
optional :int64, :context, 1
|
403
|
+
optional :int64, :context, 1, :default => 0
|
397
404
|
required :string, :counter_group, 2
|
398
405
|
required :string, :pattern, 3
|
399
406
|
required :int64, :maxitems, 4
|
@@ -410,7 +417,7 @@ module TRP
|
|
410
417
|
end
|
411
418
|
|
412
419
|
class CounterGroupInfoRequest < ::ProtocolBuffers::Message
|
413
|
-
optional :int64, :context, 1
|
420
|
+
optional :int64, :context, 1, :default => 0
|
414
421
|
optional :string, :counter_group, 2
|
415
422
|
|
416
423
|
gen_methods! # new fields ignored after this point
|
@@ -424,34 +431,44 @@ module TRP
|
|
424
431
|
end
|
425
432
|
|
426
433
|
class SessionItemRequest < ::ProtocolBuffers::Message
|
427
|
-
optional :int64, :context, 1
|
428
|
-
|
429
|
-
|
430
|
-
|
434
|
+
optional :int64, :context, 1, :default => 0
|
435
|
+
optional :string, :session_group, 2, :default => "{99A78737-4B41-4387-8F31-8077DB917336}"
|
436
|
+
repeated :string, :session_keys, 3
|
437
|
+
repeated ::TRP::SessionID, :session_ids, 4
|
431
438
|
|
432
439
|
gen_methods! # new fields ignored after this point
|
433
440
|
end
|
434
441
|
|
435
442
|
class SessionItemResponse < ::ProtocolBuffers::Message
|
436
|
-
|
443
|
+
# forward declarations
|
444
|
+
class Item < ::ProtocolBuffers::Message; end
|
445
|
+
|
446
|
+
# nested messages
|
447
|
+
class Item < ::ProtocolBuffers::Message
|
448
|
+
optional :string, :session_key, 1
|
449
|
+
optional ::TRP::SessionID, :session_id, 2
|
450
|
+
optional :string, :user_label, 3
|
451
|
+
required ::TRP::TimeInterval, :time_interval, 4
|
452
|
+
required :int64, :state, 5
|
453
|
+
required :int64, :az_bytes, 6
|
454
|
+
required :int64, :za_bytes, 7
|
455
|
+
required ::TRP::KeyDetails, :key1A, 8
|
456
|
+
required ::TRP::KeyDetails, :key2A, 9
|
457
|
+
required ::TRP::KeyDetails, :key1Z, 10
|
458
|
+
required ::TRP::KeyDetails, :key2Z, 11
|
459
|
+
|
460
|
+
gen_methods! # new fields ignored after this point
|
461
|
+
end
|
462
|
+
|
463
|
+
optional :int64, :context, 1, :default => 0
|
437
464
|
required :string, :session_group, 2
|
438
|
-
|
439
|
-
optional ::TRP::SessionID, :session_id, 4
|
440
|
-
optional :string, :user_label, 5
|
441
|
-
required ::TRP::TimeInterval, :time_interval, 6
|
442
|
-
required :int64, :state, 7
|
443
|
-
required :int64, :az_bytes, 8
|
444
|
-
required :int64, :za_bytes, 9
|
445
|
-
required ::TRP::KeyDetails, :key1A, 10
|
446
|
-
required ::TRP::KeyDetails, :key2A, 11
|
447
|
-
required ::TRP::KeyDetails, :key1Z, 12
|
448
|
-
required ::TRP::KeyDetails, :key2Z, 13
|
465
|
+
repeated ::TRP::SessionItemResponse::Item, :items, 3
|
449
466
|
|
450
467
|
gen_methods! # new fields ignored after this point
|
451
468
|
end
|
452
469
|
|
453
470
|
class BulkCounterItemRequest < ::ProtocolBuffers::Message
|
454
|
-
optional :int64, :context, 1
|
471
|
+
optional :int64, :context, 1, :default => 0
|
455
472
|
required :string, :counter_group, 2
|
456
473
|
required :int64, :meter, 3
|
457
474
|
required ::TRP::TimeInterval, :time_interval, 4
|
@@ -468,7 +485,7 @@ module TRP
|
|
468
485
|
end
|
469
486
|
|
470
487
|
class TopperSnapshotRequest < ::ProtocolBuffers::Message
|
471
|
-
optional :int64, :context, 1
|
488
|
+
optional :int64, :context, 1, :default => 0
|
472
489
|
required :string, :counter_group, 2
|
473
490
|
required :int64, :meter, 3
|
474
491
|
required ::TRP::TimeInterval, :Time, 4
|
@@ -490,7 +507,7 @@ module TRP
|
|
490
507
|
end
|
491
508
|
|
492
509
|
class UpdateKeyRequest < ::ProtocolBuffers::Message
|
493
|
-
optional :int64, :context, 1
|
510
|
+
optional :int64, :context, 1, :default => 0
|
494
511
|
required :string, :counter_group, 2
|
495
512
|
required :string, :key, 4
|
496
513
|
required :string, :label, 5
|
@@ -500,12 +517,12 @@ module TRP
|
|
500
517
|
end
|
501
518
|
|
502
519
|
class KeySessionActivityRequest < ::ProtocolBuffers::Message
|
503
|
-
optional :int64, :context, 1
|
504
|
-
|
520
|
+
optional :int64, :context, 1, :default => 0
|
521
|
+
optional :string, :session_group, 2, :default => "{99A78737-4B41-4387-8F31-8077DB917336}"
|
505
522
|
required :string, :key, 3
|
506
|
-
|
507
|
-
|
508
|
-
|
523
|
+
optional :int64, :maxitems, 4, :default => 100
|
524
|
+
optional :int64, :volume_filter, 5, :default => 0
|
525
|
+
optional :int64, :duration_filter, 6, :default => 0
|
509
526
|
required ::TRP::TimeInterval, :time_interval, 7
|
510
527
|
|
511
528
|
gen_methods! # new fields ignored after this point
|
@@ -520,8 +537,8 @@ module TRP
|
|
520
537
|
end
|
521
538
|
|
522
539
|
class SessionTrackerRequest < ::ProtocolBuffers::Message
|
523
|
-
optional :int64, :context, 1
|
524
|
-
|
540
|
+
optional :int64, :context, 1, :default => 0
|
541
|
+
optional :string, :session_group, 2, :default => "{99A78737-4B41-4387-8F31-8077DB917336}"
|
525
542
|
required :int64, :tracker_id, 3, :default => 1
|
526
543
|
optional :int64, :maxitems, 4, :default => 100
|
527
544
|
required ::TRP::TimeInterval, :time_interval, 5
|
@@ -538,8 +555,8 @@ module TRP
|
|
538
555
|
end
|
539
556
|
|
540
557
|
class SessionGroupRequest < ::ProtocolBuffers::Message
|
541
|
-
optional :int64, :context, 1
|
542
|
-
|
558
|
+
optional :int64, :context, 1, :default => 0
|
559
|
+
optional :string, :session_group, 2, :default => "{99A78737-4B41-4387-8F31-8077DB917336}"
|
543
560
|
optional :int64, :tracker_id, 3
|
544
561
|
optional :string, :key_filter, 4
|
545
562
|
optional :int64, :maxitems, 5, :default => 100
|
@@ -579,34 +596,44 @@ module TRP
|
|
579
596
|
end
|
580
597
|
|
581
598
|
class AlertItemRequest < ::ProtocolBuffers::Message
|
582
|
-
optional :int64, :context, 1
|
599
|
+
optional :int64, :context, 1, :default => 0
|
583
600
|
required :string, :alert_group, 2
|
584
|
-
|
601
|
+
repeated ::TRP::AlertID, :alert_ids, 3
|
585
602
|
|
586
603
|
gen_methods! # new fields ignored after this point
|
587
604
|
end
|
588
605
|
|
589
606
|
class AlertItemResponse < ::ProtocolBuffers::Message
|
607
|
+
# forward declarations
|
608
|
+
class Item < ::ProtocolBuffers::Message; end
|
609
|
+
|
610
|
+
# nested messages
|
611
|
+
class Item < ::ProtocolBuffers::Message
|
612
|
+
optional :int64, :sensor_id, 1
|
613
|
+
required ::TRP::Timestamp, :time, 2
|
614
|
+
optional :string, :source_ip, 3
|
615
|
+
optional :string, :source_port, 4
|
616
|
+
optional :string, :destination_ip, 5
|
617
|
+
optional :string, :destination_port, 6
|
618
|
+
required :string, :sigid, 7
|
619
|
+
required :string, :classification, 8
|
620
|
+
required :string, :priority, 9
|
621
|
+
required ::TRP::Timestamp, :dispatch_time, 10
|
622
|
+
required :string, :aux_message1, 11
|
623
|
+
required :string, :aux_message2, 12
|
624
|
+
|
625
|
+
gen_methods! # new fields ignored after this point
|
626
|
+
end
|
627
|
+
|
590
628
|
optional :int64, :context, 1
|
591
629
|
required :string, :alert_group, 2
|
592
|
-
|
593
|
-
required ::TRP::Timestamp, :time, 4
|
594
|
-
optional :string, :source_ip, 5
|
595
|
-
optional :string, :source_port, 6
|
596
|
-
optional :string, :destination_ip, 7
|
597
|
-
optional :string, :destination_port, 8
|
598
|
-
required :string, :sigid, 9
|
599
|
-
required :string, :classification, 10
|
600
|
-
required :string, :priority, 11
|
601
|
-
required ::TRP::Timestamp, :dispatch_time, 12
|
602
|
-
required :string, :aux_message1, 13
|
603
|
-
required :string, :aux_message2, 14
|
630
|
+
repeated ::TRP::AlertItemResponse::Item, :items, 3
|
604
631
|
|
605
632
|
gen_methods! # new fields ignored after this point
|
606
633
|
end
|
607
634
|
|
608
635
|
class AlertGroupRequest < ::ProtocolBuffers::Message
|
609
|
-
optional :int64, :context, 1
|
636
|
+
optional :int64, :context, 1, :default => 0
|
610
637
|
required :string, :alert_group, 2
|
611
638
|
required ::TRP::TimeInterval, :time_interval, 3
|
612
639
|
optional :int64, :maxitems, 5, :default => 10
|
@@ -632,7 +659,7 @@ module TRP
|
|
632
659
|
end
|
633
660
|
|
634
661
|
class ResourceItemRequest < ::ProtocolBuffers::Message
|
635
|
-
optional :int64, :context, 1
|
662
|
+
optional :int64, :context, 1, :default => 0
|
636
663
|
required :string, :resource_group, 2
|
637
664
|
repeated ::TRP::ResourceID, :resource_ids, 3
|
638
665
|
|
@@ -665,7 +692,7 @@ module TRP
|
|
665
692
|
end
|
666
693
|
|
667
694
|
class ResourceGroupRequest < ::ProtocolBuffers::Message
|
668
|
-
optional :int64, :context, 1
|
695
|
+
optional :int64, :context, 1, :default => 0
|
669
696
|
required :string, :resource_group, 2
|
670
697
|
required ::TRP::TimeInterval, :time_interval, 3
|
671
698
|
optional :int64, :maxitems, 4, :default => 10
|
@@ -687,4 +714,20 @@ module TRP
|
|
687
714
|
gen_methods! # new fields ignored after this point
|
688
715
|
end
|
689
716
|
|
717
|
+
class KeyLookupRequest < ::ProtocolBuffers::Message
|
718
|
+
optional :int64, :context, 1, :default => 0
|
719
|
+
required :string, :counter_group, 2
|
720
|
+
repeated :string, :keys, 3
|
721
|
+
|
722
|
+
gen_methods! # new fields ignored after this point
|
723
|
+
end
|
724
|
+
|
725
|
+
class KeyLookupResponse < ::ProtocolBuffers::Message
|
726
|
+
optional :int64, :context, 1
|
727
|
+
required :string, :counter_group, 2
|
728
|
+
repeated ::TRP::KeyDetails, :key_details, 3
|
729
|
+
|
730
|
+
gen_methods! # new fields ignored after this point
|
731
|
+
end
|
732
|
+
|
690
733
|
end
|