1 package evel_javalibrary.att.com;
\r
2 /**************************************************************************//**
\r
4 * Evel Mobile Flow class
\r
6 * This file implements the Evel Mobile Flow Event class which is intended to provide a
\r
7 * simple wrapper around the complexity of AT&T's Vendor Event Listener API so
\r
8 * that VNFs can use it to send Mobile flow events.
\r
12 * Unless otherwise specified, all software contained herein is
\r
13 * Licensed under the Apache License, Version 2.0 (the "License");
\r
14 * you may not use this file except in compliance with the License.
\r
15 * You may obtain a copy of the License at
\r
16 * http://www.apache.org/licenses/LICENSE-2.0
\r
18 * Unless required by applicable law or agreed to in writing, software
\r
19 * distributed under the License is distributed on an "AS IS" BASIS,
\r
20 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
21 * See the License for the specific language governing permissions and
\r
22 * limitations under the License.
\r
23 *****************************************************************************/
\r
25 import java.text.MessageFormat;
\r
26 import java.util.ArrayList;
\r
27 import java.util.Date;
\r
28 import java.util.HashMap;
\r
30 import javax.json.Json;
\r
31 import javax.json.JsonArrayBuilder;
\r
32 import javax.json.JsonObject;
\r
33 import javax.json.JsonObjectBuilder;
\r
35 import org.apache.log4j.Logger;
\r
39 public class EvelMobileFlow extends EvelHeader {
\r
41 int major_version = 1;
\r
42 int minor_version = 2;
\r
44 static int EVEL_TOS_SUPPORTED = 256;
\r
45 /**************************************************************************//**
\r
47 * JSON equivalent fields: tcpFlagCountList, tcpFlagList
\r
48 *****************************************************************************/
\r
49 public enum EVEL_TCP_FLAGS {
\r
61 static int EVEL_MAX_TCP_FLAGS = 10;
\r
62 /**************************************************************************//**
\r
63 * Mobile QCI Classes of Service.
\r
64 * JSON equivalent fields: mobileQciCosCountList, mobileQciCosList
\r
65 *****************************************************************************/
\r
66 public enum EVEL_QCI_COS_TYPES {
\r
68 /***************************************************************************/
\r
69 /* UMTS Classes of Service. */
\r
70 /***************************************************************************/
\r
71 EVEL_QCI_COS_UMTS_CONVERSATIONAL,
\r
72 EVEL_QCI_COS_UMTS_STREAMING,
\r
73 EVEL_QCI_COS_UMTS_INTERACTIVE,
\r
74 EVEL_QCI_COS_UMTS_BACKGROUND,
\r
76 /***************************************************************************/
\r
77 /* LTE Classes of Service. */
\r
78 /***************************************************************************/
\r
83 EVEL_QCI_COS_LTE_65,
\r
84 EVEL_QCI_COS_LTE_66,
\r
90 EVEL_QCI_COS_LTE_69,
\r
91 EVEL_QCI_COS_LTE_70,
\r
92 EVEL_MAX_QCI_COS_TYPES
\r
94 static int EVEL_MAX_QCI_COS_TYPES = 18;
\r
96 private static final Logger LOGGER = Logger.getLogger( EvelMobileFlow.class.getName() );
\r
99 /*****************************************************************************/
\r
100 /* Array of strings to use when encoding TCP flags. */
\r
101 /*****************************************************************************/
\r
102 static final String[/*EVEL_MAX_TCP_FLAGS*/] evel_tcp_flag_strings = {
\r
114 /*****************************************************************************/
\r
115 /* Array of strings to use when encoding QCI COS. */
\r
116 /*****************************************************************************/
\r
117 static final String[/*EVEL_MAX_QCI_COS_TYPES*/] evel_qci_cos_strings = {
\r
138 /**************************************************************************//**
\r
139 * Vendor VNF Name fields.
\r
140 * JSON equivalent field: vendorVnfNameFields
\r
141 *****************************************************************************/
\r
142 /**************************************************************************//**
\r
143 * Mobile GTP Per Flow Metrics.
\r
144 * JSON equivalent field: gtpPerFlowMetrics
\r
145 *****************************************************************************/
\r
146 public class MOBILE_GTP_PER_FLOW_METRICS {
\r
147 double avg_bit_error_rate;
\r
148 double avg_packet_delay_variation;
\r
149 int avg_packet_latency;
\r
150 int avg_receive_throughput;
\r
151 int avg_transmit_throughput;
\r
153 int flow_activation_epoch;
\r
154 int flow_activation_microsec;
\r
156 int flow_deactivation_epoch;
\r
157 int flow_deactivation_microsec;
\r
158 Date flow_deactivation_time;
\r
159 String flow_status;
\r
160 int max_packet_delay_variation;
\r
161 int num_activation_failures;
\r
162 int num_bit_errors;
\r
163 int num_bytes_received;
\r
164 int num_bytes_transmitted;
\r
165 int num_dropped_packets;
\r
166 int num_l7_bytes_received;
\r
167 int num_l7_bytes_transmitted;
\r
168 int num_lost_packets;
\r
169 int num_out_of_order_packets;
\r
170 int num_packet_errors;
\r
171 int num_packets_received_excl_retrans;
\r
172 int num_packets_received_incl_retrans;
\r
173 int num_packets_transmitted_incl_retrans;
\r
176 int num_tunneled_l7_bytes_received;
\r
177 int round_trip_time;
\r
178 int time_to_first_byte;
\r
180 /***************************************************************************/
\r
181 /* Optional fields */
\r
182 /***************************************************************************/
\r
183 EvelOptionInt ip_tos_counts[/*EVEL_TOS_SUPPORTED*/];
\r
184 EvelOptionInt tcp_flag_counts[/*EVEL_MAX_TCP_FLAGS*/];
\r
185 EvelOptionInt qci_cos_counts[/*EVEL_MAX_QCI_COS_TYPES*/];
\r
187 EvelOptionInt dur_connection_failed_status;
\r
188 EvelOptionInt dur_tunnel_failed_status;
\r
189 EvelOptionString flow_activated_by;
\r
191 EvelOptionTime flow_activation_time;
\r
192 EvelOptionString flow_deactivated_by;
\r
194 EvelOptionString gtp_connection_status;
\r
195 EvelOptionString gtp_tunnel_status;
\r
196 EvelOptionInt large_packet_rtt;
\r
197 EvelOptionDouble large_packet_threshold;
\r
198 EvelOptionInt max_receive_bit_rate;
\r
199 EvelOptionInt max_transmit_bit_rate;
\r
200 EvelOptionInt num_gtp_echo_failures;
\r
201 EvelOptionInt num_gtp_tunnel_errors;
\r
202 EvelOptionInt num_http_errors;
\r
204 /**************************************************************************//**
\r
205 * Create a new Mobile GTP Per Flow Metrics.
\r
207 * @note The mandatory fields on the Mobile GTP Per Flow Metrics must be
\r
208 * supplied to this factory function and are immutable once set.
\r
209 * Optional fields have explicit setter functions, but again values
\r
210 * may only be set once so that the Mobile GTP Per Flow Metrics has
\r
211 * immutable properties.
\r
213 * @param avg_bit_error_rate Average bit error rate.
\r
214 * @param avg_packet_delay_variation Average delay or jitter in ms.
\r
215 * @param avg_packet_latency Average delivery latency.
\r
216 * @param avg_receive_throughput Average receive throughput.
\r
217 * @param avg_transmit_throughput Average transmit throughput.
\r
218 * @param flow_activation_epoch Time the connection is activated.
\r
219 * @param flow_activation_microsec Microseconds for the start of the flow
\r
221 * @param flow_deactivation_epoch Time for the end of the connection.
\r
222 * @param flow_deactivation_microsec Microseconds for the end of the flow
\r
224 * @param flow_deactivation_time Transmission time of the first packet.
\r
225 * @param flow_status Connection status.
\r
226 * @param max_packet_delay_variation Maximum packet delay or jitter in ms.
\r
227 * @param num_activation_failures Number of failed activation requests.
\r
228 * @param num_bit_errors Number of errored bits.
\r
229 * @param num_bytes_received Number of bytes received.
\r
230 * @param num_bytes_transmitted Number of bytes transmitted.
\r
231 * @param num_dropped_packets Number of received packets dropped.
\r
232 * @param num_l7_bytes_received Number of tunneled Layer 7 bytes
\r
234 * @param num_l7_bytes_transmitted Number of tunneled Layer 7 bytes
\r
236 * @param num_lost_packets Number of lost packets.
\r
237 * @param num_out_of_order_packets Number of out-of-order packets.
\r
238 * @param num_packet_errors Number of errored packets.
\r
239 * @param num_packets_received_excl_retrans Number of packets received,
\r
240 * excluding retransmits.
\r
241 * @param num_packets_received_incl_retrans Number of packets received.
\r
242 * @param num_packets_transmitted_incl_retrans Number of packets
\r
244 * @param num_retries Number of packet retries.
\r
245 * @param num_timeouts Number of packet timeouts.
\r
246 * @param num_tunneled_l7_bytes_received Number of tunneled Layer 7 bytes
\r
247 * received, excluding retransmits.
\r
248 * @param round_trip_time Round trip time.
\r
249 * @param time_to_first_byte Time in ms between connection
\r
250 * activation and first byte received.
\r
252 * @returns pointer to the newly manufactured ::MOBILE_GTP_PER_FLOW_METRICS.
\r
253 * If the structure is not used it must be released using
\r
254 * ::evel_free_mobile_gtp_flow_metrics.
\r
255 * @retval null Failed to create the event.
\r
256 *****************************************************************************/
\r
257 public MOBILE_GTP_PER_FLOW_METRICS(
\r
258 double tavg_bit_error_rate,
\r
259 double tavg_packet_delay_variation,
\r
260 int tavg_packet_latency,
\r
261 int tavg_receive_throughput,
\r
262 int tavg_transmit_throughput,
\r
263 int tflow_activation_epoch,
\r
264 int tflow_activation_microsec,
\r
265 int tflow_deactivation_epoch,
\r
266 int tflow_deactivation_microsec,
\r
267 Date tflow_deactivation_time,
\r
268 String tflow_status,
\r
269 int tmax_packet_delay_variation,
\r
270 int tnum_activation_failures,
\r
271 int tnum_bit_errors,
\r
272 int tnum_bytes_received,
\r
273 int tnum_bytes_transmitted,
\r
274 int tnum_dropped_packets,
\r
275 int tnum_l7_bytes_received,
\r
276 int tnum_l7_bytes_transmitted,
\r
277 int tnum_lost_packets,
\r
278 int tnum_out_of_order_packets,
\r
279 int tnum_packet_errors,
\r
280 int tnum_packets_received_excl_retrans,
\r
281 int tnum_packets_received_incl_retrans,
\r
282 int tnum_packets_transmitted_incl_retrans,
\r
285 int tnum_tunneled_l7_bytes_received,
\r
286 int tround_trip_time,
\r
287 int ttime_to_first_byte)
\r
293 /***************************************************************************/
\r
294 /* Check preconditions. */
\r
295 /***************************************************************************/
\r
296 assert(tavg_bit_error_rate >= 0.0);
\r
297 assert(tavg_packet_delay_variation >= 0.0);
\r
298 assert(tavg_packet_latency >= 0);
\r
299 assert(tavg_receive_throughput >= 0);
\r
300 assert(tavg_transmit_throughput >= 0);
\r
301 assert(tflow_activation_epoch > 0);
\r
302 assert(tflow_activation_microsec >= 0);
\r
303 assert(tflow_deactivation_epoch > 0);
\r
304 assert(tflow_deactivation_microsec >= 0);
\r
305 assert(tflow_status != null);
\r
306 assert(tmax_packet_delay_variation >= 0);
\r
307 assert(tnum_activation_failures >= 0);
\r
308 assert(tnum_bit_errors >= 0);
\r
309 assert(tnum_bytes_received >= 0);
\r
310 assert(tnum_bytes_transmitted >= 0);
\r
311 assert(tnum_dropped_packets >= 0);
\r
312 assert(tnum_l7_bytes_received >= 0);
\r
313 assert(tnum_l7_bytes_transmitted >= 0);
\r
314 assert(tnum_lost_packets >= 0);
\r
315 assert(tnum_out_of_order_packets >= 0);
\r
316 assert(tnum_packet_errors >= 0);
\r
317 assert(tnum_packets_received_excl_retrans >= 0);
\r
318 assert(tnum_packets_received_incl_retrans >= 0);
\r
319 assert(tnum_packets_transmitted_incl_retrans >= 0);
\r
320 assert(tnum_retries >= 0);
\r
321 assert(tnum_timeouts >= 0);
\r
322 assert(tnum_tunneled_l7_bytes_received >= 0);
\r
323 assert(tround_trip_time >= 0);
\r
324 assert(ttime_to_first_byte >= 0);
\r
326 /***************************************************************************/
\r
327 /* Allocate the Mobile Flow GTP Per Flow Metrics. */
\r
328 /***************************************************************************/
\r
329 LOGGER.debug("New Mobile Flow GTP Per Flow Metrics");
\r
331 /***************************************************************************/
\r
332 /* Initialize the Mobile Flow GTP Per Flow Metrics fields. Optional */
\r
333 /* string values are uninitialized (null). */
\r
334 /***************************************************************************/
\r
335 avg_bit_error_rate = tavg_bit_error_rate;
\r
336 avg_packet_delay_variation = tavg_packet_delay_variation;
\r
337 avg_packet_latency = tavg_packet_latency;
\r
338 avg_receive_throughput = tavg_receive_throughput;
\r
339 avg_transmit_throughput = tavg_transmit_throughput;
\r
340 flow_activation_epoch = tflow_activation_epoch;
\r
341 flow_activation_microsec = tflow_activation_microsec;
\r
342 flow_deactivation_epoch = tflow_deactivation_epoch;
\r
343 flow_deactivation_microsec = tflow_deactivation_microsec;
\r
344 flow_deactivation_time = tflow_deactivation_time;
\r
345 flow_status = tflow_status;
\r
346 max_packet_delay_variation = tmax_packet_delay_variation;
\r
347 num_activation_failures = tnum_activation_failures;
\r
348 num_bit_errors = tnum_bit_errors;
\r
349 num_bytes_received = tnum_bytes_received;
\r
350 num_bytes_transmitted = tnum_bytes_transmitted;
\r
351 num_dropped_packets = tnum_dropped_packets;
\r
352 num_l7_bytes_received = tnum_l7_bytes_received;
\r
353 num_l7_bytes_transmitted = tnum_l7_bytes_transmitted;
\r
354 num_lost_packets = tnum_lost_packets;
\r
355 num_out_of_order_packets = tnum_out_of_order_packets;
\r
356 num_packet_errors = tnum_packet_errors;
\r
357 num_packets_received_excl_retrans =
\r
358 tnum_packets_received_excl_retrans;
\r
359 num_packets_received_incl_retrans =
\r
360 tnum_packets_received_incl_retrans;
\r
361 num_packets_transmitted_incl_retrans =
\r
362 tnum_packets_transmitted_incl_retrans;
\r
363 num_retries = tnum_retries;
\r
364 num_timeouts = tnum_timeouts;
\r
365 num_tunneled_l7_bytes_received = tnum_tunneled_l7_bytes_received;
\r
366 round_trip_time = tround_trip_time;
\r
367 time_to_first_byte = ttime_to_first_byte;
\r
368 ip_tos_counts = new EvelOptionInt[EVEL_TOS_SUPPORTED];
\r
369 for (ii = 0; ii < EVEL_TOS_SUPPORTED; ii++)
\r
371 ip_tos_counts[ii] = new EvelOptionInt();
\r
373 tcp_flag_counts = new EvelOptionInt[EVEL_MAX_TCP_FLAGS];
\r
374 for (ii = 0; ii < EVEL_MAX_TCP_FLAGS; ii++)
\r
376 tcp_flag_counts[ii] = new EvelOptionInt();
\r
378 qci_cos_counts = new EvelOptionInt[EVEL_MAX_QCI_COS_TYPES];
\r
379 for (ii = 0; ii < EVEL_MAX_QCI_COS_TYPES; ii++)
\r
381 qci_cos_counts[ii] = new EvelOptionInt();
\r
383 dur_connection_failed_status = new EvelOptionInt();
\r
384 dur_tunnel_failed_status = new EvelOptionInt();
\r
385 flow_activated_by = new EvelOptionString();
\r
386 flow_activation_time = new EvelOptionTime();
\r
387 flow_deactivated_by = new EvelOptionString();
\r
388 gtp_connection_status = new EvelOptionString();
\r
389 gtp_tunnel_status = new EvelOptionString();
\r
390 large_packet_rtt = new EvelOptionInt();
\r
391 large_packet_threshold = new EvelOptionDouble();
\r
392 max_receive_bit_rate = new EvelOptionInt();
\r
393 max_transmit_bit_rate = new EvelOptionInt();
\r
394 num_gtp_echo_failures = new EvelOptionInt();
\r
395 num_gtp_tunnel_errors = new EvelOptionInt();
\r
396 num_http_errors = new EvelOptionInt();
\r
402 /***************************************************************************/
\r
403 /* Mandatory fields */
\r
404 /***************************************************************************/
\r
405 String flow_direction;
\r
406 public MOBILE_GTP_PER_FLOW_METRICS gtp_per_flow_metrics;
\r
407 String ip_protocol_type;
\r
409 String other_endpoint_ip_address;
\r
410 int other_endpoint_port;
\r
411 String reporting_endpoint_ip_addr;
\r
412 int reporting_endpoint_port;
\r
414 /***************************************************************************/
\r
415 /* Optional fields */
\r
416 /***************************************************************************/
\r
417 ArrayList<String[]> additional_info;
\r
418 EvelOptionString application_type;
\r
419 EvelOptionString app_protocol_type;
\r
420 EvelOptionString app_protocol_version;
\r
421 EvelOptionString cid;
\r
422 EvelOptionString connection_type;
\r
423 EvelOptionString ecgi;
\r
424 EvelOptionString gtp_protocol_type;
\r
425 EvelOptionString gtp_version;
\r
426 EvelOptionString http_header;
\r
427 EvelOptionString imei;
\r
428 EvelOptionString imsi;
\r
429 EvelOptionString lac;
\r
430 EvelOptionString mcc;
\r
431 EvelOptionString mnc;
\r
432 EvelOptionString msisdn;
\r
433 EvelOptionString other_functional_role;
\r
434 EvelOptionString rac;
\r
435 EvelOptionString radio_access_technology;
\r
436 EvelOptionString sac;
\r
437 EvelOptionInt sampling_algorithm;
\r
438 EvelOptionString tac;
\r
439 EvelOptionString tunnel_id;
\r
440 EvelOptionString vlan_id;
\r
442 /***************************************************************************/
\r
443 /* Optional fields */
\r
444 /***************************************************************************/
\r
447 /*****************************************************************************/
\r
448 /* Local prototypes */
\r
449 /*****************************************************************************/
\r
452 /**************************************************************************//**
\r
453 * Create a new Mobile Flow event.
\r
455 * @note The mandatory fields on the Mobile Flow must be supplied to this
\r
456 * factory function and are immutable once set. Optional fields have
\r
457 * explicit setter functions, but again values may only be set once so
\r
458 * that the Mobile Flow has immutable properties.
\r
459 * @param flow_direction Flow direction.
\r
460 * @param gtp_per_flow_metrics GTP per-flow metrics.
\r
461 * @param ip_protocol_type IP protocol type.
\r
462 * @param ip_version IP protocol version.
\r
463 * @param other_endpoint_ip_address IP address of the other endpoint.
\r
464 * @param other_endpoint_port IP port of the other endpoint.
\r
465 * @param reporting_endpoint_ip_addr IP address of the reporting endpoint.
\r
467 * @param reporting_endpoint_port IP port of the reporting endpoint.
\r
468 *****************************************************************************/
\r
469 public EvelMobileFlow( String evname, String evid,
\r
471 MOBILE_GTP_PER_FLOW_METRICS gtp_per_flow_metr,
\r
472 String ip_protocol_typ,
\r
474 String other_endpoint_ip_addr,
\r
475 int other_endpoint_pt,
\r
476 String reporting_endpoint_ipaddr,
\r
477 int reporting_endpoint_pt)
\r
479 super(evname,evid);
\r
483 /***************************************************************************/
\r
484 /* Check preconditions. */
\r
485 /***************************************************************************/
\r
486 assert(flow_dir != null);
\r
487 assert(gtp_per_flow_metr != null);
\r
488 assert(ip_protocol_typ != null);
\r
489 assert(ip_vers != null);
\r
490 assert(other_endpoint_ip_addr != null);
\r
491 assert(other_endpoint_pt > 0);
\r
492 assert(reporting_endpoint_ipaddr != null);
\r
493 assert(reporting_endpoint_pt > 0);
\r
495 /***************************************************************************/
\r
496 /* Allocate the Mobile Flow. */
\r
497 /***************************************************************************/
\r
498 LOGGER.debug("New Mobile Flow created");
\r
500 /***************************************************************************/
\r
501 /* Initialize the header & the Mobile Flow fields. Optional string values */
\r
502 /* are uninitialized (null). */
\r
503 /***************************************************************************/
\r
504 event_domain = EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW;
\r
505 flow_direction = flow_dir;
\r
506 gtp_per_flow_metrics = gtp_per_flow_metr;
\r
507 ip_protocol_type = ip_protocol_typ;
\r
508 ip_version = ip_vers;
\r
509 other_endpoint_ip_address = other_endpoint_ip_addr;
\r
510 other_endpoint_port = other_endpoint_pt;
\r
511 reporting_endpoint_ip_addr = reporting_endpoint_ipaddr;
\r
512 reporting_endpoint_port = reporting_endpoint_pt;
\r
514 application_type = new EvelOptionString();
\r
515 app_protocol_type = new EvelOptionString();
\r
516 app_protocol_version = new EvelOptionString();
\r
517 cid = new EvelOptionString();
\r
518 connection_type = new EvelOptionString();
\r
519 ecgi = new EvelOptionString();
\r
520 gtp_protocol_type = new EvelOptionString();
\r
521 gtp_version = new EvelOptionString();
\r
522 http_header = new EvelOptionString();
\r
523 imei = new EvelOptionString();
\r
524 imsi = new EvelOptionString();
\r
525 lac = new EvelOptionString();
\r
526 mcc = new EvelOptionString();
\r
527 mnc = new EvelOptionString();
\r
528 msisdn = new EvelOptionString();
\r
529 other_functional_role = new EvelOptionString();
\r
530 rac = new EvelOptionString();
\r
531 radio_access_technology = new EvelOptionString();
\r
532 sac = new EvelOptionString();
\r
533 sampling_algorithm = new EvelOptionInt();
\r
534 tac = new EvelOptionString();
\r
535 tunnel_id = new EvelOptionString();
\r
536 vlan_id = new EvelOptionString();
\r
537 additional_info = null;
\r
545 /**************************************************************************//**
\r
546 * Add an additional value name/value pair to the Mobile flow.
\r
548 * The name and value are null delimited ASCII strings. The library takes
\r
549 * a copy so the caller does not have to preserve values after the function
\r
552 * @param name ASCIIZ string with the attribute's name. The caller
\r
553 * does not need to preserve the value once the function
\r
555 * @param value ASCIIZ string with the attribute's value. The caller
\r
556 * does not need to preserve the value once the function
\r
558 *****************************************************************************/
\r
559 public void evel_mobile_flow_addl_field_add(String name, String value)
\r
561 String[] addl_info = null;
\r
564 /***************************************************************************/
\r
565 /* Check preconditions. */
\r
566 /***************************************************************************/
\r
567 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
568 assert(name != null);
\r
569 assert(value != null);
\r
571 if( additional_info == null )
\r
573 additional_info = new ArrayList<String[]>();
\r
576 LOGGER.debug(MessageFormat.format("Adding name={0} value={1}", name, value));
\r
577 addl_info = new String[2];
\r
578 assert(addl_info != null);
\r
579 addl_info[0] = name;
\r
580 addl_info[1] = value;
\r
582 additional_info.add(addl_info);
\r
588 /**************************************************************************//**
\r
589 * Set the Event Type property of the Mobile Flow.
\r
591 * @note The property is treated as immutable: it is only valid to call
\r
592 * the setter once. However, we don't assert if the caller tries to
\r
593 * overwrite, just ignoring the update instead.
\r
595 * @param type The Event Type to be set. ASCIIZ string. The caller
\r
596 * does not need to preserve the value once the function
\r
598 *****************************************************************************/
\r
599 public void evel_mobile_flow_type_set(String typ)
\r
602 assert(typ != null);
\r
604 /***************************************************************************/
\r
605 /* Check preconditions and call evel_header_type_set. */
\r
606 /***************************************************************************/
\r
607 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
608 evel_header_type_set(typ);
\r
613 /**************************************************************************//**
\r
614 * Set the Application Type property of the Mobile Flow.
\r
616 * @note The property is treated as immutable: it is only valid to call
\r
617 * the setter once. However, we don't assert if the caller tries to
\r
618 * overwrite, just ignoring the update instead.
\r
620 * @param type The Application Type to be set. ASCIIZ string. The caller
\r
621 * does not need to preserve the value once the function
\r
623 *****************************************************************************/
\r
624 public void evel_mobile_flow_app_type_set(String type)
\r
628 /***************************************************************************/
\r
629 /* Check preconditions. */
\r
630 /***************************************************************************/
\r
631 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
632 assert(type != null);
\r
634 application_type.SetValuePr(
\r
636 "Application Type");
\r
640 /**************************************************************************//**
\r
641 * Set the Application Protocol Type property of the Mobile Flow.
\r
643 * @note The property is treated as immutable: it is only valid to call
\r
644 * the setter once. However, we don't assert if the caller tries to
\r
645 * overwrite, just ignoring the update instead.
\r
647 * @param type The Application Protocol Type to be set. ASCIIZ string.
\r
648 * The caller does not need to preserve the value once the
\r
649 * function returns.
\r
650 *****************************************************************************/
\r
651 public void evel_mobile_flow_app_prot_type_set(String type)
\r
655 /***************************************************************************/
\r
656 /* Check preconditions. */
\r
657 /***************************************************************************/
\r
658 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
659 assert(type != null);
\r
661 app_protocol_type.SetValuePr(
\r
663 "Application Protocol Type");
\r
667 /**************************************************************************//**
\r
668 * Set the Application Protocol Version property of the Mobile Flow.
\r
670 * @note The property is treated as immutable: it is only valid to call
\r
671 * the setter once. However, we don't assert if the caller tries to
\r
672 * overwrite, just ignoring the update instead.
\r
674 * @param version The Application Protocol Version to be set. ASCIIZ
\r
675 * string. The caller does not need to preserve the value
\r
676 * once the function returns.
\r
677 *****************************************************************************/
\r
678 void evel_mobile_flow_app_prot_ver_set(String version)
\r
682 /***************************************************************************/
\r
683 /* Check preconditions. */
\r
684 /***************************************************************************/
\r
685 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
686 assert(version != null);
\r
688 app_protocol_version.SetValuePr(
\r
690 "Application Protocol Version");
\r
694 /**************************************************************************//**
\r
695 * Set the CID property of the Mobile Flow.
\r
697 * @note The property is treated as immutable: it is only valid to call
\r
698 * the setter once. However, we don't assert if the caller tries to
\r
699 * overwrite, just ignoring the update instead.
\r
701 * @param cid The CID to be set. ASCIIZ string. The caller does not
\r
702 * need to preserve the value once the function returns.
\r
703 *****************************************************************************/
\r
704 public void evel_mobile_flow_cid_set(String cd)
\r
708 /***************************************************************************/
\r
709 /* Check preconditions. */
\r
710 /***************************************************************************/
\r
711 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
712 assert(cid != null);
\r
720 /**************************************************************************//**
\r
721 * Set the Connection Type property of the Mobile Flow.
\r
723 * @note The property is treated as immutable: it is only valid to call
\r
724 * the setter once. However, we don't assert if the caller tries to
\r
725 * overwrite, just ignoring the update instead.
\r
727 * @param type The Connection Type to be set. ASCIIZ string. The caller
\r
728 * does not need to preserve the value once the function
\r
730 *****************************************************************************/
\r
731 public void evel_mobile_flow_con_type_set(String type)
\r
735 /***************************************************************************/
\r
736 /* Check preconditions. */
\r
737 /***************************************************************************/
\r
738 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
739 assert(type != null);
\r
741 connection_type.SetValuePr(
\r
743 "Connection Type");
\r
747 /**************************************************************************//**
\r
748 * Set the ECGI property of the Mobile Flow.
\r
750 * @note The property is treated as immutable: it is only valid to call
\r
751 * the setter once. However, we don't assert if the caller tries to
\r
752 * overwrite, just ignoring the update instead.
\r
754 * @param ecgi The ECGI to be set. ASCIIZ string. The caller does not
\r
755 * need to preserve the value once the function returns.
\r
756 *****************************************************************************/
\r
757 public void evel_mobile_flow_ecgi_set(String ecgit)
\r
761 /***************************************************************************/
\r
762 /* Check preconditions. */
\r
763 /***************************************************************************/
\r
764 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
765 assert(ecgit != null);
\r
773 /**************************************************************************//**
\r
774 * Set the GTP Protocol Type property of the Mobile Flow.
\r
776 * @note The property is treated as immutable: it is only valid to call
\r
777 * the setter once. However, we don't assert if the caller tries to
\r
778 * overwrite, just ignoring the update instead.
\r
781 * @param type The GTP Protocol Type to be set. ASCIIZ string. The
\r
782 * caller does not need to preserve the value once the
\r
783 * function returns.
\r
784 *****************************************************************************/
\r
785 public void evel_mobile_flow_gtp_prot_type_set(String type)
\r
789 /***************************************************************************/
\r
790 /* Check preconditions. */
\r
791 /***************************************************************************/
\r
792 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
793 assert(type != null);
\r
795 gtp_protocol_type.SetValuePr(
\r
797 "GTP Protocol Type");
\r
801 /**************************************************************************//**
\r
802 * Set the GTP Protocol Version property of the Mobile Flow.
\r
804 * @note The property is treated as immutable: it is only valid to call
\r
805 * the setter once. However, we don't assert if the caller tries to
\r
806 * overwrite, just ignoring the update instead.
\r
809 * @param version The GTP Protocol Version to be set. ASCIIZ string. The
\r
810 * caller does not need to preserve the value once the
\r
811 * function returns.
\r
812 *****************************************************************************/
\r
813 public void evel_mobile_flow_gtp_prot_ver_set(String version)
\r
817 /***************************************************************************/
\r
818 /* Check preconditions. */
\r
819 /***************************************************************************/
\r
820 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
821 assert(version != null);
\r
823 gtp_version.SetValuePr(
\r
825 "GTP Protocol Version");
\r
829 /**************************************************************************//**
\r
830 * Set the HTTP Header property of the Mobile Flow.
\r
832 * @note The property is treated as immutable: it is only valid to call
\r
833 * the setter once. However, we don't assert if the caller tries to
\r
834 * overwrite, just ignoring the update instead.
\r
837 * @param header The HTTP header to be set. ASCIIZ string. The caller does
\r
838 * not need to preserve the value once the function returns.
\r
839 *****************************************************************************/
\r
840 public void evel_mobile_flow_http_header_set(String header)
\r
844 /***************************************************************************/
\r
845 /* Check preconditions. */
\r
846 /***************************************************************************/
\r
847 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
849 assert(header != null);
\r
851 http_header.SetValuePr(
\r
857 /**************************************************************************//**
\r
858 * Set the IMEI property of the Mobile Flow.
\r
860 * @note The property is treated as immutable: it is only valid to call
\r
861 * the setter once. However, we don't assert if the caller tries to
\r
862 * overwrite, just ignoring the update instead.
\r
865 * @param imei The IMEI to be set. ASCIIZ string. The caller does not
\r
866 * need to preserve the value once the function returns.
\r
867 *****************************************************************************/
\r
868 public void evel_mobile_flow_imei_set(String imeit)
\r
872 /***************************************************************************/
\r
873 /* Check preconditions. */
\r
874 /***************************************************************************/
\r
875 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
876 assert(imeit != null);
\r
884 /**************************************************************************//**
\r
885 * Set the IMSI property of the Mobile Flow.
\r
887 * @note The property is treated as immutable: it is only valid to call
\r
888 * the setter once. However, we don't assert if the caller tries to
\r
889 * overwrite, just ignoring the update instead.
\r
892 * @param imsi The IMSI to be set. ASCIIZ string. The caller does not
\r
893 * need to preserve the value once the function returns.
\r
894 *****************************************************************************/
\r
895 public void evel_mobile_flow_imsi_set(String imsit)
\r
899 /***************************************************************************/
\r
900 /* Check preconditions. */
\r
901 /***************************************************************************/
\r
902 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
903 assert(imsit != null);
\r
911 /**************************************************************************//**
\r
912 * Set the LAC property of the Mobile Flow.
\r
914 * @note The property is treated as immutable: it is only valid to call
\r
915 * the setter once. However, we don't assert if the caller tries to
\r
916 * overwrite, just ignoring the update instead.
\r
919 * @param lac The LAC to be set. ASCIIZ string. The caller does not
\r
920 * need to preserve the value once the function returns.
\r
921 *****************************************************************************/
\r
922 public void evel_mobile_flow_lac_set(String lact)
\r
926 /***************************************************************************/
\r
927 /* Check preconditions. */
\r
928 /***************************************************************************/
\r
930 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
931 assert(lact != null);
\r
939 /**************************************************************************//**
\r
940 * Set the MCC property of the Mobile Flow.
\r
942 * @note The property is treated as immutable: it is only valid to call
\r
943 * the setter once. However, we don't assert if the caller tries to
\r
944 * overwrite, just ignoring the update instead.
\r
947 * @param mcc The MCC to be set. ASCIIZ string. The caller does not
\r
948 * need to preserve the value once the function returns.
\r
949 *****************************************************************************/
\r
950 public void evel_mobile_flow_mcc_set(String mcct)
\r
954 /***************************************************************************/
\r
955 /* Check preconditions. */
\r
956 /***************************************************************************/
\r
957 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
959 assert(mcct != null);
\r
967 /**************************************************************************//**
\r
968 * Set the MNC property of the Mobile Flow.
\r
970 * @note The property is treated as immutable: it is only valid to call
\r
971 * the setter once. However, we don't assert if the caller tries to
\r
972 * overwrite, just ignoring the update instead.
\r
975 * @param mnc The MNC to be set. ASCIIZ string. The caller does not
\r
976 * need to preserve the value once the function returns.
\r
977 *****************************************************************************/
\r
978 public void evel_mobile_flow_mnc_set(String mnct)
\r
982 /***************************************************************************/
\r
983 /* Check preconditions. */
\r
984 /***************************************************************************/
\r
985 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
987 assert(mnct != null);
\r
995 /**************************************************************************//**
\r
996 * Set the MSISDN property of the Mobile Flow.
\r
998 * @note The property is treated as immutable: it is only valid to call
\r
999 * the setter once. However, we don't assert if the caller tries to
\r
1000 * overwrite, just ignoring the update instead.
\r
1003 * @param msisdn The MSISDN to be set. ASCIIZ string. The caller does not
\r
1004 * need to preserve the value once the function returns.
\r
1005 *****************************************************************************/
\r
1006 public void evel_mobile_flow_msisdn_set(String msisdnt)
\r
1010 /***************************************************************************/
\r
1011 /* Check preconditions. */
\r
1012 /***************************************************************************/
\r
1013 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
1015 assert(msisdnt != null);
\r
1017 msisdn.SetValuePr(
\r
1023 /**************************************************************************//**
\r
1024 * Set the Other Functional Role property of the Mobile Flow.
\r
1026 * @note The property is treated as immutable: it is only valid to call
\r
1027 * the setter once. However, we don't assert if the caller tries to
\r
1028 * overwrite, just ignoring the update instead.
\r
1031 * @param role The Other Functional Role to be set. ASCIIZ string. The
\r
1032 * caller does not need to preserve the value once the
\r
1033 * function returns.
\r
1034 *****************************************************************************/
\r
1035 public void evel_mobile_flow_other_func_role_set(String role)
\r
1039 /***************************************************************************/
\r
1040 /* Check preconditions. */
\r
1041 /***************************************************************************/
\r
1042 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
1044 assert(role != null);
\r
1046 other_functional_role.SetValuePr(
\r
1048 "Other Functional Role");
\r
1052 /**************************************************************************//**
\r
1053 * Set the RAC property of the Mobile Flow.
\r
1055 * @note The property is treated as immutable: it is only valid to call
\r
1056 * the setter once. However, we don't assert if the caller tries to
\r
1057 * overwrite, just ignoring the update instead.
\r
1060 * @param rac The RAC to be set. ASCIIZ string. The caller does not
\r
1061 * need to preserve the value once the function returns.
\r
1062 *****************************************************************************/
\r
1063 public void evel_mobile_flow_rac_set(String ract)
\r
1067 /***************************************************************************/
\r
1068 /* Check preconditions. */
\r
1069 /***************************************************************************/
\r
1070 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
1072 assert(ract != null);
\r
1080 /**************************************************************************//**
\r
1081 * Set the Radio Access Technology property of the Mobile Flow.
\r
1083 * @note The property is treated as immutable: it is only valid to call
\r
1084 * the setter once. However, we don't assert if the caller tries to
\r
1085 * overwrite, just ignoring the update instead.
\r
1088 * @param tech The Radio Access Technology to be set. ASCIIZ string. The
\r
1089 * caller does not need to preserve the value once the
\r
1090 * function returns.
\r
1091 *****************************************************************************/
\r
1092 public void evel_mobile_flow_radio_acc_tech_set(String tech)
\r
1096 /***************************************************************************/
\r
1097 /* Check preconditions. */
\r
1098 /***************************************************************************/
\r
1099 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
1101 assert(tech != null);
\r
1103 radio_access_technology.SetValuePr(
\r
1105 "Radio Access Technology");
\r
1109 /**************************************************************************//**
\r
1110 * Set the SAC property of the Mobile Flow.
\r
1112 * @note The property is treated as immutable: it is only valid to call
\r
1113 * the setter once. However, we don't assert if the caller tries to
\r
1114 * overwrite, just ignoring the update instead.
\r
1117 * @param sac The SAC to be set. ASCIIZ string. The caller does not
\r
1118 * need to preserve the value once the function returns.
\r
1119 *****************************************************************************/
\r
1120 public void evel_mobile_flow_sac_set(String sact)
\r
1124 /***************************************************************************/
\r
1125 /* Check preconditions. */
\r
1126 /***************************************************************************/
\r
1127 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
1129 assert(sact != null);
\r
1137 /**************************************************************************//**
\r
1138 * Set the Sampling Algorithm property of the Mobile Flow.
\r
1140 * @note The property is treated as immutable: it is only valid to call
\r
1141 * the setter once. However, we don't assert if the caller tries to
\r
1142 * overwrite, just ignoring the update instead.
\r
1145 * @param algorithm The Sampling Algorithm to be set.
\r
1146 *****************************************************************************/
\r
1147 public void evel_mobile_flow_samp_alg_set(
\r
1152 /***************************************************************************/
\r
1153 /* Check preconditions. */
\r
1154 /***************************************************************************/
\r
1155 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
1157 assert(algorithm >= 0);
\r
1159 sampling_algorithm.SetValuePr(
\r
1161 "Sampling Algorithm");
\r
1165 /**************************************************************************//**
\r
1166 * Set the TAC property of the Mobile Flow.
\r
1168 * @note The property is treated as immutable: it is only valid to call
\r
1169 * the setter once. However, we don't assert if the caller tries to
\r
1170 * overwrite, just ignoring the update instead.
\r
1173 * @param tac The TAC to be set. ASCIIZ string. The caller does not
\r
1174 * need to preserve the value once the function returns.
\r
1175 *****************************************************************************/
\r
1176 public void evel_mobile_flow_tac_set(String tact)
\r
1180 /***************************************************************************/
\r
1181 /* Check preconditions. */
\r
1182 /***************************************************************************/
\r
1183 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
1185 assert(tact != null);
\r
1193 /**************************************************************************//**
\r
1194 * Set the Tunnel ID property of the Mobile Flow.
\r
1196 * @note The property is treated as immutable: it is only valid to call
\r
1197 * the setter once. However, we don't assert if the caller tries to
\r
1198 * overwrite, just ignoring the update instead.
\r
1201 * @param tunnel_id The Tunnel ID to be set. ASCIIZ string. The caller does
\r
1202 * not need to preserve the value once the function returns.
\r
1203 *****************************************************************************/
\r
1204 public void evel_mobile_flow_tunnel_id_set(String tunnel_idt)
\r
1208 /***************************************************************************/
\r
1209 /* Check preconditions. */
\r
1210 /***************************************************************************/
\r
1211 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
1213 assert(tunnel_idt != null);
\r
1215 tunnel_id.SetValuePr(
\r
1221 /**************************************************************************//**
\r
1222 * Set the VLAN ID property of the Mobile Flow.
\r
1224 * @note The property is treated as immutable: it is only valid to call
\r
1225 * the setter once. However, we don't assert if the caller tries to
\r
1226 * overwrite, just ignoring the update instead.
\r
1229 * @param vlan_id The VLAN ID to be set. ASCIIZ string. The caller does
\r
1230 * not need to preserve the value once the function returns.
\r
1231 *****************************************************************************/
\r
1232 public void evel_mobile_flow_vlan_id_set(String vlan_idt)
\r
1236 /***************************************************************************/
\r
1237 /* Check preconditions. */
\r
1238 /***************************************************************************/
\r
1239 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
1241 assert(vlan_idt != null);
\r
1243 vlan_id.SetValuePr(
\r
1251 /**************************************************************************//**
\r
1252 * Set the Duration of Connection Failed Status property of the Mobile GTP Per
\r
1255 * @note The property is treated as immutable: it is only valid to call
\r
1256 * the setter once. However, we don't assert if the caller tries to
\r
1257 * overwrite, just ignoring the update instead.
\r
1259 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1260 * @param duration The Duration of Connection Failed Status to be set.
\r
1261 *****************************************************************************/
\r
1262 public void evel_mobile_gtp_metrics_dur_con_fail_set(
\r
1263 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1268 /***************************************************************************/
\r
1269 /* Check preconditions. */
\r
1270 /***************************************************************************/
\r
1271 assert(metrics != null);
\r
1272 assert(duration >= 0);
\r
1274 metrics.dur_connection_failed_status.SetValuePr(
\r
1276 "Duration of Connection Failed Status");
\r
1280 /**************************************************************************//**
\r
1281 * Set the Duration of Tunnel Failed Status property of the Mobile GTP Per Flow
\r
1284 * @note The property is treated as immutable: it is only valid to call
\r
1285 * the setter once. However, we don't assert if the caller tries to
\r
1286 * overwrite, just ignoring the update instead.
\r
1288 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1289 * @param duration The Duration of Tunnel Failed Status to be set.
\r
1290 *****************************************************************************/
\r
1291 public void evel_mobile_gtp_metrics_dur_tun_fail_set(
\r
1292 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1297 /***************************************************************************/
\r
1298 /* Check preconditions. */
\r
1299 /***************************************************************************/
\r
1300 assert(metrics != null);
\r
1301 assert(duration >= 0);
\r
1303 metrics.dur_tunnel_failed_status.SetValuePr(
\r
1305 "Duration of Tunnel Failed Status");
\r
1309 /**************************************************************************//**
\r
1310 * Set the Activated By property of the Mobile GTP Per Flow metrics.
\r
1312 * @note The property is treated as immutable: it is only valid to call
\r
1313 * the setter once. However, we don't assert if the caller tries to
\r
1314 * overwrite, just ignoring the update instead.
\r
1316 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1317 * @param act_by The Activated By to be set. ASCIIZ string. The caller
\r
1318 * does not need to preserve the value once the function
\r
1320 *****************************************************************************/
\r
1321 public void evel_mobile_gtp_metrics_act_by_set(MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1326 /***************************************************************************/
\r
1327 /* Check preconditions. */
\r
1328 /***************************************************************************/
\r
1329 assert(metrics != null);
\r
1330 assert(act_by != null);
\r
1332 metrics.flow_activated_by.SetValuePr(
\r
1338 /**************************************************************************//**
\r
1339 * Set the Activation Time property of the Mobile GTP Per Flow metrics.
\r
1341 * @note The property is treated as immutable: it is only valid to call
\r
1342 * the setter once. However, we don't assert if the caller tries to
\r
1343 * overwrite, just ignoring the update instead.
\r
1345 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1346 * @param act_time The Activation Time to be set. ASCIIZ string. The caller
\r
1347 * does not need to preserve the value once the function
\r
1349 *****************************************************************************/
\r
1350 public void evel_mobile_gtp_metrics_act_time_set(
\r
1351 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1356 /***************************************************************************/
\r
1357 /* Check preconditions. */
\r
1358 /***************************************************************************/
\r
1359 assert(metrics != null);
\r
1361 metrics.flow_activation_time.SetValuePr(
\r
1363 "Activation Time");
\r
1367 /**************************************************************************//**
\r
1368 * Set the Deactivated By property of the Mobile GTP Per Flow metrics.
\r
1370 * @note The property is treated as immutable: it is only valid to call
\r
1371 * the setter once. However, we don't assert if the caller tries to
\r
1372 * overwrite, just ignoring the update instead.
\r
1374 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1375 * @param deact_by The Deactivated By to be set. ASCIIZ string. The caller
\r
1376 * does not need to preserve the value once the function
\r
1378 *****************************************************************************/
\r
1379 public void evel_mobile_gtp_metrics_deact_by_set(
\r
1380 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1385 /***************************************************************************/
\r
1386 /* Check preconditions. */
\r
1387 /***************************************************************************/
\r
1388 assert(metrics != null);
\r
1389 assert(deact_by != null);
\r
1391 metrics.flow_deactivated_by.SetValuePr(
\r
1393 "Deactivated By");
\r
1397 /**************************************************************************//**
\r
1398 * Set the GTP Connection Status property of the Mobile GTP Per Flow metrics.
\r
1400 * @note The property is treated as immutable: it is only valid to call
\r
1401 * the setter once. However, we don't assert if the caller tries to
\r
1402 * overwrite, just ignoring the update instead.
\r
1404 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1405 * @param status The GTP Connection Status to be set. ASCIIZ string. The
\r
1406 * caller does not need to preserve the value once the
\r
1407 * function returns.
\r
1408 *****************************************************************************/
\r
1409 public void evel_mobile_gtp_metrics_con_status_set(
\r
1410 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1415 /***************************************************************************/
\r
1416 /* Check preconditions. */
\r
1417 /***************************************************************************/
\r
1418 assert(metrics != null);
\r
1419 assert(status != null);
\r
1421 metrics.gtp_connection_status.SetValuePr(
\r
1423 "GTP Connection Status");
\r
1427 /**************************************************************************//**
\r
1428 * Set the GTP Tunnel Status property of the Mobile GTP Per Flow metrics.
\r
1430 * @note The property is treated as immutable: it is only valid to call
\r
1431 * the setter once. However, we don't assert if the caller tries to
\r
1432 * overwrite, just ignoring the update instead.
\r
1434 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1435 * @param status The GTP Tunnel Status to be set. ASCIIZ string. The
\r
1436 * caller does not need to preserve the value once the
\r
1437 * function returns.
\r
1438 *****************************************************************************/
\r
1439 public void evel_mobile_gtp_metrics_tun_status_set(
\r
1440 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1445 /***************************************************************************/
\r
1446 /* Check preconditions. */
\r
1447 /***************************************************************************/
\r
1448 assert(metrics != null);
\r
1449 assert(status != null);
\r
1451 metrics.gtp_tunnel_status.SetValuePr(
\r
1453 "GTP Tunnel Status");
\r
1457 /**************************************************************************//**
\r
1458 * Set an IP Type-of-Service count property of the Mobile GTP Per Flow metrics.
\r
1460 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1461 * @param index The index of the IP Type-of-Service.
\r
1462 * @param count The count.
\r
1463 *****************************************************************************/
\r
1464 public void evel_mobile_gtp_metrics_iptos_set(MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1470 /***************************************************************************/
\r
1471 /* Check preconditions. */
\r
1472 /***************************************************************************/
\r
1473 assert(metrics != null);
\r
1474 assert(index >= 0);
\r
1475 assert(index < EVEL_TOS_SUPPORTED);
\r
1476 assert(count >= 0);
\r
1477 assert(count <= 255);
\r
1479 LOGGER.debug("IP Type-of-Service "+index);
\r
1480 metrics.ip_tos_counts[index].SetValuePr(
\r
1482 "IP Type-of-Service");
\r
1486 /**************************************************************************//**
\r
1487 * Set the Large Packet Round-Trip Time property of the Mobile GTP Per Flow
\r
1490 * @note The property is treated as immutable: it is only valid to call
\r
1491 * the setter once. However, we don't assert if the caller tries to
\r
1492 * overwrite, just ignoring the update instead.
\r
1494 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1495 * @param rtt The Large Packet Round-Trip Time to be set.
\r
1496 *****************************************************************************/
\r
1497 public void evel_mobile_gtp_metrics_large_pkt_rtt_set(
\r
1498 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1503 /***************************************************************************/
\r
1504 /* Check preconditions. */
\r
1505 /***************************************************************************/
\r
1506 assert(metrics != null);
\r
1509 metrics.large_packet_rtt.SetValuePr(
\r
1511 "Large Packet Round-Trip Time");
\r
1515 /**************************************************************************//**
\r
1516 * Set the Large Packet Threshold property of the Mobile GTP Per Flow Metrics.
\r
1518 * @note The property is treated as immutable: it is only valid to call
\r
1519 * the setter once. However, we don't assert if the caller tries to
\r
1520 * overwrite, just ignoring the update instead.
\r
1522 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1523 * @param threshold The Large Packet Threshold to be set.
\r
1524 *****************************************************************************/
\r
1525 public void evel_mobile_gtp_metrics_large_pkt_thresh_set(
\r
1526 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1531 /***************************************************************************/
\r
1532 /* Check preconditions. */
\r
1533 /***************************************************************************/
\r
1534 assert(metrics != null);
\r
1535 assert(threshold >= 0.0);
\r
1537 metrics.large_packet_threshold.SetValuePr(
\r
1539 "Large Packet Threshold");
\r
1543 /**************************************************************************//**
\r
1544 * Set the Max Receive Bit Rate property of the Mobile GTP Per Flow Metrics.
\r
1546 * @note The property is treated as immutable: it is only valid to call
\r
1547 * the setter once. However, we don't assert if the caller tries to
\r
1548 * overwrite, just ignoring the update instead.
\r
1550 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1551 * @param rate The Max Receive Bit Rate to be set.
\r
1552 *****************************************************************************/
\r
1553 public void evel_mobile_gtp_metrics_max_rcv_bit_rate_set(
\r
1554 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1559 /***************************************************************************/
\r
1560 /* Check preconditions. */
\r
1561 /***************************************************************************/
\r
1562 assert(metrics != null);
\r
1563 assert(rate >= 0);
\r
1565 metrics.max_receive_bit_rate.SetValuePr(
\r
1567 "Max Receive Bit Rate");
\r
1571 /**************************************************************************//**
\r
1572 * Set the Max Transmit Bit Rate property of the Mobile GTP Per Flow Metrics.
\r
1574 * @note The property is treated as immutable: it is only valid to call
\r
1575 * the setter once. However, we don't assert if the caller tries to
\r
1576 * overwrite, just ignoring the update instead.
\r
1578 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1579 * @param rate The Max Transmit Bit Rate to be set.
\r
1580 *****************************************************************************/
\r
1581 public void evel_mobile_gtp_metrics_max_trx_bit_rate_set(
\r
1582 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1587 /***************************************************************************/
\r
1588 /* Check preconditions. */
\r
1589 /***************************************************************************/
\r
1590 assert(metrics != null);
\r
1591 assert(rate >= 0);
\r
1593 metrics.max_transmit_bit_rate.SetValuePr(
\r
1595 "Max Transmit Bit Rate");
\r
1599 /**************************************************************************//**
\r
1600 * Set the Number of GTP Echo Failures property of the Mobile GTP Per Flow
\r
1603 * @note The property is treated as immutable: it is only valid to call
\r
1604 * the setter once. However, we don't assert if the caller tries to
\r
1605 * overwrite, just ignoring the update instead.
\r
1607 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1608 * @param num The Number of GTP Echo Failures to be set.
\r
1609 *****************************************************************************/
\r
1610 public void evel_mobile_gtp_metrics_num_echo_fail_set(
\r
1611 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1616 /***************************************************************************/
\r
1617 /* Check preconditions. */
\r
1618 /***************************************************************************/
\r
1619 assert(metrics != null);
\r
1622 metrics.num_gtp_echo_failures.SetValuePr(
\r
1624 "Number of GTP Echo Failures");
\r
1628 /**************************************************************************//**
\r
1629 * Set the Number of GTP Tunnel Errors property of the Mobile GTP Per Flow
\r
1632 * @note The property is treated as immutable: it is only valid to call
\r
1633 * the setter once. However, we don't assert if the caller tries to
\r
1634 * overwrite, just ignoring the update instead.
\r
1636 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1637 * @param num The Number of GTP Tunnel Errors to be set.
\r
1638 *****************************************************************************/
\r
1639 public void evel_mobile_gtp_metrics_num_tun_fail_set(
\r
1640 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1645 /***************************************************************************/
\r
1646 /* Check preconditions. */
\r
1647 /***************************************************************************/
\r
1648 assert(metrics != null);
\r
1651 metrics.num_gtp_tunnel_errors.SetValuePr(
\r
1653 "Number of GTP Tunnel Errors");
\r
1657 /**************************************************************************//**
\r
1658 * Set the Number of HTTP Errors property of the Mobile GTP Per Flow Metrics.
\r
1660 * @note The property is treated as immutable: it is only valid to call
\r
1661 * the setter once. However, we don't assert if the caller tries to
\r
1662 * overwrite, just ignoring the update instead.
\r
1664 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1665 * @param num The Number of HTTP Errors to be set.
\r
1666 *****************************************************************************/
\r
1667 public void evel_mobile_gtp_metrics_num_http_errors_set(
\r
1668 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1673 /***************************************************************************/
\r
1674 /* Check preconditions. */
\r
1675 /***************************************************************************/
\r
1676 assert(metrics != null);
\r
1679 metrics.num_http_errors.SetValuePr(
\r
1681 "Number of HTTP Errors");
\r
1685 /**************************************************************************//**
\r
1686 * Add a TCP flag count to the metrics.
\r
1688 * @note The property is treated as immutable: it is only valid to call
\r
1689 * the setter once. However, we don't assert if the caller tries to
\r
1690 * overwrite, just ignoring the update instead.
\r
1692 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1693 * @param tcp_flag The TCP flag to be updated.
\r
1694 * @param count The associated flag count, which must be nonzero.
\r
1695 *****************************************************************************/
\r
1696 public void evel_mobile_gtp_metrics_tcp_flag_count_add(
\r
1697 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1703 /***************************************************************************/
\r
1704 /* Check preconditions. */
\r
1705 /***************************************************************************/
\r
1706 assert(metrics != null);
\r
1707 assert(tcp_flag >= 0 && tcp_flag < EVEL_MAX_TCP_FLAGS);
\r
1708 assert(count >= 0);
\r
1710 LOGGER.debug("TCP Flag: "+tcp_flag);
\r
1711 metrics.tcp_flag_counts[tcp_flag].SetValuePr(
\r
1717 /**************************************************************************//**
\r
1718 * Add a QCI COS count to the metrics.
\r
1720 * @note The property is treated as immutable: it is only valid to call
\r
1721 * the setter once. However, we don't assert if the caller tries to
\r
1722 * overwrite, just ignoring the update instead.
\r
1724 * @param metrics Pointer to the Mobile GTP Per Flow Metrics.
\r
1725 * @param qci_cos The QCI COS count to be updated.
\r
1726 * @param count The associated QCI COS count.
\r
1727 *****************************************************************************/
\r
1728 public void evel_mobile_gtp_metrics_qci_cos_count_add(
\r
1729 MOBILE_GTP_PER_FLOW_METRICS metrics,
\r
1735 /***************************************************************************/
\r
1736 /* Check preconditions. */
\r
1737 /***************************************************************************/
\r
1738 assert(metrics != null);
\r
1739 assert(qci_cos >= 0);
\r
1740 assert(qci_cos < EVEL_MAX_QCI_COS_TYPES);
\r
1741 assert(count >= 0);
\r
1743 LOGGER.debug("QCI COS: "+ qci_cos);
\r
1744 metrics.qci_cos_counts[qci_cos].SetValuePr(
\r
1751 /**************************************************************************//**
\r
1752 * Encode the GTP Per Flow Object in JSON according to AT&T's schema.
\r
1754 * @retval JsonObjectBuilder of GTP Flow body portion of message
\r
1755 *****************************************************************************/
\r
1756 JsonObjectBuilder evelGtpPerFlowObject()
\r
1759 boolean found_ip_tos;
\r
1760 boolean found_tcp_flag;
\r
1761 boolean found_qci_cos;
\r
1765 /***************************************************************************/
\r
1766 /* Mandatory parameters. */
\r
1767 /***************************************************************************/
\r
1768 MOBILE_GTP_PER_FLOW_METRICS metrics = gtp_per_flow_metrics;
\r
1770 JsonObjectBuilder obj = Json.createObjectBuilder()
\r
1771 .add("avgBitErrorRate", metrics.avg_bit_error_rate)
\r
1772 .add("avgPacketDelayVariation", metrics.avg_packet_delay_variation)
\r
1773 .add("avgPacketLatency", metrics.avg_packet_latency)
\r
1774 .add("avgReceiveThroughput", metrics.avg_receive_throughput)
\r
1775 .add("avgTransmitThroughput", metrics.avg_transmit_throughput)
\r
1776 .add("flowActivationEpoch", metrics.flow_activation_epoch)
\r
1777 .add("flowActivationMicrosec", metrics.flow_activation_microsec)
\r
1778 .add("flowDeactivationEpoch", metrics.flow_deactivation_epoch)
\r
1779 .add("flowDeactivationMicrosec", metrics.flow_deactivation_microsec)
\r
1780 .add("flowDeactivationTime", metrics.flow_deactivation_time.toString())
\r
1781 .add("flowStatus", metrics.flow_status)
\r
1782 .add("maxPacketDelayVariation", metrics.max_packet_delay_variation)
\r
1783 .add("numActivationFailures", metrics.num_activation_failures)
\r
1784 .add( "numBitErrors", metrics.num_bit_errors)
\r
1785 .add( "numBytesReceived", metrics.num_bytes_received)
\r
1786 .add( "numBytesTransmitted", metrics.num_bytes_transmitted)
\r
1787 .add( "numDroppedPackets", metrics.num_dropped_packets)
\r
1788 .add( "numL7BytesReceived", metrics.num_l7_bytes_received)
\r
1789 .add( "numL7BytesTransmitted", metrics.num_l7_bytes_transmitted)
\r
1790 .add( "numLostPackets", metrics.num_lost_packets)
\r
1791 .add( "numOutOfOrderPackets", metrics.num_out_of_order_packets)
\r
1792 .add( "numPacketErrors", metrics.num_packet_errors)
\r
1793 .add( "numPacketsReceivedExclRetrans",
\r
1794 metrics.num_packets_received_excl_retrans)
\r
1796 "numPacketsReceivedInclRetrans",
\r
1797 metrics.num_packets_received_incl_retrans)
\r
1799 "numPacketsTransmittedInclRetrans",
\r
1800 metrics.num_packets_transmitted_incl_retrans)
\r
1801 .add( "numRetries", metrics.num_retries)
\r
1802 .add( "numTimeouts", metrics.num_timeouts)
\r
1804 "numTunneledL7BytesReceived",
\r
1805 metrics.num_tunneled_l7_bytes_received)
\r
1806 .add( "roundTripTime", metrics.round_trip_time)
\r
1807 .add( "timeToFirstByte", metrics.time_to_first_byte);
\r
1809 /***************************************************************************/
\r
1810 /* Optional parameters. */
\r
1811 /***************************************************************************/
\r
1812 found_ip_tos = false;
\r
1813 for (index = 0; index < EVEL_TOS_SUPPORTED; index++)
\r
1815 if (metrics.ip_tos_counts[index].is_set)
\r
1817 found_ip_tos = true;
\r
1824 JsonArrayBuilder builder = Json.createArrayBuilder();
\r
1825 for (index = 0; index < EVEL_TOS_SUPPORTED; index++)
\r
1827 if (metrics.ip_tos_counts[index].is_set)
\r
1829 JsonObjectBuilder obj2 = Json.createObjectBuilder()
\r
1830 .add(Integer.toString(index), metrics.ip_tos_counts[index].value);
\r
1831 builder.add(obj2);
\r
1834 obj.add("ipTosCountList", builder);
\r
1838 /***************************************************************************/
\r
1839 /* Make some compile-time assertions about EVEL_TCP_FLAGS. If you update */
\r
1840 /* these, make sure you update evel_tcp_flag_strings to match the enum. */
\r
1841 /***************************************************************************/
\r
1843 found_tcp_flag = false;
\r
1844 for (index = 0; index < EVEL_MAX_TCP_FLAGS; index++)
\r
1846 if (metrics.tcp_flag_counts[index].is_set)
\r
1848 found_tcp_flag = true;
\r
1853 if (found_tcp_flag)
\r
1855 JsonArrayBuilder builder = Json.createArrayBuilder();
\r
1856 for (index = 0; index < EVEL_MAX_TCP_FLAGS; index++)
\r
1858 if (metrics.tcp_flag_counts[index].is_set)
\r
1860 JsonObjectBuilder obj2 = Json.createObjectBuilder()
\r
1861 .add(Integer.toString(index), evel_tcp_flag_strings[index]);
\r
1862 builder.add(obj2);
\r
1865 obj.add("tcpFlagList", builder);
\r
1868 if (found_tcp_flag)
\r
1870 JsonArrayBuilder builder = Json.createArrayBuilder();
\r
1871 for (index = 0; index < EVEL_MAX_TCP_FLAGS; index++)
\r
1873 if (metrics.tcp_flag_counts[index].is_set)
\r
1875 JsonObjectBuilder obj2 = Json.createObjectBuilder()
\r
1876 .add(evel_tcp_flag_strings[index], metrics.tcp_flag_counts[index].value);
\r
1877 builder.add(obj2);
\r
1880 obj.add("tcpFlagCountList", builder);
\r
1883 /***************************************************************************/
\r
1884 /* Make some compile-time assertions about EVEL_QCI_COS_TYPES. If you */
\r
1885 /* update these, make sure you update evel_qci_cos_strings to match the */
\r
1887 /***************************************************************************/
\r
1889 found_qci_cos = false;
\r
1890 for (index = 0; index < EVEL_MAX_QCI_COS_TYPES; index++)
\r
1892 if (metrics.qci_cos_counts[index].is_set)
\r
1894 found_qci_cos = true;
\r
1899 if (found_qci_cos)
\r
1901 JsonArrayBuilder builder = Json.createArrayBuilder();
\r
1902 for (index = 0; index < EVEL_MAX_QCI_COS_TYPES; index++)
\r
1904 if (metrics.qci_cos_counts[index].is_set)
\r
1906 JsonObjectBuilder obj2 = Json.createObjectBuilder()
\r
1907 .add(Integer.toString(index), evel_qci_cos_strings[index]);
\r
1908 builder.add(obj2);
\r
1911 obj.add("mobileQciCosList", builder);
\r
1914 if (found_qci_cos)
\r
1916 JsonArrayBuilder builder = Json.createArrayBuilder();
\r
1917 for (index = 0; index < EVEL_MAX_QCI_COS_TYPES; index++)
\r
1919 if (metrics.qci_cos_counts[index].is_set)
\r
1921 JsonObjectBuilder obj2 = Json.createObjectBuilder()
\r
1922 .add(evel_qci_cos_strings[index], metrics.qci_cos_counts[index].value);
\r
1923 builder.add(obj2);
\r
1926 obj.add("mobileQciCosCountList", builder);
\r
1929 metrics.dur_connection_failed_status.encJsonValue(obj, "durConnectionFailedStatus");
\r
1930 metrics.dur_tunnel_failed_status.encJsonValue(obj, "durTunnelFailedStatus");
\r
1931 metrics.flow_activated_by.encJsonValue(obj, "flowActivatedBy");
\r
1932 metrics.flow_activation_time.encJsonValue(obj,"flowActivationTime");
\r
1933 metrics.flow_deactivated_by.encJsonValue(obj, "flowDeactivatedBy");
\r
1934 metrics.gtp_connection_status.encJsonValue(obj, "gtpConnectionStatus");
\r
1935 metrics.gtp_tunnel_status.encJsonValue(obj, "gtpTunnelStatus");
\r
1936 metrics.large_packet_rtt.encJsonValue(obj, "largePacketRtt");
\r
1937 metrics.large_packet_threshold.encJsonValue(obj, "largePacketThreshold");
\r
1938 metrics.max_receive_bit_rate.encJsonValue(obj, "maxReceiveBitRate");
\r
1939 metrics.max_transmit_bit_rate.encJsonValue(obj, "maxTransmitBitRate");
\r
1940 metrics.num_gtp_echo_failures.encJsonValue(obj, "numGtpEchoFailures");
\r
1941 metrics.num_gtp_tunnel_errors.encJsonValue(obj, "numGtpTunnelErrors");
\r
1942 metrics.num_http_errors.encJsonValue(obj, "numHttpErrors");
\r
1949 /**************************************************************************//**
\r
1950 * Encode Mobile Flow Object according to VES schema
\r
1952 * @retval JSON Object of Mobile Flow event
\r
1953 *****************************************************************************/
\r
1954 JsonObjectBuilder evelMobileFlowObject()
\r
1957 double version = major_version+(double)minor_version/10;
\r
1961 /***************************************************************************/
\r
1962 /* Check preconditions. */
\r
1963 /***************************************************************************/
\r
1964 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_MOBILE_FLOW);
\r
1966 /***************************************************************************/
\r
1967 /* Mandatory fields. */
\r
1968 /***************************************************************************/
\r
1969 JsonObjectBuilder evelmf = Json.createObjectBuilder()
\r
1970 .add("flowDirection", flow_direction)
\r
1971 .add("ipProtocolType", ip_protocol_type)
\r
1972 .add("ipVersion", ip_version)
\r
1973 .add("otherEndpointIpAddress", other_endpoint_ip_address)
\r
1974 .add("otherEndpointPort", other_endpoint_port)
\r
1975 .add("reportingEndpointIpAddr", reporting_endpoint_ip_addr)
\r
1976 .add("reportingEndpointPort", reporting_endpoint_port);
\r
1978 //call gtp per flow object encoding function
\r
1979 if(gtp_per_flow_metrics != null)
\r
1980 evelmf.add("gtpPerFlowMetrics", evelGtpPerFlowObject());
\r
1984 /***************************************************************************/
\r
1985 /* Optional fields. */
\r
1986 /***************************************************************************/
\r
1987 // additional fields
\r
1988 if( additional_info != null )
\r
1990 JsonArrayBuilder builder = Json.createArrayBuilder();
\r
1991 for(int i=0;i<additional_info.size();i++) {
\r
1992 String[] addl_info = additional_info.get(i);
\r
1993 JsonObject obj = Json.createObjectBuilder()
\r
1994 .add("name", addl_info[0])
\r
1995 .add("value", addl_info[1]).build();
\r
1998 evelmf.add("additionalFields", builder);
\r
2002 /***************************************************************************/
\r
2003 /* Optional parameters. */
\r
2004 /***************************************************************************/
\r
2005 application_type.encJsonValue(evelmf, "applicationType");
\r
2006 app_protocol_type.encJsonValue(evelmf, "appProtocolType");
\r
2007 app_protocol_version.encJsonValue(evelmf, "appProtocolVersion");
\r
2008 cid.encJsonValue(evelmf,"cid");
\r
2009 connection_type.encJsonValue(evelmf, "connectionType");
\r
2010 ecgi.encJsonValue(evelmf, "ecgi");
\r
2011 gtp_protocol_type.encJsonValue(evelmf, "gtpProtocolType");
\r
2012 gtp_version.encJsonValue(evelmf, "gtpVersion");
\r
2013 http_header.encJsonValue(evelmf, "httpHeader");
\r
2014 imei.encJsonValue(evelmf, "imei");
\r
2015 imsi.encJsonValue(evelmf, "imsi");
\r
2016 lac.encJsonValue(evelmf, "lac");
\r
2017 mcc.encJsonValue(evelmf, "mcc");
\r
2018 mnc.encJsonValue(evelmf, "mnc");
\r
2019 msisdn.encJsonValue(evelmf, "msisdn");
\r
2020 other_functional_role.encJsonValue(evelmf,"otherFunctionalRole");
\r
2021 rac.encJsonValue(evelmf, "rac");
\r
2022 radio_access_technology.encJsonValue(evelmf, "radioAccessTechnology");
\r
2023 sac.encJsonValue(evelmf, "sac");
\r
2024 sampling_algorithm.encJsonValue(evelmf, "samplingAlgorithm");
\r
2025 tac.encJsonValue(evelmf, "tac");
\r
2026 tunnel_id.encJsonValue(evelmf,"tunnelId");
\r
2027 vlan_id.encJsonValue(evelmf,"vlanId");
\r
2030 /***************************************************************************/
\r
2031 /* Although optional, we always generate the version. Note that this */
\r
2032 /* closes the object, too. */
\r
2033 /***************************************************************************/
\r
2034 evelmf.add("mobileFlowFieldsVersion", version);
\r
2041 /**************************************************************************//**
\r
2042 * Encode the event as a JSON event object according to AT&T's schema.
\r
2043 * retval : String of JSON event message
\r
2044 *****************************************************************************/
\r
2045 String evel_json_encode_event()
\r
2049 assert(event_domain == EvelHeader.DOMAINS.EVEL_DOMAIN_STATE_CHANGE);
\r
2050 //encode common event header and mobile flow body
\r
2051 JsonObject obj = Json.createObjectBuilder()
\r
2052 .add("event", Json.createObjectBuilder()
\r
2053 .add( "commonEventHeader",eventHeaderObject() )
\r
2054 .add( "mobileFlowFields",evelMobileFlowObject() )
\r
2059 return obj.toString();
\r