| Index: webrtc/call/call.cc | 
| diff --git a/webrtc/call/call.cc b/webrtc/call/call.cc | 
| index 91c27c80ad99f16805b80ad45b2916c60812748d..1572720248de200d4606b0fba140d0fb91874b74 100644 | 
| --- a/webrtc/call/call.cc | 
| +++ b/webrtc/call/call.cc | 
| @@ -89,6 +89,9 @@ class Call : public webrtc::Call, public PacketReceiver, | 
|  | 
| void SignalChannelNetworkState(MediaType media, NetworkState state) override; | 
|  | 
| +  void OnNetworkRouteChanged(const std::string& transport_name, | 
| +                             const rtc::NetworkRoute& network_route) override; | 
| + | 
| void OnSentPacket(const rtc::SentPacket& sent_packet) override; | 
|  | 
| // Implements BitrateObserver. | 
| @@ -102,7 +105,6 @@ class Call : public webrtc::Call, public PacketReceiver, | 
| const uint8_t* packet, | 
| size_t length, | 
| const PacketTime& packet_time); | 
| - | 
| void ConfigureSync(const std::string& sync_group) | 
| EXCLUSIVE_LOCKS_REQUIRED(receive_crit_); | 
|  | 
| @@ -170,6 +172,8 @@ class Call : public webrtc::Call, public PacketReceiver, | 
| int64_t pacer_bitrate_sum_kbits_ GUARDED_BY(&bitrate_crit_); | 
| int64_t num_bitrate_updates_ GUARDED_BY(&bitrate_crit_); | 
|  | 
| +  std::map<std::string, rtc::NetworkRoute> network_routes_; | 
| + | 
| VieRemb remb_; | 
| const std::unique_ptr<CongestionController> congestion_controller_; | 
|  | 
| @@ -591,6 +595,37 @@ void Call::SignalChannelNetworkState(MediaType media, NetworkState state) { | 
| } | 
| } | 
|  | 
| +// TODO(honghaiz): Add tests for this method. | 
| +void Call::OnNetworkRouteChanged(const std::string& transport_name, | 
| +                                 const rtc::NetworkRoute& network_route) { | 
| +  RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); | 
| +  // Check if the network route is connected. | 
| +  if (!network_route.connected) { | 
| +    LOG(LS_INFO) << "Transport " << transport_name << " is disconnected"; | 
| +    // TODO(honghaiz): Perhaps handle this in SignalChannelNetworkState and | 
| +    // consider merging these two methods. | 
| +    return; | 
| +  } | 
| + | 
| +  // Check whether the network route has changed on each transport. | 
| +  auto result = | 
| +      network_routes_.insert(std::make_pair(transport_name, network_route)); | 
| +  auto kv = result.first; | 
| +  bool inserted = result.second; | 
| +  if (inserted) { | 
| +    // No need to reset BWE if this is the first time the network connects. | 
| +    return; | 
| +  } | 
| +  if (kv->second != network_route) { | 
| +    kv->second = network_route; | 
| +    LOG(LS_INFO) << "Network route changed on transport " << transport_name | 
| +                 << ": new local network id " << network_route.local_network_id | 
| +                 << " new remote network id " | 
| +                 << network_route.remote_network_id; | 
| +    // TODO(holmer): Update the BWE bitrates. | 
| +  } | 
| +} | 
| + | 
| void Call::UpdateAggregateNetworkState() { | 
| RTC_DCHECK(configuration_thread_checker_.CalledOnValidThread()); | 
|  | 
|  |