/* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ syntax = "proto2"; package perfetto.protos; enum TrafficDirection { DIR_UNSPECIFIED = 0; DIR_INGRESS = 1; DIR_EGRESS = 2; } // NetworkPacketEvent records the details of a single packet sent or received // on the network (in Linux kernel terminology, one sk_buff struct). message NetworkPacketEvent { // The direction traffic is flowing for this event. optional TrafficDirection direction = 1; // The name of the interface if available (e.g. 'rmnet0'). optional string interface = 2; // The length of the packet in bytes (wire_size - L2_header_size). Ignored // when using NetworkPacketEvent as the ctx in either NetworkPacketBundle or // NetworkPacketContext. optional uint32 length = 3; // The Linux user id associated with the packet's socket. optional uint32 uid = 4; // The Android network tag associated with the packet's socket. optional uint32 tag = 5; // The packet's IP protocol (TCP=6, UDP=17, etc). optional uint32 ip_proto = 6; // The packet's TCP flags as a bitmask (FIN=0x1, SYN=0x2, RST=0x4, etc). optional uint32 tcp_flags = 7; // The local udp/tcp port of the packet. optional uint32 local_port = 8; // The remote udp/tcp port of the packet. optional uint32 remote_port = 9; // The 1-byte ICMP type identifier. optional uint32 icmp_type = 10; // The 1-byte ICMP code identifier. optional uint32 icmp_code = 11; } // NetworkPacketBundle bundles one or more packets sharing the same attributes. message NetworkPacketBundle { oneof packet_context { // The intern id for looking up the associated packet context. uint64 iid = 1; // The inlined context for events in this bundle. NetworkPacketEvent ctx = 2; } // The timestamp of the i-th packet encoded as the nanoseconds since the // enclosing TracePacket's timestamp. repeated uint64 packet_timestamps = 3 [packed = true]; // The length of the i-th packet in bytes (wire_size - L2_header_size). repeated uint32 packet_lengths = 4 [packed = true]; // Total number of packets in the bundle (when above aggregation_threshold). optional uint32 total_packets = 5; // Duration between first and last packet (when above aggregation_threshold). optional uint64 total_duration = 6; // Total packet length in bytes (when above aggregation_threshold). optional uint64 total_length = 7; } // An internable packet context. message NetworkPacketContext { optional uint64 iid = 1; optional NetworkPacketEvent ctx = 2; }