docs: def main():
      """Main function called upon script execution."""
      # First get the wireless interface index.
      if OPTIONS['<interface>']:
          pack = struct.pack('16sI', OPTIONS['<interface>'].encode('ascii'), 0)
          sk = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
          try:
              info = struct.unpack('16sI', fcntl.ioctl(sk.fileno(), 0x8933, pack))
          except OSError:
              return error('Wireless interface {0} does not exist.'.format(OPTIONS['<interface>']))
          finally:
              sk.close()
          if_index = int(info[1])
      else:
          if_index = -1
  
      # Then open a socket to the kernel. Same one used for sending and receiving.
      sk = nl_socket_alloc()  # Creates an `nl_sock` instance.
      ret = genl_connect(sk)  # Create file descriptor and bind socket.
      if ret < 0:
          reason = errmsg[abs(ret)]
          return error('genl_connect() returned {0} ({1})'.format(ret, reason))
  
      # Now get the nl80211 driver ID. Handle errors here.
      driver_id = genl_ctrl_resolve(sk, b'nl80211')  # Find the nl80211 driver ID.
      if driver_id < 0:
          reason = errmsg[abs(driver_id)]
          return error('genl_ctrl_resolve() returned {0} ({1})'.format(driver_id, reason))
  
      # Setup the Generic Netlink message.
      msg = nlmsg_alloc()  # Allocate a message.
      if OPTIONS['<interface>']:
          genlmsg_put(msg, 0, 0, driver_id, 0, 0, nl80211.NL80211_CMD_GET_INTERFACE, 0)  # Tell kernel: send iface info.
          nla_put_u32(msg, nl80211.NL80211_ATTR_IFINDEX, if_index)  # This is the interface we care about.
      else:
          # Ask kernel to send info for all wireless interfaces.
          genlmsg_put(msg, 0, 0, driver_id, 0, NLM_F_DUMP, nl80211.NL80211_CMD_GET_INTERFACE, 0)
  
      # Add the callback function to the nl_sock.
      has_printed = list()
      nl_socket_modify_cb(sk, NL_CB_VALID, NL_CB_CUSTOM, callback, has_printed)
  
      # Now send the message to the kernel, and get its response, automatically calling the callback.
      ret = nl_send_auto(sk, msg)
      if ret < 0:
          reason = errmsg[abs(ret)]
          return error('nl_send_auto() returned {0} ({1})'.format(ret, reason))
      print('Sent {0} bytes to the kernel.'.format(ret))
      ret = nl_recvmsgs_default(sk)  # Blocks until the kernel replies. Usually it's instant.
      if ret < 0:
          reason = errmsg[abs(ret)]
          return error('nl_recvmsgs_default() returned {0} ({1})'.format(ret, reason))