You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cloudstack.apache.org by Nux! <nu...@li.nux.ro> on 2019/05/01 13:59:57 UTC

Re: Cloudstack-agent gets the local IP address exception

I ran into a similar problem when I tried to allocate an additional IP on the agent machine (for other purposes), the hypervisor would then show up in the UI with this new IP and in "Alert" state.

I solved the problem by moving the IP out of br0 and on to the loopback interface.

--
Sent from the Delta quadrant using Borg technology!

Nux!
www.nux.ro

----- Original Message -----
> From: "li jerry" <di...@hotmail.com>
> To: "users" <us...@cloudstack.apache.org>, "dev" <de...@cloudstack.apache.org>
> Sent: Monday, 22 April, 2019 14:36:51
> Subject: Cloudstack-agent gets the local IP address exception

> HI All
> 
> 
> my kvm host [ip:10.226.16.11] virtualized a vip[10.226.16.10] via keepalived.
> 
> After I started the cloudstack-agent, I got vip[10.226.16.10] and I couldn't get
> the correct IP [10.226.16.11];
> 
> Can I have any way to get the cloudstack agent to get the correct IP address?
> 
> 
> 
> Cloudstack 4.11.2
> CentOS 7.5
> 
> 
> 
> br2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group
> default qlen 1000
>    link/ether ac:1f:6b:ba:96:ea brd ff:ff:ff:ff:ff:ff
>    inet 10.226.16.11/24 brd 10.226.16.255 scope global noprefixroute br2
>       valid_lft forever preferred_lft forever
>    inet 10.226.16.10/24 scope global secondary br2
>       valid_lft forever preferred_lft forever
>    inet6 fe80::1456:f9ff:fe06:6228/64 scope link
>        valid_lft forever preferred_lft forever

Re: Cloudstack-agent gets the local IP address exception

Posted by Nux! <nu...@li.nux.ro>.
Thanks Wei, I've opened a proper issue for this, hope your fix gets applied.

https://github.com/apache/cloudstack/issues/3311

--
Sent from the Delta quadrant using Borg technology!

Nux!
www.nux.ro

----- Original Message -----
> From: "Wei ZHOU" <us...@gmail.com>
> To: "dev" <de...@cloudstack.apache.org>
> Cc: "users" <us...@cloudstack.apache.org>
> Sent: Wednesday, 1 May, 2019 21:52:06
> Subject: Re: Cloudstack-agent gets the local IP address exception

> Hi Nux,
> 
> It is because NetworkInterface.getInterfaceAddresses() returns the ips in
> reverse order.
> For example, "ip addr show dev eth0"  shows the following ips
> inet X.X.X.X
> inet secondary Y.Y.Y.Y
> inet6 Z:Z:Z:Z:Z:Z
> 
> Then NetworkInterface.getInterfaceAddresses returns
> Z:Z:Z:Z:Z:Z
> Y.Y.Y.Y
> X.X.X.X
> 
> The following patch should work as you expect.
> 
> ```
> diff --git a/utils/src/main/java/com/cloud/utils/net/NetUtils.java
> b/utils/src/main/java/com/cloud/utils/net/NetUtils.java
> index afe73f1..afb0ce6 100644
> --- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java
> +++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java
> @@ -32,6 +32,7 @@ import java.net.SocketException;
> import java.net.URI;
> import java.net.UnknownHostException;
> import java.util.ArrayList;
> +import java.util.Collections;
> import java.util.Formatter;
> import java.util.List;
> import java.util.Random;
> @@ -394,10 +395,11 @@ public class NetUtils {
>     }
> 
>     public static String[] getNetworkParams(final NetworkInterface nic) {
> -        final List<InterfaceAddress> addrs = nic.getInterfaceAddresses();
> +        List<InterfaceAddress> addrs = nic.getInterfaceAddresses();
>         if (addrs == null || addrs.size() == 0) {
>             return null;
>         }
> +        Collections.reverse(addrs);
>         InterfaceAddress addr = null;
>         for (final InterfaceAddress iaddr : addrs) {
>             final InetAddress inet = iaddr.getAddress();
> ```
> 
> 
> -Wei
> 
> 
> 
> Nux! <nu...@li.nux.ro> 于2019年5月1日周三 下午4:00写道:
> 
>> I ran into a similar problem when I tried to allocate an additional IP on
>> the agent machine (for other purposes), the hypervisor would then show up
>> in the UI with this new IP and in "Alert" state.
>>
>> I solved the problem by moving the IP out of br0 and on to the loopback
>> interface.
>>
>> --
>> Sent from the Delta quadrant using Borg technology!
>>
>> Nux!
>> www.nux.ro
>>
>> ----- Original Message -----
>> > From: "li jerry" <di...@hotmail.com>
>> > To: "users" <us...@cloudstack.apache.org>, "dev" <
>> dev@cloudstack.apache.org>
>> > Sent: Monday, 22 April, 2019 14:36:51
>> > Subject: Cloudstack-agent gets the local IP address exception
>>
>> > HI All
>> >
>> >
>> > my kvm host [ip:10.226.16.11] virtualized a vip[10.226.16.10] via
>> keepalived.
>> >
>> > After I started the cloudstack-agent, I got vip[10.226.16.10] and I
>> couldn't get
>> > the correct IP [10.226.16.11];
>> >
>> > Can I have any way to get the cloudstack agent to get the correct IP
>> address?
>> >
>> >
>> >
>> > Cloudstack 4.11.2
>> > CentOS 7.5
>> >
>> >
>> >
>> > br2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
>> group
>> > default qlen 1000
>> >    link/ether ac:1f:6b:ba:96:ea brd ff:ff:ff:ff:ff:ff
>> >    inet 10.226.16.11/24 brd 10.226.16.255 scope global noprefixroute br2
>> >       valid_lft forever preferred_lft forever
>> >    inet 10.226.16.10/24 scope global secondary br2
>> >       valid_lft forever preferred_lft forever
>> >    inet6 fe80::1456:f9ff:fe06:6228/64 scope link
>> >        valid_lft forever preferred_lft forever

Re: Cloudstack-agent gets the local IP address exception

Posted by Nux! <nu...@li.nux.ro>.
Thanks Wei, I've opened a proper issue for this, hope your fix gets applied.

https://github.com/apache/cloudstack/issues/3311

--
Sent from the Delta quadrant using Borg technology!

Nux!
www.nux.ro

----- Original Message -----
> From: "Wei ZHOU" <us...@gmail.com>
> To: "dev" <de...@cloudstack.apache.org>
> Cc: "users" <us...@cloudstack.apache.org>
> Sent: Wednesday, 1 May, 2019 21:52:06
> Subject: Re: Cloudstack-agent gets the local IP address exception

> Hi Nux,
> 
> It is because NetworkInterface.getInterfaceAddresses() returns the ips in
> reverse order.
> For example, "ip addr show dev eth0"  shows the following ips
> inet X.X.X.X
> inet secondary Y.Y.Y.Y
> inet6 Z:Z:Z:Z:Z:Z
> 
> Then NetworkInterface.getInterfaceAddresses returns
> Z:Z:Z:Z:Z:Z
> Y.Y.Y.Y
> X.X.X.X
> 
> The following patch should work as you expect.
> 
> ```
> diff --git a/utils/src/main/java/com/cloud/utils/net/NetUtils.java
> b/utils/src/main/java/com/cloud/utils/net/NetUtils.java
> index afe73f1..afb0ce6 100644
> --- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java
> +++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java
> @@ -32,6 +32,7 @@ import java.net.SocketException;
> import java.net.URI;
> import java.net.UnknownHostException;
> import java.util.ArrayList;
> +import java.util.Collections;
> import java.util.Formatter;
> import java.util.List;
> import java.util.Random;
> @@ -394,10 +395,11 @@ public class NetUtils {
>     }
> 
>     public static String[] getNetworkParams(final NetworkInterface nic) {
> -        final List<InterfaceAddress> addrs = nic.getInterfaceAddresses();
> +        List<InterfaceAddress> addrs = nic.getInterfaceAddresses();
>         if (addrs == null || addrs.size() == 0) {
>             return null;
>         }
> +        Collections.reverse(addrs);
>         InterfaceAddress addr = null;
>         for (final InterfaceAddress iaddr : addrs) {
>             final InetAddress inet = iaddr.getAddress();
> ```
> 
> 
> -Wei
> 
> 
> 
> Nux! <nu...@li.nux.ro> 于2019年5月1日周三 下午4:00写道:
> 
>> I ran into a similar problem when I tried to allocate an additional IP on
>> the agent machine (for other purposes), the hypervisor would then show up
>> in the UI with this new IP and in "Alert" state.
>>
>> I solved the problem by moving the IP out of br0 and on to the loopback
>> interface.
>>
>> --
>> Sent from the Delta quadrant using Borg technology!
>>
>> Nux!
>> www.nux.ro
>>
>> ----- Original Message -----
>> > From: "li jerry" <di...@hotmail.com>
>> > To: "users" <us...@cloudstack.apache.org>, "dev" <
>> dev@cloudstack.apache.org>
>> > Sent: Monday, 22 April, 2019 14:36:51
>> > Subject: Cloudstack-agent gets the local IP address exception
>>
>> > HI All
>> >
>> >
>> > my kvm host [ip:10.226.16.11] virtualized a vip[10.226.16.10] via
>> keepalived.
>> >
>> > After I started the cloudstack-agent, I got vip[10.226.16.10] and I
>> couldn't get
>> > the correct IP [10.226.16.11];
>> >
>> > Can I have any way to get the cloudstack agent to get the correct IP
>> address?
>> >
>> >
>> >
>> > Cloudstack 4.11.2
>> > CentOS 7.5
>> >
>> >
>> >
>> > br2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
>> group
>> > default qlen 1000
>> >    link/ether ac:1f:6b:ba:96:ea brd ff:ff:ff:ff:ff:ff
>> >    inet 10.226.16.11/24 brd 10.226.16.255 scope global noprefixroute br2
>> >       valid_lft forever preferred_lft forever
>> >    inet 10.226.16.10/24 scope global secondary br2
>> >       valid_lft forever preferred_lft forever
>> >    inet6 fe80::1456:f9ff:fe06:6228/64 scope link
>> >        valid_lft forever preferred_lft forever

Re: Cloudstack-agent gets the local IP address exception

Posted by Wei ZHOU <us...@gmail.com>.
Hi Nux,

It is because NetworkInterface.getInterfaceAddresses() returns the ips in
reverse order.
For example, "ip addr show dev eth0"  shows the following ips
inet X.X.X.X
inet secondary Y.Y.Y.Y
inet6 Z:Z:Z:Z:Z:Z

Then NetworkInterface.getInterfaceAddresses returns
Z:Z:Z:Z:Z:Z
Y.Y.Y.Y
X.X.X.X

The following patch should work as you expect.

```
diff --git a/utils/src/main/java/com/cloud/utils/net/NetUtils.java
b/utils/src/main/java/com/cloud/utils/net/NetUtils.java
index afe73f1..afb0ce6 100644
--- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java
+++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java
@@ -32,6 +32,7 @@ import java.net.SocketException;
 import java.net.URI;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Formatter;
 import java.util.List;
 import java.util.Random;
@@ -394,10 +395,11 @@ public class NetUtils {
     }

     public static String[] getNetworkParams(final NetworkInterface nic) {
-        final List<InterfaceAddress> addrs = nic.getInterfaceAddresses();
+        List<InterfaceAddress> addrs = nic.getInterfaceAddresses();
         if (addrs == null || addrs.size() == 0) {
             return null;
         }
+        Collections.reverse(addrs);
         InterfaceAddress addr = null;
         for (final InterfaceAddress iaddr : addrs) {
             final InetAddress inet = iaddr.getAddress();
```


-Wei



Nux! <nu...@li.nux.ro> 于2019年5月1日周三 下午4:00写道:

> I ran into a similar problem when I tried to allocate an additional IP on
> the agent machine (for other purposes), the hypervisor would then show up
> in the UI with this new IP and in "Alert" state.
>
> I solved the problem by moving the IP out of br0 and on to the loopback
> interface.
>
> --
> Sent from the Delta quadrant using Borg technology!
>
> Nux!
> www.nux.ro
>
> ----- Original Message -----
> > From: "li jerry" <di...@hotmail.com>
> > To: "users" <us...@cloudstack.apache.org>, "dev" <
> dev@cloudstack.apache.org>
> > Sent: Monday, 22 April, 2019 14:36:51
> > Subject: Cloudstack-agent gets the local IP address exception
>
> > HI All
> >
> >
> > my kvm host [ip:10.226.16.11] virtualized a vip[10.226.16.10] via
> keepalived.
> >
> > After I started the cloudstack-agent, I got vip[10.226.16.10] and I
> couldn't get
> > the correct IP [10.226.16.11];
> >
> > Can I have any way to get the cloudstack agent to get the correct IP
> address?
> >
> >
> >
> > Cloudstack 4.11.2
> > CentOS 7.5
> >
> >
> >
> > br2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
> group
> > default qlen 1000
> >    link/ether ac:1f:6b:ba:96:ea brd ff:ff:ff:ff:ff:ff
> >    inet 10.226.16.11/24 brd 10.226.16.255 scope global noprefixroute br2
> >       valid_lft forever preferred_lft forever
> >    inet 10.226.16.10/24 scope global secondary br2
> >       valid_lft forever preferred_lft forever
> >    inet6 fe80::1456:f9ff:fe06:6228/64 scope link
> >        valid_lft forever preferred_lft forever
>

Re: Cloudstack-agent gets the local IP address exception

Posted by Wei ZHOU <us...@gmail.com>.
Hi Nux,

It is because NetworkInterface.getInterfaceAddresses() returns the ips in
reverse order.
For example, "ip addr show dev eth0"  shows the following ips
inet X.X.X.X
inet secondary Y.Y.Y.Y
inet6 Z:Z:Z:Z:Z:Z

Then NetworkInterface.getInterfaceAddresses returns
Z:Z:Z:Z:Z:Z
Y.Y.Y.Y
X.X.X.X

The following patch should work as you expect.

```
diff --git a/utils/src/main/java/com/cloud/utils/net/NetUtils.java
b/utils/src/main/java/com/cloud/utils/net/NetUtils.java
index afe73f1..afb0ce6 100644
--- a/utils/src/main/java/com/cloud/utils/net/NetUtils.java
+++ b/utils/src/main/java/com/cloud/utils/net/NetUtils.java
@@ -32,6 +32,7 @@ import java.net.SocketException;
 import java.net.URI;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Formatter;
 import java.util.List;
 import java.util.Random;
@@ -394,10 +395,11 @@ public class NetUtils {
     }

     public static String[] getNetworkParams(final NetworkInterface nic) {
-        final List<InterfaceAddress> addrs = nic.getInterfaceAddresses();
+        List<InterfaceAddress> addrs = nic.getInterfaceAddresses();
         if (addrs == null || addrs.size() == 0) {
             return null;
         }
+        Collections.reverse(addrs);
         InterfaceAddress addr = null;
         for (final InterfaceAddress iaddr : addrs) {
             final InetAddress inet = iaddr.getAddress();
```


-Wei



Nux! <nu...@li.nux.ro> 于2019年5月1日周三 下午4:00写道:

> I ran into a similar problem when I tried to allocate an additional IP on
> the agent machine (for other purposes), the hypervisor would then show up
> in the UI with this new IP and in "Alert" state.
>
> I solved the problem by moving the IP out of br0 and on to the loopback
> interface.
>
> --
> Sent from the Delta quadrant using Borg technology!
>
> Nux!
> www.nux.ro
>
> ----- Original Message -----
> > From: "li jerry" <di...@hotmail.com>
> > To: "users" <us...@cloudstack.apache.org>, "dev" <
> dev@cloudstack.apache.org>
> > Sent: Monday, 22 April, 2019 14:36:51
> > Subject: Cloudstack-agent gets the local IP address exception
>
> > HI All
> >
> >
> > my kvm host [ip:10.226.16.11] virtualized a vip[10.226.16.10] via
> keepalived.
> >
> > After I started the cloudstack-agent, I got vip[10.226.16.10] and I
> couldn't get
> > the correct IP [10.226.16.11];
> >
> > Can I have any way to get the cloudstack agent to get the correct IP
> address?
> >
> >
> >
> > Cloudstack 4.11.2
> > CentOS 7.5
> >
> >
> >
> > br2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
> group
> > default qlen 1000
> >    link/ether ac:1f:6b:ba:96:ea brd ff:ff:ff:ff:ff:ff
> >    inet 10.226.16.11/24 brd 10.226.16.255 scope global noprefixroute br2
> >       valid_lft forever preferred_lft forever
> >    inet 10.226.16.10/24 scope global secondary br2
> >       valid_lft forever preferred_lft forever
> >    inet6 fe80::1456:f9ff:fe06:6228/64 scope link
> >        valid_lft forever preferred_lft forever
>