tprintf(", rc_channel=%u", rc->rc_channel);
break;
}
+ case offsetof(struct sockaddr_l2, l2_bdaddr_type):
case sizeof(struct sockaddr_l2): {
const struct sockaddr_l2 *const l2 = buf;
print_bluetooth_l2_psm("l2_psm=", l2->l2_psm);
print_mac_addr(", l2_bdaddr=", l2->l2_bdaddr.b,
sizeof(l2->l2_bdaddr.b));
print_bluetooth_l2_cid(", l2_cid=", l2->l2_cid);
- tprints(", l2_bdaddr_type=");
- printxval_index(bdaddr_types, l2->l2_bdaddr_type,
- "BDADDR_???");
+
+ if (addrlen == sizeof(struct sockaddr_l2)) {
+ tprints(", l2_bdaddr_type=");
+ printxval_index(bdaddr_types,
+ l2->l2_bdaddr_type,
+ "BDADDR_???");
+ }
+
break;
}
default:
.l2_psm = htobs(h_psm),
.l2_bdaddr.b = "abcdef",
.l2_cid = htobs(h_cid),
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
.l2_bdaddr_type = 0xce,
+#endif
};
void *l2 = tail_memdup(&c_l2, sizeof(c_l2));
unsigned int len = sizeof(c_l2);
", l2_psm=htobs(L2CAP_PSM_DYN_START + %hu)"
", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
", l2_cid=htobs(L2CAP_CID_DYN_START + %hu)"
- ", l2_bdaddr_type=0xce /* BDADDR_??? */}"
- ", %u) = %d EBADF (%m)\n", h_psm - 0x1001,
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+ ", l2_bdaddr_type=0xce /* BDADDR_??? */"
+#endif
+ "}, %u) = %d EBADF (%m)\n", h_psm - 0x1001,
c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
c_l2.l2_psm = htobs(1);
c_l2.l2_cid = htobs(1);
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
c_l2.l2_bdaddr_type = BDADDR_LE_RANDOM;
+#endif
memcpy(l2, &c_l2, sizeof(c_l2));
ret = connect(-1, l2, len);
printf("connect(-1, {sa_family=AF_BLUETOOTH"
", l2_psm=htobs(L2CAP_PSM_SDP)"
", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
", l2_cid=htobs(L2CAP_CID_SIGNALING)"
- ", l2_bdaddr_type=BDADDR_LE_RANDOM}, %u) = %d EBADF (%m)\n",
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+ ", l2_bdaddr_type=BDADDR_LE_RANDOM"
+#endif
+ "}, %u) = %d EBADF (%m)\n",
c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
c_l2.l2_psm = htobs(0xbad);
c_l2.l2_cid = htobs(8);
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
c_l2.l2_bdaddr_type = 3;
+#endif
memcpy(l2, &c_l2, sizeof(c_l2));
ret = connect(-1, l2, len);
printf("connect(-1, {sa_family=AF_BLUETOOTH"
", l2_psm=htobs(0xbad /* L2CAP_PSM_??? */)"
", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
", l2_cid=htobs(0x8 /* L2CAP_CID_??? */)"
- ", l2_bdaddr_type=0x3 /* BDADDR_??? */}"
- ", %u) = %d EBADF (%m)\n",
+#ifdef HAVE_STRUCT_SOCKADDR_L2_L2_BDADDR_TYPE
+ ", l2_bdaddr_type=0x3 /* BDADDR_??? */"
+#endif
+ "}, %u) = %d EBADF (%m)\n",
c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
len, ret);
+
+ c_l2.l2_psm = htobs(0x10ff);
+ c_l2.l2_cid = htobs(0xffff);
+ memcpy(l2, &c_l2, 12);
+ ret = connect(-1, l2, 12);
+ printf("connect(-1, {sa_family=AF_BLUETOOTH"
+ ", l2_psm=htobs(L2CAP_PSM_AUTO_END)"
+ ", l2_bdaddr=%02x:%02x:%02x:%02x:%02x:%02x"
+ ", l2_cid=htobs(L2CAP_CID_DYN_END)"
+ "}, 12) = %d EBADF (%m)\n",
+ c_l2.l2_bdaddr.b[0], c_l2.l2_bdaddr.b[1],
+ c_l2.l2_bdaddr.b[2], c_l2.l2_bdaddr.b[3],
+ c_l2.l2_bdaddr.b[4], c_l2.l2_bdaddr.b[5],
+ ret);
}
#endif