| // Copyright 2018 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SHILL_PPP_DEVICE_H_ |
| #define SHILL_PPP_DEVICE_H_ |
| |
| #include <base/macros.h> |
| |
| #include <map> |
| #include <string> |
| |
| #include "shill/ipconfig.h" |
| #include "shill/virtual_device.h" |
| |
| namespace shill { |
| |
| // Declared in the header to avoid linking unused code into shims. |
| static const char kPPPDNS1[] = "DNS1"; |
| static const char kPPPDNS2[] = "DNS2"; |
| static const char kPPPExternalIP4Address[] = "EXTERNAL_IP4_ADDRESS"; |
| static const char kPPPGatewayAddress[] = "GATEWAY_ADDRESS"; |
| static const char kPPPInterfaceName[] = "INTERNAL_IFNAME"; |
| static const char kPPPInternalIP4Address[] = "INTERNAL_IP4_ADDRESS"; |
| static const char kPPPLNSAddress[] = "LNS_ADDRESS"; |
| static const char kPPPMRU[] = "MRU"; |
| static const char kPPPReasonAuthenticated[] = "authenticated"; |
| static const char kPPPReasonAuthenticating[] = "authenticating"; |
| static const char kPPPReasonConnect[] = "connect"; |
| static const char kPPPReasonDisconnect[] = "disconnect"; |
| |
| class PPPDevice : public VirtualDevice { |
| public: |
| PPPDevice(Manager* manager, |
| const std::string& link_name, |
| int interface_index); |
| PPPDevice(const PPPDevice&) = delete; |
| PPPDevice& operator=(const PPPDevice&) = delete; |
| |
| ~PPPDevice() override; |
| |
| // Set IPConfig for this device, based on the dictionary of |
| // configuration strings received from our PPP plugin. This also |
| // ensures that the Connection for this device will have routing rules |
| // sending traffic with matching source addresses to the per-device |
| // routing table. |
| virtual void UpdateIPConfigFromPPP( |
| const std::map<std::string, std::string>& configuration, |
| bool blackhole_ipv6); |
| |
| // Return an IPConfig::Properties struct parsed from |configuration|, |
| // but don't set the IPConfig. This lets the caller tweak or inspect |
| // the Properties first. |
| static IPConfig::Properties ParseIPConfiguration( |
| const std::map<std::string, std::string>& configuration); |
| |
| static Service::ConnectFailure ExitStatusToFailure(int exit); |
| |
| #ifndef DISABLE_DHCPV6 |
| // Start a DHCPv6 configuration client for this device. The generic |
| // file name (based on the device name) will be used for the acquired |
| // lease, so that the lease file will be removed when the DHCPv6 client |
| // terminates. For PPP devices, there is no correlation between |
| // the service name and the network that it connected to. |
| virtual bool AcquireIPv6Config(); |
| #endif // DISABLE_DHCPV6 |
| |
| // Get the network device name (e.g. "ppp0") from the dictionary of |
| // configuration strings received from our PPP plugin. |
| static std::string GetInterfaceName( |
| const std::map<std::string, std::string>& configuration); |
| |
| private: |
| FRIEND_TEST(PPPDeviceTest, GetInterfaceName); |
| }; |
| |
| } // namespace shill |
| |
| #endif // SHILL_PPP_DEVICE_H_ |