jmeter-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From s...@apache.org
Subject svn commit: r1511681 - in /jmeter/trunk: src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java xdocs/usermanual/component_reference.xml
Date Thu, 08 Aug 2013 10:39:15 GMT
Author: sebb
Date: Thu Aug  8 10:39:14 2013
New Revision: 1511681

URL: http://svn.apache.org/r1511681
Log:
Support device in addition to source IP address
Support choice of IPv4 or IPv6; report error if selected interface is not found
Bugzilla Id: 54874

Modified:
    jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java
    jmeter/trunk/xdocs/usermanual/component_reference.xml

Modified: jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java?rev=1511681&r1=1511680&r2=1511681&view=diff
==============================================================================
--- jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java
(original)
+++ jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPAbstractImpl.java
Thu Aug  8 10:39:14 2013
@@ -21,13 +21,14 @@ package org.apache.jmeter.protocol.http.
 import java.io.BufferedInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.Inet4Address;
+import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.net.InterfaceAddress;
 import java.net.NetworkInterface;
 import java.net.SocketException;
 import java.net.URL;
 import java.net.UnknownHostException;
-import java.util.List;
 
 import org.apache.jmeter.config.Arguments;
 import org.apache.jmeter.protocol.http.control.AuthManager;
@@ -144,7 +145,9 @@ public abstract class HTTPAbstractImpl i
      * The prefix used to distiguish a device name from a host name.
      * Host names cannot start with "/". 
      */
-    private static final String DEVICE_PREFIX = "/dev/";
+    private static final String DEVICE_PREFIX = "/";
+    private static final String IPV4 = "ipv4/";
+    private static final String IPV6 = "ipv6/";
 
     /**
      * Gets the IP source address (IP spoofing) if one has been provided.
@@ -157,19 +160,32 @@ public abstract class HTTPAbstractImpl i
         final String ipSource = getIpSource();
         if (ipSource.length() > 0) {
             if (ipSource.startsWith(DEVICE_PREFIX)) {
-                final String device = ipSource.substring(DEVICE_PREFIX.length());
-                NetworkInterface net = NetworkInterface.getByName(device);
+                String interfaceName = ipSource.substring(DEVICE_PREFIX.length());
+                final Class<? extends InetAddress> ipClass;
+                if (interfaceName.startsWith(IPV4)) {
+                    interfaceName = interfaceName.substring(IPV4.length());
+                    ipClass = Inet4Address.class;
+                } else if (interfaceName.startsWith(IPV6)) {
+                    interfaceName = interfaceName.substring(IPV6.length());             
      
+                    ipClass = Inet6Address.class;
+                } else {
+                    ipClass = InetAddress.class;                    
+                }
+                NetworkInterface net = NetworkInterface.getByName(interfaceName);
                 if (net != null) {
-                    List<InterfaceAddress> netAds = net.getInterfaceAddresses();
-                    if (netAds.size() > 0) {
-                        return netAds.get(0).getAddress();
+                    for (InterfaceAddress ia : net.getInterfaceAddresses()) {
+                        final InetAddress inetAddr = ia.getAddress();
+                        if (ipClass.isInstance(inetAddr)) {
+                            return inetAddr;
+                        }
                     }
+                    throw new UnknownHostException("Interface " + interfaceName + " does
not have address of type " + ipClass.getSimpleName());
                 }
-                return null;
+                throw new UnknownHostException("Cannot find interface " + interfaceName);
             }
             return InetAddress.getByName(ipSource);
         }
-        return null;
+        return null; // did not want to spoof the IP address
     }
 
     /**

Modified: jmeter/trunk/xdocs/usermanual/component_reference.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/usermanual/component_reference.xml?rev=1511681&r1=1511680&r2=1511681&view=diff
==============================================================================
--- jmeter/trunk/xdocs/usermanual/component_reference.xml (original)
+++ jmeter/trunk/xdocs/usermanual/component_reference.xml Thu Aug  8 10:39:14 2013
@@ -323,9 +323,11 @@ and send HTTP/HTTPS requests for all ima
         [Only for HTTP Request HTTPClient] 
         Override the default local IP address for this sample.
         The JMeter host must have multiple IP addresses (i.e. IP aliases or network interfaces).
-        The value can be a host name, IP address, or a network interface device such as "eth0"
or "le0".
-        In order to distinguish these from host names, the interface name must be entered
with the prefix "/dev/",
-        for example "/dev/eth0" or "/dev/le0".
+        The value can be a host name, IP address, or a network interface device such as "eth0"
or "lo0".
+        In order to distinguish these from host names, the interface name must be entered
with the prefix "/",
+        for example "/eth0" or "/lo0". This will pick the first available address for that
interface which
+        this may be either IPV4 or IPV6. To select a specific IP protocol version, prefix
the interface name
+        with "/ipv4/" or "/ipv6/", for example "/ipv4/eth0" or "/ipv6/eth0"
         If the property <b>httpclient.localaddress</b> is defined, that is used
for all HttpClient requests.
         </property>
 </properties>



Mime
View raw message