diff --git a/SConstruct b/SConstruct
index 4bfc425..9a9f007 100644
--- a/SConstruct
+++ b/SConstruct
@@ -240,6 +240,7 @@
                    payload_state.cc
                    policy_manager/real_random_provider.cc
                    policy_manager/evaluation_context.cc
+                   policy_manager/real_shill_provider.cc
                    postinstall_runner_action.cc
                    prefs.cc
                    proxy_resolver.cc
@@ -293,6 +294,7 @@
                             policy_manager/evaluation_context_unittest.cc
                             policy_manager/generic_variables_unittest.cc
                             policy_manager/real_random_provider_unittest.cc
+                            policy_manager/real_shill_provider_unittest.cc
                             policy_manager/variable_unittest.cc
                             postinstall_runner_action_unittest.cc
                             prefs_unittest.cc
diff --git a/policy_manager/real_shill_provider.cc b/policy_manager/real_shill_provider.cc
new file mode 100644
index 0000000..29a913f
--- /dev/null
+++ b/policy_manager/real_shill_provider.cc
@@ -0,0 +1,24 @@
+// Copyright (c) 2014 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.
+
+#include "update_engine/policy_manager/generic_variables.h"
+#include "update_engine/policy_manager/real_shill_provider.h"
+
+namespace chromeos_policy_manager {
+
+// ShillProvider implementation.
+
+bool RealShillProvider::DoInit(void) {
+  // TODO(garnold) Initialize with actual (or fake) DBus connection.
+
+  var_is_connected_.reset(
+      new CopyVariable<bool>("is_connected", is_connected_));
+  var_conn_type_.reset(
+      new CopyVariable<ShillConnType>("conn_type", conn_type_));
+  var_conn_last_changed_.reset(
+      new CopyVariable<Time>("conn_last_changed", conn_last_changed_));
+  return true;
+}
+
+}  // namespace chromeos_policy_manager
diff --git a/policy_manager/real_shill_provider.h b/policy_manager/real_shill_provider.h
new file mode 100644
index 0000000..1a120b7
--- /dev/null
+++ b/policy_manager/real_shill_provider.h
@@ -0,0 +1,44 @@
+// Copyright (c) 2014 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 CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_REAL_SHILL_PROVIDER_H
+#define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_REAL_SHILL_PROVIDER_H
+
+#include "update_engine/policy_manager/shill_provider.h"
+
+using base::Time;
+
+namespace chromeos_policy_manager {
+
+// ShillProvider concrete implementation.
+//
+// TODO(garnold) Much of the functionality in this module was adapted from
+// connection_manager, with slight changes (annotated inline).  We need to make
+// sure to deprecate use of connection manager when the time comes.
+class RealShillProvider : public ShillProvider {
+ public:
+  // TODO(garnold) This should take a DBus object for communicating with shill.
+  RealShillProvider()
+      : is_connected_(false), conn_type_(kShillConnTypeUnknown),
+        conn_last_changed_(Time::Now()) {}
+
+ protected:
+  virtual bool DoInit();
+
+ private:
+  // Whether we have network connectivity.
+  bool is_connected_;
+
+  // The current network connection type as reported by shill.
+  ShillConnType conn_type_;
+
+  // The time when the connection type last changed.
+  Time conn_last_changed_;
+
+  DISALLOW_COPY_AND_ASSIGN(RealShillProvider);
+};
+
+}  // namespace chromeos_policy_manager
+
+#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_REAL_SHILL_PROVIDER_H
diff --git a/policy_manager/real_shill_provider_unittest.cc b/policy_manager/real_shill_provider_unittest.cc
new file mode 100644
index 0000000..6bc544c
--- /dev/null
+++ b/policy_manager/real_shill_provider_unittest.cc
@@ -0,0 +1,56 @@
+// Copyright (c) 2014 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.
+
+#include <base/memory/scoped_ptr.h>
+#include <base/time.h>
+#include <gtest/gtest.h>
+
+#include "update_engine/policy_manager/real_shill_provider.h"
+#include "update_engine/policy_manager/pmtest_utils.h"
+
+using base::Time;
+using base::TimeDelta;
+
+namespace chromeos_policy_manager {
+
+class PmRealShillProviderTest : public ::testing::Test {
+ protected:
+  virtual void SetUp() {
+    default_timeout_ = TimeDelta::FromSeconds(1);
+
+    // The provider initializes correctly.
+    time_before_init_ = Time::Now();
+    provider_.reset(new RealShillProvider());
+    time_after_init_ = Time::Now();
+    PMTEST_ASSERT_NOT_NULL(provider_.get());
+    ASSERT_TRUE(provider_->Init());
+  }
+
+  TimeDelta default_timeout_;
+  Time time_before_init_;
+  Time time_after_init_;
+  scoped_ptr<RealShillProvider> provider_;
+};
+
+
+TEST_F(PmRealShillProviderTest, DefaultValues) {
+  // Tests that initial values were set correctly.
+  scoped_ptr<const bool> is_connected(
+      provider_->var_is_connected()->GetValue(default_timeout_, NULL));
+  PMTEST_ASSERT_NOT_NULL(is_connected.get());
+  EXPECT_FALSE(*is_connected);
+
+  scoped_ptr<const ShillConnType> conn_type(
+      provider_->var_conn_type()->GetValue(default_timeout_, NULL));
+  PMTEST_ASSERT_NOT_NULL(conn_type.get());
+  EXPECT_EQ(kShillConnTypeUnknown, *conn_type);
+
+  scoped_ptr<const Time> conn_last_changed(
+      provider_->var_conn_last_changed()->GetValue(default_timeout_, NULL));
+  PMTEST_ASSERT_NOT_NULL(conn_last_changed.get());
+  EXPECT_LE(time_before_init_, *conn_last_changed);
+  EXPECT_GE(time_after_init_, *conn_last_changed);
+}
+
+}  // namespace chromeos_policy_manager
diff --git a/policy_manager/shill_provider.h b/policy_manager/shill_provider.h
new file mode 100644
index 0000000..4b56583
--- /dev/null
+++ b/policy_manager/shill_provider.h
@@ -0,0 +1,60 @@
+// Copyright (c) 2014 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 CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_SHILL_PROVIDER_H
+#define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_SHILL_PROVIDER_H
+
+#include <base/memory/scoped_ptr.h>
+#include <base/time.h>
+
+#include "update_engine/policy_manager/provider.h"
+#include "update_engine/policy_manager/variable.h"
+
+using base::Time;
+
+namespace chromeos_policy_manager {
+
+// TODO(garnold) Adapted from connection_manager.h.
+enum ShillConnType {
+  kShillConnTypeEthernet = 0,
+  kShillConnTypeWifi,
+  kShillConnTypeWimax,
+  kShillConnTypeBluetooth,
+  kShillConnTypeCellular,
+  kShillConnTypeUnknown
+};
+
+// Provider for networking related information.
+class ShillProvider : public Provider {
+ public:
+  // Returns whether we currently have network connectivity.
+  Variable<bool>* var_is_connected() const {
+    return var_is_connected_.get();
+  }
+
+  // Returns the current network connection type. Unknown if not connected.
+  Variable<ShillConnType>* var_conn_type() const {
+    return var_conn_type_.get();
+  }
+
+  // Returns the time when network connection last changed; initialized to
+  // current time.
+  Variable<base::Time>* var_conn_last_changed() const {
+    return var_conn_last_changed_.get();
+  }
+
+ protected:
+  ShillProvider() {}
+
+  scoped_ptr<Variable<bool> > var_is_connected_;
+  scoped_ptr<Variable<ShillConnType> > var_conn_type_;
+  scoped_ptr<Variable<base::Time> > var_conn_last_changed_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ShillProvider);
+};
+
+}  // namespace chromeos_policy_manager
+
+#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_SHILL_PROVIDER_H
diff --git a/policy_manager/variable.h b/policy_manager/variable.h
index 29fa546..ce239ce 100644
--- a/policy_manager/variable.h
+++ b/policy_manager/variable.h
@@ -45,6 +45,8 @@
 
   friend class PmRealRandomProviderTest;
   FRIEND_TEST(PmRealRandomProviderTest, GetRandomValues);
+  friend class PmRealShillProviderTest;
+  FRIEND_TEST(PmRealShillProviderTest, DefaultValues);
 
   // Gets the current value of the variable. The current value is copied to a
   // new object and returned. The caller of this method owns the object and
