void *data;                 /* Data. */
 };
 
+const char *dhcp_option_to_string(const struct dhcp_option *, int code,
+                                  struct ds *);
+bool dhcp_option_equals(const struct dhcp_option *,
+                        const struct dhcp_option *);
+
 /* Abstracted DHCP protocol message, to make them easier to manipulate than
  * through raw protocol buffers. */
 struct dhcp_msg {
                         size_t offset, uint8_t *);
 bool dhcp_msg_get_uint16(const struct dhcp_msg *, int code,
                          size_t offset, uint16_t *);
-const char *dhcp_option_to_string(const struct dhcp_option *, int code,
-                                  struct ds *);
 const char *dhcp_msg_to_string(const struct dhcp_msg *, bool multiline,
                                struct ds *);
 int dhcp_parse(struct dhcp_msg *, const struct buffer *);
 
     return ds_cstr(ds);
 }
 
+/* Returns true if 'a' and 'b' have the same content, false otherwise. */
+bool
+dhcp_option_equals(const struct dhcp_option *a, const struct dhcp_option *b)
+{
+    return ((a->data != NULL) == (b->data != NULL)
+            && a->n == b->n
+            && !memcmp(a->data, b->data, a->n));
+}
+
 /* Replaces 'ds' by a string representation of 'msg'.  If 'multiline' is
  * false, 'ds' receives a single-line representation of 'msg', otherwise a
  * multiline representation. */