btmgmt: Add basic confirm_name support
diff --git a/mgmt/main.c b/mgmt/main.c
index cd4b698..3343d21 100644
--- a/mgmt/main.c
+++ b/mgmt/main.c
@@ -124,6 +124,7 @@
 
 static bool monitor = false;
 static bool discovery = false;
+static bool resolve_names = true;
 
 typedef void (*cmd_cb)(int mgmt_sk, uint16_t op, uint16_t id, uint8_t status,
 				void *rsp, uint16_t len, void *user_data);
@@ -488,6 +489,37 @@
 	return 0;
 }
 
+static void confirm_name_rsp(int mgmt_sk, uint16_t op, uint16_t id,
+				uint8_t status, void *rsp, uint16_t len,
+				void *user_data)
+{
+	struct mgmt_rp_confirm_name *rp = rsp;
+	char addr[18];
+
+	if (status != 0) {
+		fprintf(stderr,
+			"hci%u confirm_name failed with status 0x%02x (%s)\n",
+					id, status, mgmt_errstr(status));
+		return;
+	}
+
+	if (len != sizeof(*rp)) {
+		fprintf(stderr,
+			"hci%u confirm_name rsp length %u instead of %u\n",
+			id, len, sizeof(*rp));
+		return;
+	}
+
+	ba2str(&rp->bdaddr, addr);
+
+	if (rp->status != 0)
+		fprintf(stderr,
+			"hci%u confirm_name for %s failed: 0x%02x (%s)\n",
+			id, addr, rp->status, mgmt_errstr(status));
+	else
+		printf("hci%u confirm_name succeeded for %s\n", id, addr);
+}
+
 static int mgmt_device_found(int mgmt_sk, uint16_t index,
 				struct mgmt_ev_device_found *ev, uint16_t len)
 {
@@ -508,6 +540,21 @@
 			ev->eir[0] == 0 ? "no" : "yes");
 	}
 
+	if (discovery && ev->confirm_name) {
+		struct mgmt_cp_confirm_name cp;
+
+		memset(&cp, 0, sizeof(cp));
+		bacpy(&cp.bdaddr, &ev->addr.bdaddr);
+		if (resolve_names)
+			cp.name_known = 0;
+		else
+			cp.name_known = 1;
+
+		mgmt_send_cmd(mgmt_sk, MGMT_OP_CONFIRM_NAME, index,
+					&cp, sizeof(cp), confirm_name_rsp,
+					NULL);
+	}
+
 	return 0;
 }