blob: e6a7ad726568200cd57ce379ece4f98aaca01faf [file] [log] [blame]
/*
* Copyright (C) 2023 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.
*/
package android.net.apf;
/**
* The class contains the helper method for interacting with native apf code.
*/
public class ApfJniUtils {
static {
// Load up native shared library containing APF interpreter exposed via JNI.
System.loadLibrary("networkstacktestsjni");
}
/**
* Call the APF interpreter to run {@code program} on {@code packet} with persistent memory
* segment {@data} pretending the filter was installed {@code filter_age} seconds ago.
*/
public static native int apfSimulate(int apfVersion, byte[] program, byte[] packet,
byte[] data, int filterAge);
/**
* Compile a tcpdump human-readable filter (e.g. "icmp" or "tcp port 54") into a BPF
* prorgam and return a human-readable dump of the BPF program identical to "tcpdump -d".
*/
public static native String compileToBpf(String filter);
/**
* Open packet capture file {@code pcap_filename} and filter the packets using tcpdump
* human-readable filter (e.g. "icmp" or "tcp port 54") compiled to a BPF program and
* at the same time using APF program {@code apf_program}. Return {@code true} if
* both APF and BPF programs filter out exactly the same packets.
*/
public static native boolean compareBpfApf(int apfVersion, String filter,
String pcapFilename, byte[] apfProgram);
/**
* Open packet capture file {@code pcapFilename} and run it through APF filter. Then
* checks whether all the packets are dropped and populates data[] {@code data} with
* the APF counters.
*/
public static native boolean dropsAllPackets(int apfVersion, byte[] program, byte[] data,
String pcapFilename);
/**
* Disassemble the Apf program into human-readable text.
*/
public static native String[] disassembleApf(byte[] program);
/**
* Get the transmitted packet.
*/
public static native byte[] getTransmittedPacket();
/**
* Reset the memory region that stored the transmitted packet.
*/
public static native void resetTransmittedPacketMemory();
}