Skip to content
  • Guillaume Nault's avatar
    ipv4: fix value of ->nlmsg_flags reported in RTM_NEWROUTE events · b93e1fa7
    Guillaume Nault authored
    fib_table_insert() inconsistently fills the nlmsg_flags field in its
    notification messages.
    
    Since commit b8f55831 ("[RTNETLINK]: Fix sending netlink message
    when replace route."), the netlink message has its nlmsg_flags set to
    NLM_F_REPLACE if the route replaced a preexisting one.
    
    Then commit a2bb6d7d
    
     ("ipv4: include NLM_F_APPEND flag in append
    route notifications") started setting nlmsg_flags to NLM_F_APPEND if
    the route matched a preexisting one but was appended.
    
    In other cases (exclusive creation or prepend), nlmsg_flags is 0.
    
    This patch sets ->nlmsg_flags in all situations, preserving the
    semantic of the NLM_F_* bits:
    
      * NLM_F_CREATE: a new fib entry has been created for this route.
      * NLM_F_EXCL: no other fib entry existed for this route.
      * NLM_F_REPLACE: this route has overwritten a preexisting fib entry.
      * NLM_F_APPEND: the new fib entry was added after other entries for
        the same route.
    
    As a result, the possible flag combination can now be reported
    (iproute2's terminology into parentheses):
    
      * NLM_F_CREATE | NLM_F_EXCL: route didn't exist, exclusive creation
        ("add").
      * NLM_F_CREATE | NLM_F_APPEND: route did already exist, new route
        added after preexisting ones ("append").
      * NLM_F_CREATE: route did already exist, new route added before
        preexisting ones ("prepend").
      * NLM_F_REPLACE: route did already exist, new route replaced the
        first preexisting one ("change").
    
    Signed-off-by: default avatarGuillaume Nault <g.nault@alphalink.fr>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b93e1fa7