diff --git a/src/openvpn/dco_freebsd.c b/src/openvpn/dco_freebsd.c
index 8d7ceb70..b6d869b0 100644
--- a/src/openvpn/dco_freebsd.c
+++ b/src/openvpn/dco_freebsd.c
@@ -489,8 +489,7 @@ dco_do_read(dco_context_t *dco)
     struct ifdrv drv;
     uint8_t buf[4096];
     nvlist_t *nvl;
-    const uint8_t *pkt;
-    size_t pktlen;
+    enum ovpn_notif_type type;
     int ret;
 
     /* Flush any pending data from the pipe. */
@@ -518,15 +517,9 @@ dco_do_read(dco_context_t *dco)
 
     dco->dco_message_peer_id = nvlist_get_number(nvl, "peerid");
 
-    if (nvlist_exists_binary(nvl, "packet"))
-    {
-        pkt = nvlist_get_binary(nvl, "packet", &pktlen);
-        memcpy(BPTR(&dco->dco_packet_in), pkt, pktlen);
-        dco->dco_packet_in.len = pktlen;
-        dco->dco_message_type = OVPN_CMD_PACKET;
-    }
-    else
-    {
+    type = nvlist_get_number(nvl, "notification");
+    switch (type) {
+    case OVPN_NOTIF_DEL_PEER:
         dco->dco_del_peer_reason = OVPN_DEL_PEER_REASON_EXPIRED;
 
         if (nvlist_exists_number(nvl, "del_reason"))
@@ -551,6 +544,10 @@ dco_do_read(dco_context_t *dco)
         }
 
         dco->dco_message_type = OVPN_CMD_DEL_PEER;
+        break;
+    default:
+        msg(M_WARN, "Unknown kernel notification %d", type);
+        break;
     }
 
     nvlist_destroy(nvl);
