diff --git a/public/fidl/fuchsia.netstack/netstack.fidl b/public/fidl/fuchsia.netstack/netstack.fidl
index 1b582f4..cf90174 100644
--- a/public/fidl/fuchsia.netstack/netstack.fidl
+++ b/public/fidl/fuchsia.netstack/netstack.fidl
@@ -132,66 +132,66 @@
     // Finds the port number from a given service name and protocol. [service] can be a
     // number like "42", or a service name like "http". If [protocol] is UNSPECIFIED,
     // the service is checked for TCP first, then UDP.
-    2: GetPortForService(string service, Protocol protocol) -> (uint16 port);
+    GetPortForService(string service, Protocol protocol) -> (uint16 port);
 
     // Finds the IP address for a given host name and port. This may issue network
     // requests via DNS to look up domain names. E.g.
     // GetAddress("example.com", 80) -> [{142.42.42.1}]
-    3: GetAddress(string address, uint16 port) -> (vector<SocketAddress> addresses, NetErr err);
+    GetAddress(string address, uint16 port) -> (vector<SocketAddress> addresses, NetErr err);
 
     // Returns the list of registered network interfaces.
-    4: GetInterfaces() -> (vector<NetInterface> interfaces);
+    GetInterfaces() -> (vector<NetInterface> interfaces);
 
     // DEPRECATED: see devicesettings.fidl
     // Returns the netstack's node name.
     // 5: GetNodeName() -> (string node_name);
 
     // Don't use this for read-modify-write.  Use StartRouteTableTransaction instead.
-    5: GetRouteTable() -> (vector<RouteTableEntry> rt);
+    GetRouteTable() -> (vector<RouteTableEntry> rt);
 
     // TODO (porce): Separate interfaces.
-    6: GetStats(uint32 nicid) -> (NetInterfaceStats stats);
+    GetStats(uint32 nicid) -> (NetInterfaceStats stats);
 
     // Get stats for all NICs on the stack.
-    7: GetAggregateStats() -> (AggregateStats stats);
+    GetAggregateStats() -> (AggregateStats stats);
 
     // Sets the status (up or down) for the interface with the given nicid.
-    8: SetInterfaceStatus(uint32 nicid, bool enabled);
+    SetInterfaceStatus(uint32 nicid, bool enabled);
 
     // DEPRECATED: Use StartRouteTableTransaction and SetRouteTable from there.
     // 9: SetRouteTable(vector<RouteTableEntry> rt);
 
     // Sets the address for the interface with the given nicid.
     // Masks off addr.PrefixLen bits from addr.Addr to set the subnet.
-    10: SetInterfaceAddress(uint32 nicid, fuchsia.net.IpAddress addr, uint8 prefixLen) -> (NetErr result);
+    SetInterfaceAddress(uint32 nicid, fuchsia.net.IpAddress addr, uint8 prefixLen) -> (NetErr result);
 
     // Removes the address for the interface with the given nicid.
     // Masks off addr.PrefixLen bits from addr.Addr to set the subnet.
-    15: RemoveInterfaceAddress(uint32 nicid, fuchsia.net.IpAddress addr, uint8 prefixLen) -> (NetErr result);
+    RemoveInterfaceAddress(uint32 nicid, fuchsia.net.IpAddress addr, uint8 prefixLen) -> (NetErr result);
 
-    11: SetDhcpClientStatus(uint32 nicid, bool enabled) -> (NetErr result);
+    SetDhcpClientStatus(uint32 nicid, bool enabled) -> (NetErr result);
 
-    12: BridgeInterfaces(vector<uint32> nicids) -> (NetErr result);
+    BridgeInterfaces(vector<uint32> nicids) -> (NetErr result);
 
     // TODO(NET-1263): remove once we can use the ResolverAdmin interface
-    16: SetNameServers(vector<fuchsia.net.IpAddress> servers);
+    SetNameServers(vector<fuchsia.net.IpAddress> servers);
 
-    17: AddEthernetDevice(string topological_path, InterfaceConfig interfaceConfig, zircon.ethernet.Device device);
+    AddEthernetDevice(string topological_path, InterfaceConfig interfaceConfig, zircon.ethernet.Device device);
 
     // Begin a route transaction for atomically getting and setting the route
     // table.  Returns true if a transaction can be started.
-    18: StartRouteTableTransaction(request<RouteTableTransaction> routeTableTransaction) -> (zx.status status);
+    StartRouteTableTransaction(request<RouteTableTransaction> routeTableTransaction) -> (zx.status status);
 
-    0x1000: -> OnInterfacesChanged(vector<NetInterface> interfaces);
+    -> OnInterfacesChanged(vector<NetInterface> interfaces);
 };
 
 // When Commit is called, the most recent SetRouteTable will be
 // committed to the route tables.  Commit may be called multiple times.
 [Discoverable]
 interface RouteTableTransaction {
-    1: GetRouteTable() -> (vector<RouteTableEntry> rt);
+    GetRouteTable() -> (vector<RouteTableEntry> rt);
 
-    2: SetRouteTable(vector<RouteTableEntry> rt);
+    SetRouteTable(vector<RouteTableEntry> rt);
 
-    3: Commit() -> (zx.status status);
+    Commit() -> (zx.status status);
 };
