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