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()
