icmp_errors_use_inbound_ifaddr - BOOLEAN
 
-       If zero, icmp error messages are sent with the primary address of
-       the exiting interface.
+       If zero, icmp error messages except redirects are sent with the primary
+       address of the exiting interface.
 
        If non-zero, the message will be sent with the primary address of
        the interface that received the packet that caused the icmp error.
        then the primary address of the first non-loopback interface that
        has one will be used regardless of this setting.
 
+       The source address selection of icmp redirect messages is controlled by
+       icmp_errors_use_inbound_ifaddr.
        Default: 0
 
+icmp_redirects_use_orig_daddr - BOOLEAN
+
+       If zero, icmp redirect messages are sent using the address specified for
+       other icmp errors by icmp_errors_use_inbound_ifaddr.
+
+       If non-zero, the message will be sent with the destination address of
+       the packet that caused the icmp redirect.
+       This behaviour is the preferred one on VRRP routers (see RFC 5798
+       section 8.1.1).
+
+       Default: 0
+
+
 igmp_max_memberships - INTEGER
        Change the maximum number of multicast groups we can subscribe to.
        Default: 20
 
        int sysctl_icmp_ratelimit;
        int sysctl_icmp_ratemask;
        int sysctl_icmp_errors_use_inbound_ifaddr;
+       int sysctl_icmp_redirects_use_orig_daddr;
 
        struct local_ports ip_local_ports;
 
 
         */
 
        saddr = iph->daddr;
-       if (!(rt->rt_flags & RTCF_LOCAL)) {
+       if (!((type == ICMP_REDIRECT) &&
+             net->ipv4.sysctl_icmp_redirects_use_orig_daddr) &&
+           !(rt->rt_flags & RTCF_LOCAL)) {
                struct net_device *dev = NULL;
 
                rcu_read_lock();
        net->ipv4.sysctl_icmp_ratemask = 0x1818;
        net->ipv4.sysctl_icmp_errors_use_inbound_ifaddr = 0;
 
+       /* Control paramerer - use the daddr of originating packets as saddr
+        * in redirect messages?
+        */
+       net->ipv4.sysctl_icmp_redirects_use_orig_daddr = 0;
+
        return 0;
 
 fail:
 
                .mode           = 0644,
                .proc_handler   = proc_dointvec
        },
+       {
+               .procname       = "icmp_redirects_use_orig_daddr",
+               .data           = &init_net.ipv4.sysctl_icmp_redirects_use_orig_daddr,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec
+       },
        {
                .procname       = "icmp_ratelimit",
                .data           = &init_net.ipv4.sysctl_icmp_ratelimit,