<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def add_bfd_session(self, dpid, ofport, src_mac, src_ip, dst_mac="FF:FF:FF:FF:FF:FF", dst_ip="255.255.255.255", auth_type=0, auth_keys=None):
 """ Establish a new BFD session and return My Discriminator of new session. Configure the BFD session with the following arguments. ================ ====================================================== Argument Description ================ ====================================================== dpid Datapath ID of the BFD interface. ofport Openflow port number of the BFD interface. src_mac Source MAC address of the BFD interface. src_ip Source IPv4 address of the BFD interface. dst_mac (Optional) Destination MAC address of the BFD interface. dst_ip (Optional) Destination IPv4 address of the BFD interface. auth_type (Optional) Authentication type. auth_keys (Optional) A dictionary of authentication key chain which key is an integer of *Auth Key ID* and value is a string of *Password* or *Auth Key*. ================ ====================================================== Example:: add_bfd_session(dpid=1, ofport=1, src_mac="01:23:45:67:89:AB", src_ip="192.168.1.1", dst_mac="12:34:56:78:9A:BC", dst_ip="192.168.1.2", auth_type=bfd.BFD_AUTH_KEYED_SHA1, auth_keys={1: "secret key 1", 2: "secret key 2"}) """

        auth_keys = auth_keys if auth_keys else {}
        # Generate a unique discriminator
        while True:
            # Generate My Discriminator
            my_discr = random.randint(1, UINT32_MAX)

            # Generate an UDP destination port according to RFC5881 Section 4.
            src_port = random.randint(49152, 65535)

            # Ensure generated discriminator and UDP port are unique.
            if my_discr in self.session:
                continue

            unique_flag = True

            for s in self.session.values():
                if s.your_discr == my_discr or s.src_port == src_port:
                    unique_flag = False
                    break

            if unique_flag:
                break

        sess = BFDSession(app=self, my_discr=my_discr,
                          dpid=dpid, ofport=ofport,
                          src_mac=src_mac, src_ip=src_ip, src_port=src_port,
                          dst_mac=dst_mac, dst_ip=dst_ip,
                          auth_type=auth_type, auth_keys=auth_keys)

        self.session[my_discr] = sess

        return my_discr