diff --git a/cli/src/main/java/org/onosproject/cli/net/AnnotatePortCommand.java b/cli/src/main/java/org/onosproject/cli/net/AnnotatePortCommand.java
new file mode 100644
index 0000000..1adfec6
--- /dev/null
+++ b/cli/src/main/java/org/onosproject/cli/net/AnnotatePortCommand.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.cli.net;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.commands.Option;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.config.NetworkConfigService;
+import org.onosproject.net.config.basics.PortAnnotationConfig;
+import org.onosproject.net.device.DeviceService;
+
+/**
+ * Annotates network device port model.
+ */
+@Command(scope = "onos", name = "annotate-port",
+        description = "Annotates port entities")
+public class AnnotatePortCommand extends AbstractShellCommand {
+
+    @Argument(index = 0, name = "port", description = "Device Port",
+              required = true)
+    String port = null;
+
+    @Argument(index = 1, name = "key", description = "Annotation key",
+             required = false)
+    String key = null;
+
+    @Argument(index = 2, name = "value",
+              description = "Annotation value (null to remove)",
+              required = false)
+    String value = null;
+
+    @Option(name = "--remove-config",
+            description = "Remove annotation config")
+    private boolean removeCfg = false;
+
+    @Override
+    protected void execute() {
+        DeviceService deviceService = get(DeviceService.class);
+        NetworkConfigService netcfgService = get(NetworkConfigService.class);
+
+
+        ConnectPoint connectPoint = ConnectPoint.deviceConnectPoint(port);
+        if (deviceService.getPort(connectPoint) == null) {
+            print("Port %s does not exist.", port);
+            return;
+        }
+
+        if (removeCfg && key == null) {
+            // remove whole port annotation config
+            netcfgService.removeConfig(connectPoint, PortAnnotationConfig.class);
+            print("Annotation Config about %s removed", connectPoint);
+            return;
+        }
+
+        if (key == null) {
+            print("[ERROR] Annotation key not specified.");
+            return;
+        }
+
+        PortAnnotationConfig cfg = netcfgService.addConfig(connectPoint, PortAnnotationConfig.class);
+        if (removeCfg) {
+            // remove config about entry
+            cfg.annotation(key);
+        } else {
+            // add remove request config
+            cfg.annotation(key, value);
+        }
+        cfg.apply();
+    }
+
+}
diff --git a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
index 0200f5f..537c110 100644
--- a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -232,6 +232,15 @@
         </command>
 
         <command>
+            <action class="org.onosproject.cli.net.AnnotatePortCommand"/>
+            <completers>
+                <ref component-id="connectPointCompleter"/>
+                <ref component-id="annotationKeysCompleter"/>
+                <null/>
+            </completers>
+        </command>
+
+        <command>
             <action class="org.onosproject.cli.net.AnnotateLinkCommand"/>
             <completers>
                 <ref component-id="connectPointCompleter"/>
diff --git a/core/api/src/main/java/org/onosproject/net/DefaultAnnotations.java b/core/api/src/main/java/org/onosproject/net/DefaultAnnotations.java
index 242b0e8..f86df5e 100644
--- a/core/api/src/main/java/org/onosproject/net/DefaultAnnotations.java
+++ b/core/api/src/main/java/org/onosproject/net/DefaultAnnotations.java
@@ -24,6 +24,7 @@
 import com.google.common.collect.Maps;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Maps.transformValues;
 
 /**
  * Represents a set of simple annotations that can be used to add arbitrary
@@ -246,6 +247,18 @@
         }
 
         /**
+         * Adds all entries in specified map.
+         * Any previous entries with same key will be overwritten.
+         *
+         * @param entries annotation key and value entries
+         * @return self
+         */
+        public Builder putAll(Map<String, String> entries) {
+            builder.putAll(transformValues(entries, v -> (v == null) ? REMOVED : v));
+            return this;
+        }
+
+        /**
          * Adds the specified annotation. Any previous value associated with
          * the given annotation key will be overwritten.
          *
diff --git a/core/api/src/main/java/org/onosproject/net/config/Config.java b/core/api/src/main/java/org/onosproject/net/config/Config.java
index 9cea1b9..c7d821e 100644
--- a/core/api/src/main/java/org/onosproject/net/config/Config.java
+++ b/core/api/src/main/java/org/onosproject/net/config/Config.java
@@ -908,4 +908,9 @@
         }
     }
 
+    @Override
+    public String toString() {
+        return String.valueOf(node);
+    }
+
 }
diff --git a/core/api/src/main/java/org/onosproject/net/config/basics/PortAnnotationConfig.java b/core/api/src/main/java/org/onosproject/net/config/basics/PortAnnotationConfig.java
new file mode 100644
index 0000000..7c4b3be
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/net/config/basics/PortAnnotationConfig.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.net.config.basics;
+
+import static org.slf4j.LoggerFactory.getLogger;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.config.BaseConfig;
+import org.slf4j.Logger;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+/**
+ * Configuration to add extra annotations to a port via netcfg subsystem.
+ */
+public class PortAnnotationConfig
+    extends BaseConfig<ConnectPoint> {
+
+    /**
+     * {@value #CONFIG_KEY} : a netcfg ConfigKey for {@link PortAnnotationConfig}.
+     */
+    public static final String CONFIG_KEY = "annotations";
+
+    /**
+     * JSON key for annotation entries.
+     * Value is a JSON object.
+     */
+    private static final String ENTRIES = "entries";
+
+    private final Logger log = getLogger(getClass());
+
+    @Override
+    public boolean isValid() {
+        return hasField(ENTRIES) && object.get(ENTRIES).isObject();
+    }
+
+    /**
+     * Returns annotations to add to a Port.
+     *
+     * @return annotations as a map. null value represent key removal request
+     */
+    public Map<String, String> annotations() {
+        Map<String, String> map = new HashMap<>();
+
+        JsonNode jsonNode = object.path(ENTRIES);
+        if (!jsonNode.isObject()) {
+            return map;
+        }
+
+        jsonNode.fields().forEachRemaining(entry -> {
+            String key = entry.getKey();
+            JsonNode value = entry.getValue();
+            if (value.isTextual()) {
+                map.put(key, value.asText());
+            } else if (value.isNull()) {
+                map.put(key, null);
+            } else {
+                try {
+                    map.put(key, mapper().writeValueAsString(value));
+                } catch (JsonProcessingException e) {
+                    log.warn("Error processing JSON value for {}.", key, e);
+                }
+            }
+        });
+        return map;
+    }
+
+    /**
+     * Sets annotations to add to a Port.
+     *
+     * @param replace annotations to be added by this configuration.
+     *                null value represent key removal request
+     * @return self
+     */
+    public PortAnnotationConfig annotations(Map<String, String> replace) {
+        ObjectNode anns = object.objectNode();
+        if (replace != null) {
+            replace.forEach((k, v) -> {
+                anns.put(k, v);
+            });
+        }
+        object.set(ENTRIES, anns);
+        return this;
+    }
+
+    /**
+     * Add configuration to set or remove annotation entry.
+     *
+     * @param key annotations key
+     * @param value annotations value. specifying null removes the entry.
+     * @return self
+     */
+    public PortAnnotationConfig annotation(String key, String value) {
+        JsonNode ent = object.path(ENTRIES);
+        ObjectNode obj = (ent.isObject()) ? (ObjectNode) ent : object.objectNode();
+
+        obj.put(key, value);
+
+        object.set(ENTRIES, obj);
+        return this;
+    }
+
+    /**
+     * Remove configuration about specified key.
+     *
+     * @param key annotations key
+     * @return self
+     */
+    public PortAnnotationConfig annotation(String key) {
+        JsonNode ent = object.path(ENTRIES);
+        ObjectNode obj = (ent.isObject()) ? (ObjectNode) ent : object.objectNode();
+
+        obj.remove(key);
+
+        object.set(ENTRIES, obj);
+        return this;
+    }
+
+    /**
+     * Create a detached {@link PortAnnotationConfig}.
+     * <p>
+     * Note: created instance needs to be initialized by #init(..) before using.
+     */
+    public PortAnnotationConfig() {
+        super();
+    }
+
+    /**
+     * Create a detached {@link PortAnnotationConfig} for specified port.
+     * <p>
+     * Note: created instance is not bound to NetworkConfigService,
+     * thus cannot use {@link #apply()}. Must be passed to the service
+     * using NetworkConfigService#applyConfig
+     *
+     * @param cp ConnectPoint
+     */
+    public PortAnnotationConfig(ConnectPoint cp) {
+        ObjectMapper mapper = new ObjectMapper();
+        init(cp, CONFIG_KEY, mapper.createObjectNode(), mapper, null);
+    }
+}
diff --git a/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java b/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java
index 300d915..89cc6e8 100644
--- a/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java
@@ -88,6 +88,19 @@
              annotations);
     }
 
+    /**
+     * Creates a port description using the supplied information.
+     *
+     * @param base port description to copy fields from
+     * @param annotations to be used in the copied description.
+     *        Note: Annotations on {@code base} will be ignored.
+     * @return copied port description
+     */
+    public static DefaultPortDescription copyReplacingAnnotation(PortDescription base,
+                                                                 SparseAnnotations annotations) {
+        return new DefaultPortDescription(base, annotations);
+    }
+
     @Override
     public PortNumber portNumber() {
         return number;
diff --git a/core/net/src/main/java/org/onosproject/net/config/impl/BasicNetworkConfigs.java b/core/net/src/main/java/org/onosproject/net/config/impl/BasicNetworkConfigs.java
index 0bd8b91..5cabfbd 100644
--- a/core/net/src/main/java/org/onosproject/net/config/impl/BasicNetworkConfigs.java
+++ b/core/net/src/main/java/org/onosproject/net/config/impl/BasicNetworkConfigs.java
@@ -36,6 +36,7 @@
 import org.onosproject.net.config.basics.BasicLinkConfig;
 import org.onosproject.net.config.basics.BasicRegionConfig;
 import org.onosproject.net.config.basics.BasicUiTopoLayoutConfig;
+import org.onosproject.net.config.basics.PortAnnotationConfig;
 import org.onosproject.net.config.basics.SubjectFactories;
 import org.onosproject.net.region.RegionId;
 import org.onosproject.ui.model.topo.UiTopoLayoutId;
@@ -112,6 +113,14 @@
                 public BasicUiTopoLayoutConfig createConfig() {
                     return new BasicUiTopoLayoutConfig();
                 }
+            },
+            new ConfigFactory<ConnectPoint, PortAnnotationConfig>(CONNECT_POINT_SUBJECT_FACTORY,
+                    PortAnnotationConfig.class,
+                    PortAnnotationConfig.CONFIG_KEY) {
+                @Override
+                public PortAnnotationConfig createConfig() {
+                    return new PortAnnotationConfig();
+                }
             }
     );
 
diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
index a3dbcad..6fbb21c 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
@@ -58,6 +58,7 @@
 import org.onosproject.net.config.PortConfigOperator;
 import org.onosproject.net.config.PortConfigOperatorRegistry;
 import org.onosproject.net.config.basics.BasicDeviceConfig;
+import org.onosproject.net.config.basics.PortAnnotationConfig;
 import org.onosproject.net.device.DefaultPortDescription;
 import org.onosproject.net.device.DeviceAdminService;
 import org.onosproject.net.device.DeviceDescription;
@@ -148,6 +149,9 @@
         = synchronizedListMultimap(
            newListMultimap(new ConcurrentHashMap<>(), CopyOnWriteArrayList::new));
 
+    // not part of portOps. must be executed at the end
+    private PortAnnotationOperator portAnnotationOp;
+
     /**
      * Local storage for connectivity status of devices.
      */
@@ -165,6 +169,9 @@
 
     @Activate
     public void activate() {
+        portAnnotationOp = new PortAnnotationOperator(networkConfigService);
+        portOpsIndex.put(PortAnnotationConfig.class, portAnnotationOp);
+
         backgroundService = newSingleThreadScheduledExecutor(
                              groupedThreads("onos/device", "manager-background", log));
         localNodeId = clusterService.getLocalNode().id();
@@ -976,7 +983,7 @@
         for (PortConfigOperator portOp : portOps) {
             work = portOp.combine(cpt, work);
         }
-        return work;
+        return portAnnotationOp.combine(cpt, work);
     }
 
 }
diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/PortAnnotationOperator.java b/core/net/src/main/java/org/onosproject/net/device/impl/PortAnnotationOperator.java
new file mode 100644
index 0000000..3041a07
--- /dev/null
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/PortAnnotationOperator.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.net.device.impl;
+
+import java.util.Map;
+
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.DefaultAnnotations;
+import org.onosproject.net.DefaultAnnotations.Builder;
+import org.onosproject.net.config.NetworkConfigService;
+import org.onosproject.net.config.PortConfigOperator;
+import org.onosproject.net.config.basics.PortAnnotationConfig;
+import org.onosproject.net.device.DefaultPortDescription;
+import org.onosproject.net.device.PortDescription;
+
+/**
+ * Implementations of {@link PortConfigOperator} to weave
+ * annotations added via {@link PortAnnotationConfig}.
+ */
+public class PortAnnotationOperator implements PortConfigOperator {
+
+    private NetworkConfigService networkConfigService;
+
+    /**
+     * Creates {@link PortAnnotationOperator} instance.
+     */
+    public PortAnnotationOperator() {
+    }
+
+    PortAnnotationOperator(NetworkConfigService networkConfigService) {
+        bindService(networkConfigService);
+    }
+
+    @Override
+    public void bindService(NetworkConfigService networkConfigService) {
+        this.networkConfigService = networkConfigService;
+    }
+
+    private PortAnnotationConfig lookupConfig(ConnectPoint cp) {
+        if (networkConfigService == null) {
+            return null;
+        }
+        return networkConfigService.getConfig(cp, PortAnnotationConfig.class);
+    }
+
+    @Override
+    public PortDescription combine(ConnectPoint cp, PortDescription descr) {
+        PortAnnotationConfig cfg = lookupConfig(cp);
+        if (cfg == null) {
+            return descr;
+        }
+        Map<String, String> annotations = cfg.annotations();
+        if (annotations.isEmpty()) {
+            return descr;
+        }
+
+        Builder builder = DefaultAnnotations.builder();
+        builder.putAll(descr.annotations());
+        builder.putAll(annotations);
+
+        return DefaultPortDescription.copyReplacingAnnotation(descr, builder.build());
+    }
+
+}
diff --git a/core/net/src/test/java/org/onosproject/net/config/basics/PortAnnotationConfigTest.java b/core/net/src/test/java/org/onosproject/net/config/basics/PortAnnotationConfigTest.java
new file mode 100644
index 0000000..48e3ce3
--- /dev/null
+++ b/core/net/src/test/java/org/onosproject/net/config/basics/PortAnnotationConfigTest.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.net.config.basics;
+
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.*;
+import static org.onosproject.net.ConnectPoint.deviceConnectPoint;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onlab.junit.TestUtils;
+import org.onlab.junit.TestUtils.TestUtilsException;
+import org.onlab.osgi.ServiceDirectory;
+import org.onlab.osgi.TestServiceDirectory;
+import org.onosproject.codec.CodecService;
+import org.onosproject.codec.impl.CodecManager;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.config.BaseConfig;
+import org.onosproject.net.config.ConfigApplyDelegate;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.NumericNode;
+import com.google.common.collect.ImmutableMap;
+
+public class PortAnnotationConfigTest {
+
+    private static final String SAMPLE_JSONFILE = "port_annotation_config.json";
+
+    private static TestServiceDirectory directory;
+    private static ServiceDirectory original;
+
+    private ObjectMapper mapper;
+
+    private final ConfigApplyDelegate noopDelegate = cfg -> { };
+
+    /**
+     * {@value #SAMPLE_JSONFILE} after parsing.
+     */
+    private JsonNode node;
+
+    // sample data
+    private final ConnectPoint cp = deviceConnectPoint("of:0000000000000001/2");
+
+    private final String key = "foo";
+    private final String value = "bar";
+
+
+    // TODO consolidate code-clone in ProtectionConfigTest, and define constants for field name
+    @BeforeClass
+    public static void setUpClass() throws TestUtilsException {
+        directory = new TestServiceDirectory();
+
+        CodecManager codecService = new CodecManager();
+        codecService.activate();
+        directory.add(CodecService.class, codecService);
+
+        // replace service directory used by BaseConfig
+        original = TestUtils.getField(BaseConfig.class, "services");
+        TestUtils.setField(BaseConfig.class, "services", directory);
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws TestUtilsException {
+        TestUtils.setField(BaseConfig.class, "services", original);
+    }
+
+    @Before
+    public void setUp() throws JsonProcessingException, IOException, TestUtilsException {
+
+        mapper = new ObjectMapper();
+        // Jackson configuration for ease of Numeric node comparison
+        // - treat integral number node as long node
+        mapper.enable(DeserializationFeature.USE_LONG_FOR_INTS);
+        mapper.setNodeFactory(new JsonNodeFactory(false) {
+            @Override
+            public NumericNode numberNode(int v) {
+                return super.numberNode((long) v);
+            }
+            @Override
+            public NumericNode numberNode(short v) {
+                return super.numberNode((long) v);
+            }
+        });
+
+        InputStream stream = PortAnnotationConfig.class
+                                .getResourceAsStream(SAMPLE_JSONFILE);
+        JsonNode tree = mapper.readTree(stream);
+
+        node = tree.path("ports")
+                            .path(cp.toString())
+                            .path(PortAnnotationConfig.CONFIG_KEY);
+        assertTrue(node.isObject());
+    }
+
+    @Test
+    public void readTest() {
+        PortAnnotationConfig sut = new PortAnnotationConfig();
+        sut.init(cp, PortAnnotationConfig.CONFIG_KEY, node, mapper, noopDelegate);
+
+        assertThat(sut.subject(), is(cp));
+        Map<String, String> annotations = sut.annotations();
+        assertThat(annotations.size(), is(1));
+        assertThat(annotations.get(key), is(value));
+    }
+
+    public void writeEntryTest() throws JsonProcessingException, IOException {
+
+        PortAnnotationConfig w = new PortAnnotationConfig();
+        w.init(cp, PortAnnotationConfig.CONFIG_KEY, mapper.createObjectNode(), mapper, noopDelegate);
+
+        // write equivalent to sample
+        w.annotation(key, value);
+
+        // reparse JSON
+        JsonNode r = mapper.readTree(mapper.writeValueAsString(w.node()));
+
+        PortAnnotationConfig sut = new PortAnnotationConfig();
+        sut.init(cp, PortAnnotationConfig.CONFIG_KEY, r, mapper, noopDelegate);
+
+        assertThat(sut.subject(), is(cp));
+        Map<String, String> annotations = sut.annotations();
+        assertThat(annotations.size(), is(1));
+        assertThat(annotations.get(key), is(value));
+    }
+
+    public void writeMapTest() throws JsonProcessingException, IOException {
+
+        PortAnnotationConfig w = new PortAnnotationConfig();
+        w.init(cp, PortAnnotationConfig.CONFIG_KEY, mapper.createObjectNode(), mapper, noopDelegate);
+
+        // write equivalent to sample
+        w.annotations(ImmutableMap.of(key, value));
+
+        // reparse JSON
+        JsonNode r = mapper.readTree(mapper.writeValueAsString(w.node()));
+
+        PortAnnotationConfig sut = new PortAnnotationConfig();
+        sut.init(cp, PortAnnotationConfig.CONFIG_KEY, r, mapper, noopDelegate);
+
+        assertThat(sut.subject(), is(cp));
+        Map<String, String> annotations = sut.annotations();
+        assertThat(annotations.size(), is(1));
+        assertThat(annotations.get(key), is(value));
+    }
+
+}
diff --git a/core/net/src/test/resources/org/onosproject/net/config/basics/port_annotation_config.json b/core/net/src/test/resources/org/onosproject/net/config/basics/port_annotation_config.json
new file mode 100644
index 0000000..8a88ed8
--- /dev/null
+++ b/core/net/src/test/resources/org/onosproject/net/config/basics/port_annotation_config.json
@@ -0,0 +1,11 @@
+{
+  "ports" : {
+    "of:0000000000000001/2" : {
+      "annotations" : {
+        "entries" : {
+          "foo" : "bar"
+        }
+      }
+    }
+  }
+}
