diff --git a/service-t/src/com/android/server/ethernet/EthernetServiceImpl.java b/service-t/src/com/android/server/ethernet/EthernetServiceImpl.java
index c1c6d3a..fed500f 100644
--- a/service-t/src/com/android/server/ethernet/EthernetServiceImpl.java
+++ b/service-t/src/com/android/server/ethernet/EthernetServiceImpl.java
@@ -239,7 +239,7 @@
         // TODO: validate that iface is listed in overlay config_ethernet_interfaces
 
         mTracker.updateConfiguration(
-                iface, request.getIpConfig(), request.getNetworkCapabilities(), listener);
+                iface, request.getIpConfiguration(), request.getNetworkCapabilities(), listener);
     }
 
     @Override
diff --git a/service-t/src/com/android/server/ethernet/EthernetTracker.java b/service-t/src/com/android/server/ethernet/EthernetTracker.java
index 2571fe6..794b5d1 100644
--- a/service-t/src/com/android/server/ethernet/EthernetTracker.java
+++ b/service-t/src/com/android/server/ethernet/EthernetTracker.java
@@ -229,18 +229,18 @@
 
     @VisibleForTesting(visibility = PACKAGE)
     protected void updateConfiguration(@NonNull final String iface,
-            @NonNull final StaticIpConfiguration staticIpConfig,
+            @NonNull final IpConfiguration ipConfig,
             @NonNull final NetworkCapabilities capabilities,
             @Nullable final IEthernetNetworkManagementListener listener) {
         if (DBG) {
             Log.i(TAG, "updateConfiguration, iface: " + iface + ", capabilities: " + capabilities
-                    + ", staticIpConfig: " + staticIpConfig);
+                    + ", ipConfig: " + ipConfig);
         }
-        final IpConfiguration ipConfig = createIpConfiguration(staticIpConfig);
-        writeIpConfiguration(iface, ipConfig);
+        final IpConfiguration localIpConfig = new IpConfiguration(ipConfig);
+        writeIpConfiguration(iface, localIpConfig);
         mNetworkCapabilities.put(iface, capabilities);
         mHandler.post(() -> {
-            mFactory.updateInterface(iface, ipConfig, capabilities, listener);
+            mFactory.updateInterface(iface, localIpConfig, capabilities, listener);
             broadcastInterfaceStateChange(iface);
         });
     }
@@ -715,13 +715,9 @@
         return createIpConfiguration(staticIpConfigBuilder.build());
     }
 
-    static IpConfiguration createIpConfiguration(
+    private static IpConfiguration createIpConfiguration(
             @NonNull final StaticIpConfiguration staticIpConfig) {
-        final IpConfiguration ret = new IpConfiguration();
-        ret.setIpAssignment(IpAssignment.STATIC);
-        ret.setProxySettings(ProxySettings.NONE);
-        ret.setStaticIpConfiguration(staticIpConfig);
-        return ret;
+        return new IpConfiguration.Builder().setStaticIpConfiguration(staticIpConfig).build();
     }
 
     private IpConfiguration getOrCreateIpConfiguration(String iface) {
diff --git a/tests/ethernet/java/com/android/server/ethernet/EthernetServiceImplTest.java b/tests/ethernet/java/com/android/server/ethernet/EthernetServiceImplTest.java
index 0ac28c4..2829753 100644
--- a/tests/ethernet/java/com/android/server/ethernet/EthernetServiceImplTest.java
+++ b/tests/ethernet/java/com/android/server/ethernet/EthernetServiceImplTest.java
@@ -32,7 +32,6 @@
 import android.net.EthernetNetworkUpdateRequest;
 import android.net.IpConfiguration;
 import android.net.NetworkCapabilities;
-import android.net.StaticIpConfiguration;
 import android.os.Handler;
 
 import androidx.test.filters.SmallTest;
@@ -49,8 +48,10 @@
 public class EthernetServiceImplTest {
     private static final String TEST_IFACE = "test123";
     private static final EthernetNetworkUpdateRequest UPDATE_REQUEST =
-            new EthernetNetworkUpdateRequest(
-                    new StaticIpConfiguration(), new NetworkCapabilities.Builder().build());
+            new EthernetNetworkUpdateRequest.Builder()
+                    .setIpConfiguration(new IpConfiguration())
+                    .setNetworkCapabilities(new NetworkCapabilities.Builder().build())
+                    .build();
     private static final IEthernetNetworkManagementListener NULL_LISTENER = null;
     private EthernetServiceImpl mEthernetServiceImpl;
     @Mock private Context mContext;
@@ -214,7 +215,7 @@
         mEthernetServiceImpl.updateConfiguration(TEST_IFACE, UPDATE_REQUEST, NULL_LISTENER);
         verify(mEthernetTracker).updateConfiguration(
                 eq(TEST_IFACE),
-                eq(UPDATE_REQUEST.getIpConfig()),
+                eq(UPDATE_REQUEST.getIpConfiguration()),
                 eq(UPDATE_REQUEST.getNetworkCapabilities()), eq(NULL_LISTENER));
     }
 
diff --git a/tests/ethernet/java/com/android/server/ethernet/EthernetTrackerTest.java b/tests/ethernet/java/com/android/server/ethernet/EthernetTrackerTest.java
index 14f34d0..e1a1a8e 100644
--- a/tests/ethernet/java/com/android/server/ethernet/EthernetTrackerTest.java
+++ b/tests/ethernet/java/com/android/server/ethernet/EthernetTrackerTest.java
@@ -324,15 +324,18 @@
     @Test
     public void testUpdateConfiguration() {
         final NetworkCapabilities capabilities = new NetworkCapabilities.Builder().build();
-        final StaticIpConfiguration staticIpConfig = new StaticIpConfiguration();
+        final LinkAddress linkAddr = new LinkAddress("192.0.2.2/25");
+        final StaticIpConfiguration staticIpConfig =
+                new StaticIpConfiguration.Builder().setIpAddress(linkAddr).build();
+        final IpConfiguration ipConfig =
+                new IpConfiguration.Builder().setStaticIpConfiguration(staticIpConfig).build();
         final IEthernetNetworkManagementListener listener = null;
 
-        tracker.updateConfiguration(TEST_IFACE, staticIpConfig, capabilities, listener);
+        tracker.updateConfiguration(TEST_IFACE, ipConfig, capabilities, listener);
         waitForIdle();
 
         verify(mFactory).updateInterface(
-                eq(TEST_IFACE), eq(EthernetTracker.createIpConfiguration(staticIpConfig)),
-                eq(capabilities), eq(listener));
+                eq(TEST_IFACE), eq(ipConfig), eq(capabilities), eq(listener));
     }
 
     @Test
