• Michal Kubecek's avatar
    ethtool: default handlers for GET requests · 728480f1
    Michal Kubecek authored
    Significant part of GET request processing is common for most request
    types but unfortunately it cannot be easily separated from type specific
    code as we need to alternate between common actions (parsing common request
    header, allocating message and filling netlink/genetlink headers etc.) and
    specific actions (querying the device, composing the reply). The processing
    also happens in three different situations: "do" request, "dump" request
    and notification, each doing things in slightly different way.
    
    The request specific code is implemented in four or five callbacks defined
    in an instance of struct get_request_ops:
    
      parse_request() - parse incoming message
      prepare_data()  - retrieve data from driver or NIC
      reply_size()    - estimate reply message size
      fill_reply()    - compose reply message
      cleanup_data()  - (optional) clean up additional data
    
    Other members of struct get_request_ops describe the data structure holding
    information from client request and data used to compose the message. The
    default handlers ethnl_default_doit(), ethnl_default_dumpit(),
    ethnl_default_start() and ethnl_default_done() can be then used in genl_ops
    handler. Notification handler will be introduced in a later patch.
    Signed-off-by: default avatarMichal Kubecek <mkubecek@suse.cz>
    Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    728480f1
netlink.c 14.5 KB