On 01/08 12:14, Otavio Salvador wrote:
> On Thu, Jan 8, 2015 at 6:43 AM, Maciej Borzecki
> <maciej.borze...@open-rnd.pl> wrote:
> > Cherry-picking a patch that fixes gateway route handling in
> > systemd-networkd. The patch adds a source IP to the automatically added 
> > gateway
> > static route, this thus allowing for proper communication in case a static 
> > or
> > IPv4 LL address is used alongside a dynamically obtained one.
> >
> > (From systemd rev: 46b0c76e2c355c0d0cc4792abb98cde07b28bc5)
> >
> > Signed-off-by: Maciej Borzecki <maciej.borze...@open-rnd.pl>
> > Signed-off-by: Maciek Borzecki <maciek.borze...@gmail.com>
> > ---
> >  ...d-preferred-source-to-dhcp4-gateway-route.patch | 109 
> > +++++++++++++++++++++
> >  meta/recipes-core/systemd/systemd_216.bb           |   1 +
> >  2 files changed, 110 insertions(+)
> >  create mode 100644 
> > meta/recipes-core/systemd/systemd/0001-networkd-add-preferred-source-to-dhcp4-gateway-route.patch
> >
> > diff --git 
> > a/meta/recipes-core/systemd/systemd/0001-networkd-add-preferred-source-to-dhcp4-gateway-route.patch
> >  
> > b/meta/recipes-core/systemd/systemd/0001-networkd-add-preferred-source-to-dhcp4-gateway-route.patch
> > new file mode 100644
> > index 0000000..1a9e8ee
> > --- /dev/null
> > +++ 
> > b/meta/recipes-core/systemd/systemd/0001-networkd-add-preferred-source-to-dhcp4-gateway-route.patch
> > @@ -0,0 +1,109 @@
> > +From 46b0c76e2c355c0d0cc4792abb98cde07b28bc53 Mon Sep 17 00:00:00 2001
> > +From: Emil Renner Berthing <syst...@esmil.dk>
> > +Date: Fri, 5 Sep 2014 11:56:02 +0200
> > +Subject: [PATCH] networkd: add preferred source to dhcp4 gateway route
> > +
> > +This makes DHCPv4 and IPv4LL coexist peacefully.
> > +
> > +[tomegun: apply to both the dhcp routes, use in_addr_is_null() rather than 
> > a
> > +separate variable to indicate when prefsrc should be applied]
>
> Missing Upstream-Status field.

I'm guessing

Upstream-Status: backport

is the correct stanza?

>
> > +---
> > + src/network/networkd-dhcp4.c | 11 +++++++++++
> > + src/network/networkd-route.c | 22 ++++++++++++++++++++++
> > + src/network/networkd.h       |  1 +
> > + 3 files changed, 34 insertions(+)
> > +
> > +diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c
> > +index 
> > 5e4ff2b80b796ea33de24b9c80076f408f6db63d..b87fa730826daba3650477c430495523ab09054d
> >  100644
> > +--- a/src/network/networkd-dhcp4.c
> > ++++ b/src/network/networkd-dhcp4.c
> > +@@ -67,9 +67,18 @@ static int link_set_dhcp_routes(Link *link) {
> > +                 return r;
> > +         }
> > +         if (r >= 0) {
> > ++                struct in_addr address;
> > +                 _cleanup_route_free_ Route *route = NULL;
> > +                 _cleanup_route_free_ Route *route_gw = NULL;
> > +
> > ++                r = sd_dhcp_lease_get_address(link->dhcp_lease, &address);
> > ++                if (r < 0) {
> > ++                        log_warning_link(link,
> > ++                                         "DHCP error: could not get 
> > address: %s",
> > ++                                         strerror(-r));
> > ++                        return r;
> > ++                }
> > ++
> > +                 r = route_new_dynamic(&route, RTPROT_DHCP);
> > +                 if (r < 0) {
> > +                         log_error_link(link,
> > +@@ -92,6 +101,7 @@ static int link_set_dhcp_routes(Link *link) {
> > +                 route_gw->family = AF_INET;
> > +                 route_gw->dst_addr.in = gateway;
> > +                 route_gw->dst_prefixlen = 32;
> > ++                route_gw->prefsrc_addr.in = address;
> > +                 route_gw->scope = RT_SCOPE_LINK;
> > +                 route_gw->metrics = DHCP_ROUTE_METRIC;
> > +
> > +@@ -107,6 +117,7 @@ static int link_set_dhcp_routes(Link *link) {
> > +
> > +                 route->family = AF_INET;
> > +                 route->in_addr.in = gateway;
> > ++                route->prefsrc_addr.in = address;
> > +                 route->metrics = DHCP_ROUTE_METRIC;
> > +
> > +                 r = route_configure(route, link, &dhcp4_route_handler);
> > +diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c
> > +index 
> > aead4fbb9e8d47df66c2c892132d9c78e5650a68..10d8cd902a8c16147eb52bb4aa0d01781054ed1b
> >  100644
> > +--- a/src/network/networkd-route.c
> > ++++ b/src/network/networkd-route.c
> > +@@ -144,6 +144,17 @@ int route_drop(Route *route, Link *link,
> > +                 }
> > +         }
> > +
> > ++        if (!in_addr_is_null(route->family, &route->prefsrc_addr)) {
> > ++                if (route->family == AF_INET)
> > ++                        r = sd_rtnl_message_append_in_addr(req, 
> > RTA_PREFSRC, &route->prefsrc_addr.in);
> > ++                else if (route->family == AF_INET6)
> > ++                        r = sd_rtnl_message_append_in6_addr(req, 
> > RTA_PREFSRC, &route->prefsrc_addr.in6);
> > ++                if (r < 0) {
> > ++                        log_error("Could not append RTA_PREFSRC 
> > attribute: %s", strerror(-r));
> > ++                        return r;
> > ++                }
> > ++        }
> > ++
> > +         r = sd_rtnl_message_route_set_scope(req, route->scope);
> > +         if (r < 0) {
> > +                 log_error("Could not set scope: %s", strerror(-r));
> > +@@ -218,6 +229,17 @@ int route_configure(Route *route, Link *link,
> > +                 }
> > +         }
> > +
> > ++        if (!in_addr_is_null(route->family, &route->prefsrc_addr)) {
> > ++                if (route->family == AF_INET)
> > ++                        r = sd_rtnl_message_append_in_addr(req, 
> > RTA_PREFSRC, &route->prefsrc_addr.in);
> > ++                else if (route->family == AF_INET6)
> > ++                        r = sd_rtnl_message_append_in6_addr(req, 
> > RTA_PREFSRC, &route->prefsrc_addr.in6);
> > ++                if (r < 0) {
> > ++                        log_error("Could not append RTA_PREFSRC 
> > attribute: %s", strerror(-r));
> > ++                        return r;
> > ++                }
> > ++        }
> > ++
> > +         r = sd_rtnl_message_route_set_scope(req, route->scope);
> > +         if (r < 0) {
> > +                 log_error("Could not set scope: %s", strerror(-r));
> > +diff --git a/src/network/networkd.h b/src/network/networkd.h
> > +index 
> > ab5df1aa3c57952dc9549f2da85332dd966771f4..c6e6b22c383e04413fffed24031410c2695dc190
> >  100644
> > +--- a/src/network/networkd.h
> > ++++ b/src/network/networkd.h
> > +@@ -150,6 +150,7 @@ struct Route {
> > +
> > +         union in_addr_union in_addr;
> > +         union in_addr_union dst_addr;
> > ++        union in_addr_union prefsrc_addr;
> > +
> > +         LIST_FIELDS(Route, routes);
> > + };
> > +--
> > +1.9.3
> > +
> > diff --git a/meta/recipes-core/systemd/systemd_216.bb 
> > b/meta/recipes-core/systemd/systemd_216.bb
> > index 536b7be..d82fd7c 100644
> > --- a/meta/recipes-core/systemd/systemd_216.bb
> > +++ b/meta/recipes-core/systemd/systemd_216.bb
> > @@ -34,6 +34,7 @@ SRC_URI = 
> > "git://anongit.freedesktop.org/systemd/systemd;branch=master;protocol=
> >             file://0001-missing.h-add-fake-__NR_memfd_create-for-MIPS.patch 
> > \
> >             file://0001-Make-root-s-home-directory-configurable.patch \
> >             file://0001-systemd-user-avoid-using-system-auth.patch \
> > +           
> > file://0001-networkd-add-preferred-source-to-dhcp4-gateway-route.patch \
> >             file://touchscreen.rules \
> >             file://00-create-volatile.conf \
> >             file://init \
> > --
> > 1.9.3
> >
>
>
>
> --
> Otavio Salvador                             O.S. Systems
> http://www.ossystems.com.br        http://code.ossystems.com.br
> Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750

--
Maciej Borzęcki
Senior Software Developer at Open-RnD Sp. z o.o., Poland
www.open-rnd.pl
mobile: +48 889 117 365, fax: +48 42 657 9079


Niniejsza wiadomość wraz z załącznikami może
zawierać chronione prawem lub poufne informacje i została
wysłana wyłącznie do wiadomości i użytku osób, do których
została zaadresowana. Jeśli wiadomość została otrzymana
przypadkowo zabrania się jej kopiowania lub rozsyłania do osób
trzecich. W takim przypadku uprasza się o natychmiastowe
zniszczenie wiadomości oraz poinformowanie nadawcy o
zaistniałej sytuacji za pomocą wiadomości zwrotnej.
Dziękujemy.

This message, including any attachments hereto,
may contain privileged or confidential information and is sent
solely for the attention and use of the intended addressee(s).
If you are not an intended addressee, you may neither use this
message nor copy or deliver it to anyone. In such case, you
should immediately destroy this message and kindly notify the
sender by reply email. Thank you.
-- 
_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to