import argparse import binascii def generate_apf_program(mac_raw, ip_raw): """ Generates an APF program that supports ping4 offload. Args: mac_raw: The MAC address in raw string format (e.g., "00:11:22:33:44:55"). ip_raw: The IPv4 address in raw string format (e.g., "192.168.1.100"). Returns: The generated APF program as a hex string. """ mac_list = mac_raw.split(":") ip_list = ip_raw.split(".") ip_addr = "".join([f"{int(i):02x}" for i in ip_list]) mac_addr = "".join(mac_list) program = "75001002030405060708060001080006040002AA300C32AA0FBA06AA09BA07AA08BA086A02BA096A06A20206020304050607031A120CAA2F021A888E080088B486DD0806033084006F08066A0EA30206000108000604033612147A27017A0202033A1A1C820200033868A30206FFFFFFFFFFFF020C1A267E000000020A0000010337020A1A267E000000020A0000010337AB24003CCA0606CB0306CB090ACB0306C60A000001CA0606CA1C04AA0A3A12AA1AAA25FFFF0339020B120C8400C608001A14563FFF00FF821511AB0D2A10820E446A3238A20206020304050607020D0A1E52F08202E003201A1E8600000002FFFFFFFF031D86000000020A0000FF031E0A1782100612149C00091FFFAB0D2A1082020703351A14563FFF00FF82570168A24D060203040506076A1EA244040A000001AA0D823F14AA0E8A0229031F0A22823308AA0EAA24CA0606CB0306CA0C0AC640010000C60A000001CA1A04C6000000003EFFFFFFDA6B26AA22AA2AAA250E24220000032268A30206FFFFFFFFFFFF0211031C020F7C000E86DD68A30206FFFFFFFFFFFF021603190A1482020002127A093A0A268202FF032B02150A3682FC8768A5000228063333000000013333FF4411223333FF5566773333FFBBCCDD020304050607FFFFFFFFFFFF032D6A26A20C0DFF0200000000000000000001FF3A0DA30203BBCCDD032D7215A3021020010000000000000100001BAABBCCDD032D0A157A02FF032C12128A0217032C0A377A0200032C6A3EA3021020010000000000000100001BAABBCCDD032D6A16A2021000000000000000000000000000000000021312128A021F02130A4E7A020102130A16AA2F020100FF032C0A509A02017202032CAB240056CA5006CB0306C486DDC660000000C600203AFFCA3E10CA1610C688000020C6E0000000CA3E10C40201CB0306AA250E3816003A032E82028503258216886A26A2020FFF0200000000000000000000000000032A0213" program = program.replace("020304050607", mac_addr) program = program.replace("0A000001", ip_addr) return program def main(): """ The main method. """ parser = argparse.ArgumentParser(description="Generate a ping4 offload APF program.") parser.add_argument("mac", help="The DUT's MAC address (e.g., '00:11:22:33:44:55')") parser.add_argument("ip", help="The DUT's IPv4 address (e.g., '192.168.1.100')") args = parser.parse_args() out_program = generate_apf_program(args.mac, args.ip) print("APF Program:\n", out_program) if __name__ == '__main__': main()