• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import argparse
2import binascii
3
4def generate_apf_program(mac_raw, ip_raw):
5    """
6    Generates an APF program that supports ping4 offload.
7
8    Args:
9      mac_raw: The MAC address in raw string format (e.g., "00:11:22:33:44:55").
10      ip_raw: The IPv4 address in raw string format (e.g., "192.168.1.100").
11
12    Returns:
13      The generated APF program as a hex string.
14    """
15    mac_list = mac_raw.split(":")
16    ip_list = ip_raw.split(".")
17
18    ip_addr = "".join([f"{int(i):02x}" for i in ip_list])
19    mac_addr = "".join(mac_list)
20
21    program = "75001002030405060708060001080006040002AA300C32AA0FBA06AA09BA07AA08BA086A02BA096A06A20206020304050607031A120CAA2F021A888E080088B486DD0806033084006F08066A0EA30206000108000604033612147A27017A0202033A1A1C820200033868A30206FFFFFFFFFFFF020C1A267E000000020A0000010337020A1A267E000000020A0000010337AB24003CCA0606CB0306CB090ACB0306C60A000001CA0606CA1C04AA0A3A12AA1AAA25FFFF0339020B120C8400C608001A14563FFF00FF821511AB0D2A10820E446A3238A20206020304050607020D0A1E52F08202E003201A1E8600000002FFFFFFFF031D86000000020A0000FF031E0A1782100612149C00091FFFAB0D2A1082020703351A14563FFF00FF82570168A24D060203040506076A1EA244040A000001AA0D823F14AA0E8A0229031F0A22823308AA0EAA24CA0606CB0306CA0C0AC640010000C60A000001CA1A04C6000000003EFFFFFFDA6B26AA22AA2AAA250E24220000032268A30206FFFFFFFFFFFF0211031C020F7C000E86DD68A30206FFFFFFFFFFFF021603190A1482020002127A093A0A268202FF032B02150A3682FC8768A5000228063333000000013333FF4411223333FF5566773333FFBBCCDD020304050607FFFFFFFFFFFF032D6A26A20C0DFF0200000000000000000001FF3A0DA30203BBCCDD032D7215A3021020010000000000000100001BAABBCCDD032D0A157A02FF032C12128A0217032C0A377A0200032C6A3EA3021020010000000000000100001BAABBCCDD032D6A16A2021000000000000000000000000000000000021312128A021F02130A4E7A020102130A16AA2F020100FF032C0A509A02017202032CAB240056CA5006CB0306C486DDC660000000C600203AFFCA3E10CA1610C688000020C6E0000000CA3E10C40201CB0306AA250E3816003A032E82028503258216886A26A2020FFF0200000000000000000000000000032A0213"
22    program = program.replace("020304050607", mac_addr)
23    program = program.replace("0A000001", ip_addr)
24    return program
25
26def main():
27    """
28    The main method.
29    """
30    parser = argparse.ArgumentParser(description="Generate a ping4 offload APF program.")
31    parser.add_argument("mac", help="The DUT's MAC address (e.g., '00:11:22:33:44:55')")
32    parser.add_argument("ip", help="The DUT's IPv4 address (e.g., '192.168.1.100')")
33    args = parser.parse_args()
34    out_program = generate_apf_program(args.mac, args.ip)
35    print("APF Program:\n", out_program)
36
37if __name__ == '__main__':
38    main()
39