1380 struct nfqnl_msg_packet_hdr *ph;
1381 struct nfqnl_msg_packet_hw *hwph;
1384 int size, offset = 0, len = 0, ret;
1385 unsigned char *data;
1387 size = snprintf(buf + offset, rem,
"<pkt>");
1388 SNPRINTF_FAILURE(size, rem, offset, len);
1390 if (flags & NFQ_XML_TIME) {
1395 if (localtime_r(&t, &tm) == NULL)
1398 size = snprintf(buf + offset, rem,
"<when>");
1399 SNPRINTF_FAILURE(size, rem, offset, len);
1401 size = snprintf(buf + offset, rem,
1402 "<hour>%d</hour>", tm.tm_hour);
1403 SNPRINTF_FAILURE(size, rem, offset, len);
1405 size = snprintf(buf + offset,
1406 rem,
"<min>%02d</min>", tm.tm_min);
1407 SNPRINTF_FAILURE(size, rem, offset, len);
1409 size = snprintf(buf + offset,
1410 rem,
"<sec>%02d</sec>", tm.tm_sec);
1411 SNPRINTF_FAILURE(size, rem, offset, len);
1413 size = snprintf(buf + offset, rem,
"<wday>%d</wday>",
1415 SNPRINTF_FAILURE(size, rem, offset, len);
1417 size = snprintf(buf + offset, rem,
"<day>%d</day>", tm.tm_mday);
1418 SNPRINTF_FAILURE(size, rem, offset, len);
1420 size = snprintf(buf + offset, rem,
"<month>%d</month>",
1422 SNPRINTF_FAILURE(size, rem, offset, len);
1424 size = snprintf(buf + offset, rem,
"<year>%d</year>",
1426 SNPRINTF_FAILURE(size, rem, offset, len);
1428 size = snprintf(buf + offset, rem,
"</when>");
1429 SNPRINTF_FAILURE(size, rem, offset, len);
1434 size = snprintf(buf + offset, rem,
1435 "<hook>%u</hook><id>%u</id>",
1436 ph->hook, ntohl(ph->packet_id));
1437 SNPRINTF_FAILURE(size, rem, offset, len);
1440 if (hwph && (flags & NFQ_XML_HW)) {
1441 int i, hlen = ntohs(hwph->hw_addrlen);
1443 size = snprintf(buf + offset, rem,
"<hw><proto>%04x"
1445 ntohs(ph->hw_protocol));
1446 SNPRINTF_FAILURE(size, rem, offset, len);
1448 size = snprintf(buf + offset, rem,
"<src>");
1449 SNPRINTF_FAILURE(size, rem, offset, len);
1451 for (i=0; i<hlen; i++) {
1452 size = snprintf(buf + offset, rem,
"%02x",
1454 SNPRINTF_FAILURE(size, rem, offset, len);
1457 size = snprintf(buf + offset, rem,
"</src></hw>");
1458 SNPRINTF_FAILURE(size, rem, offset, len);
1459 }
else if (flags & NFQ_XML_HW) {
1460 size = snprintf(buf + offset, rem,
"<hw><proto>%04x"
1462 ntohs(ph->hw_protocol));
1463 SNPRINTF_FAILURE(size, rem, offset, len);
1468 if (mark && (flags & NFQ_XML_MARK)) {
1469 size = snprintf(buf + offset, rem,
"<mark>%u</mark>", mark);
1470 SNPRINTF_FAILURE(size, rem, offset, len);
1474 if (ifi && (flags & NFQ_XML_DEV)) {
1475 size = snprintf(buf + offset, rem,
"<indev>%u</indev>", ifi);
1476 SNPRINTF_FAILURE(size, rem, offset, len);
1480 if (ifi && (flags & NFQ_XML_DEV)) {
1481 size = snprintf(buf + offset, rem,
"<outdev>%u</outdev>", ifi);
1482 SNPRINTF_FAILURE(size, rem, offset, len);
1486 if (ifi && (flags & NFQ_XML_PHYSDEV)) {
1487 size = snprintf(buf + offset, rem,
1488 "<physindev>%u</physindev>", ifi);
1489 SNPRINTF_FAILURE(size, rem, offset, len);
1493 if (ifi && (flags & NFQ_XML_PHYSDEV)) {
1494 size = snprintf(buf + offset, rem,
1495 "<physoutdev>%u</physoutdev>", ifi);
1496 SNPRINTF_FAILURE(size, rem, offset, len);
1499 if (
nfq_get_uid(tb, &uid) && (flags & NFQ_XML_UID)) {
1500 size = snprintf(buf + offset, rem,
"<uid>%u</uid>", uid);
1501 SNPRINTF_FAILURE(size, rem, offset, len);
1504 if (
nfq_get_gid(tb, &gid) && (flags & NFQ_XML_GID)) {
1505 size = snprintf(buf + offset, rem,
"<gid>%u</gid>", gid);
1506 SNPRINTF_FAILURE(size, rem, offset, len);
1510 if (ret >= 0 && (flags & NFQ_XML_PAYLOAD)) {
1513 size = snprintf(buf + offset, rem,
"<payload>");
1514 SNPRINTF_FAILURE(size, rem, offset, len);
1516 for (i=0; i<ret; i++) {
1517 size = snprintf(buf + offset, rem,
"%02x",
1519 SNPRINTF_FAILURE(size, rem, offset, len);
1522 size = snprintf(buf + offset, rem,
"</payload>");
1523 SNPRINTF_FAILURE(size, rem, offset, len);
1526 size = snprintf(buf + offset, rem,
"</pkt>");
1527 SNPRINTF_FAILURE(size, rem, offset, len);