Committed by
Gerrit Code Review
Introduce an easy way to check whether an IP address is multicast or not
Change-Id: I192a1b3e04b843fa0446d011cc98393a1950a5a9
Showing
4 changed files
with
46 additions
and
4 deletions
| ... | @@ -419,11 +419,11 @@ public class IgmpSnoop { | ... | @@ -419,11 +419,11 @@ public class IgmpSnoop { |
| 419 | 419 | ||
| 420 | 420 | ||
| 421 | if (ip.getProtocol() != IPv4.PROTOCOL_IGMP || | 421 | if (ip.getProtocol() != IPv4.PROTOCOL_IGMP || |
| 422 | - !IpPrefix.MULTICAST_RANGE.contains(gaddr)) { | 422 | + !IpPrefix.IPV4_MULTICAST_RANGE.contains(gaddr)) { |
| 423 | return; | 423 | return; |
| 424 | } | 424 | } |
| 425 | 425 | ||
| 426 | - if (IpPrefix.MULTICAST_RANGE.contains(saddr)) { | 426 | + if (IpPrefix.IPV4_MULTICAST_RANGE.contains(saddr)) { |
| 427 | log.debug("IGMP Picked up a packet with a multicast source address."); | 427 | log.debug("IGMP Picked up a packet with a multicast source address."); |
| 428 | return; | 428 | return; |
| 429 | } | 429 | } | ... | ... |
| ... | @@ -314,6 +314,17 @@ public class IpAddress implements Comparable<IpAddress> { | ... | @@ -314,6 +314,17 @@ public class IpAddress implements Comparable<IpAddress> { |
| 314 | return isIp4() && octets[0] == (byte) 169; | 314 | return isIp4() && octets[0] == (byte) 169; |
| 315 | } | 315 | } |
| 316 | 316 | ||
| 317 | + /** | ||
| 318 | + * Check if this IP address is a multicast address. | ||
| 319 | + * | ||
| 320 | + * @return true if this address a multicast address | ||
| 321 | + */ | ||
| 322 | + public boolean isMulticast() { | ||
| 323 | + return isIp4() ? | ||
| 324 | + Ip4Prefix.IPV4_MULTICAST_RANGE.contains(this.getIp4Address()) : | ||
| 325 | + Ip6Prefix.IPV6_MULTICAST_RANGE.contains(this.getIp6Address()); | ||
| 326 | + } | ||
| 327 | + | ||
| 317 | @Override | 328 | @Override |
| 318 | public int compareTo(IpAddress o) { | 329 | public int compareTo(IpAddress o) { |
| 319 | // Compare first the version | 330 | // Compare first the version | ... | ... |
| ... | @@ -27,11 +27,27 @@ import java.util.Objects; | ... | @@ -27,11 +27,27 @@ import java.util.Objects; |
| 27 | * </p> | 27 | * </p> |
| 28 | */ | 28 | */ |
| 29 | public class IpPrefix { | 29 | public class IpPrefix { |
| 30 | - // Maximum network mask length | 30 | + /** |
| 31 | + * Longest IPv4 network prefix. | ||
| 32 | + */ | ||
| 31 | public static final int MAX_INET_MASK_LENGTH = IpAddress.INET_BIT_LENGTH; | 33 | public static final int MAX_INET_MASK_LENGTH = IpAddress.INET_BIT_LENGTH; |
| 34 | + /** | ||
| 35 | + * Longest IPv6 network prefix. | ||
| 36 | + */ | ||
| 32 | public static final int MAX_INET6_MASK_LENGTH = IpAddress.INET6_BIT_LENGTH; | 37 | public static final int MAX_INET6_MASK_LENGTH = IpAddress.INET6_BIT_LENGTH; |
| 33 | - | 38 | + /** |
| 39 | + * An IpPrefix that contains all IPv4 multicast addresses. | ||
| 40 | + */ | ||
| 41 | + @Deprecated | ||
| 34 | public static final IpPrefix MULTICAST_RANGE = IpPrefix.valueOf("224.0.0.0/4"); | 42 | public static final IpPrefix MULTICAST_RANGE = IpPrefix.valueOf("224.0.0.0/4"); |
| 43 | + /** | ||
| 44 | + * An IpPrefix that contains all IPv4 multicast addresses. | ||
| 45 | + */ | ||
| 46 | + public static final IpPrefix IPV4_MULTICAST_RANGE = IpPrefix.valueOf("224.0.0.0/4"); | ||
| 47 | + /** | ||
| 48 | + * An IpPrefix that contains all IPv6 multicast addresses. | ||
| 49 | + */ | ||
| 50 | + public static final IpPrefix IPV6_MULTICAST_RANGE = IpPrefix.valueOf("ff00::/8"); | ||
| 35 | 51 | ||
| 36 | private final IpAddress address; | 52 | private final IpAddress address; |
| 37 | private final short prefixLength; | 53 | private final short prefixLength; | ... | ... |
| ... | @@ -769,6 +769,21 @@ public class IpAddressTest { | ... | @@ -769,6 +769,21 @@ public class IpAddressTest { |
| 769 | } | 769 | } |
| 770 | 770 | ||
| 771 | /** | 771 | /** |
| 772 | + * Tests if the address is a multicast address. | ||
| 773 | + */ | ||
| 774 | + @Test | ||
| 775 | + public void testIsMulticast() { | ||
| 776 | + IpAddress v4Unicast = IpAddress.valueOf("10.0.0.1"); | ||
| 777 | + IpAddress v4Multicast = IpAddress.valueOf("224.0.0.1"); | ||
| 778 | + IpAddress v6Unicast = IpAddress.valueOf("1000::1"); | ||
| 779 | + IpAddress v6Multicast = IpAddress.valueOf("ff02::1"); | ||
| 780 | + assertFalse(v4Unicast.isMulticast()); | ||
| 781 | + assertTrue(v4Multicast.isMulticast()); | ||
| 782 | + assertFalse(v6Unicast.isMulticast()); | ||
| 783 | + assertTrue(v6Multicast.isMulticast()); | ||
| 784 | + } | ||
| 785 | + | ||
| 786 | + /** | ||
| 772 | * Tests comparison of {@link IpAddress} for IPv4. | 787 | * Tests comparison of {@link IpAddress} for IPv4. |
| 773 | */ | 788 | */ |
| 774 | @Test | 789 | @Test | ... | ... |
-
Please register or login to post a comment