1068 int size, offset = 0, len = 0, ret;
1069 struct nfulnl_msg_packet_hw *hwph;
1070 struct nfulnl_msg_packet_hdr *ph;
1071 uint32_t mark, ifi, ctid;
1074 size = snprintf(buf + offset, rem,
"<log>");
1075 SNPRINTF_FAILURE(size, rem, offset, len);
1077 if (flags & NFLOG_XML_TIME) {
1082 if (localtime_r(&t, &tm) == NULL)
1085 size = snprintf(buf + offset, rem,
"<when>");
1086 SNPRINTF_FAILURE(size, rem, offset, len);
1088 size = snprintf(buf + offset, rem,
1089 "<hour>%d</hour>", tm.tm_hour);
1090 SNPRINTF_FAILURE(size, rem, offset, len);
1092 size = snprintf(buf + offset,
1093 rem,
"<min>%02d</min>", tm.tm_min);
1094 SNPRINTF_FAILURE(size, rem, offset, len);
1096 size = snprintf(buf + offset,
1097 rem,
"<sec>%02d</sec>", tm.tm_sec);
1098 SNPRINTF_FAILURE(size, rem, offset, len);
1100 size = snprintf(buf + offset, rem,
"<wday>%d</wday>",
1102 SNPRINTF_FAILURE(size, rem, offset, len);
1104 size = snprintf(buf + offset, rem,
"<day>%d</day>", tm.tm_mday);
1105 SNPRINTF_FAILURE(size, rem, offset, len);
1107 size = snprintf(buf + offset, rem,
"<month>%d</month>",
1109 SNPRINTF_FAILURE(size, rem, offset, len);
1111 size = snprintf(buf + offset, rem,
"<year>%d</year>",
1113 SNPRINTF_FAILURE(size, rem, offset, len);
1115 size = snprintf(buf + offset, rem,
"</when>");
1116 SNPRINTF_FAILURE(size, rem, offset, len);
1120 if (data && (flags & NFLOG_XML_PREFIX)) {
1121 size = snprintf(buf + offset, rem,
"<prefix>%s</prefix>", data);
1122 SNPRINTF_FAILURE(size, rem, offset, len);
1127 size = snprintf(buf + offset, rem,
"<hook>%u</hook>", ph->hook);
1128 SNPRINTF_FAILURE(size, rem, offset, len);
1131 if (hwph && (flags & NFLOG_XML_HW)) {
1132 int i, hlen = ntohs(hwph->hw_addrlen);
1134 size = snprintf(buf + offset, rem,
"<hw><proto>%04x"
1136 ntohs(ph->hw_protocol));
1137 SNPRINTF_FAILURE(size, rem, offset, len);
1139 size = snprintf(buf + offset, rem,
"<src>");
1140 SNPRINTF_FAILURE(size, rem, offset, len);
1142 for (i=0; i<hlen; i++) {
1143 size = snprintf(buf + offset, rem,
"%02x",
1145 SNPRINTF_FAILURE(size, rem, offset, len);
1148 size = snprintf(buf + offset, rem,
"</src></hw>");
1149 SNPRINTF_FAILURE(size, rem, offset, len);
1150 }
else if (flags & NFLOG_XML_HW) {
1151 size = snprintf(buf + offset, rem,
"<hw><proto>%04x"
1153 ntohs(ph->hw_protocol));
1154 SNPRINTF_FAILURE(size, rem, offset, len);
1159 if (mark && (flags & NFLOG_XML_MARK)) {
1160 size = snprintf(buf + offset, rem,
"<mark>%u</mark>", mark);
1161 SNPRINTF_FAILURE(size, rem, offset, len);
1165 if (ifi && (flags & NFLOG_XML_DEV)) {
1166 size = snprintf(buf + offset, rem,
"<indev>%u</indev>", ifi);
1167 SNPRINTF_FAILURE(size, rem, offset, len);
1171 if (ifi && (flags & NFLOG_XML_DEV)) {
1172 size = snprintf(buf + offset, rem,
"<outdev>%u</outdev>", ifi);
1173 SNPRINTF_FAILURE(size, rem, offset, len);
1177 if (ifi && (flags & NFLOG_XML_PHYSDEV)) {
1178 size = snprintf(buf + offset, rem,
1179 "<physindev>%u</physindev>", ifi);
1180 SNPRINTF_FAILURE(size, rem, offset, len);
1184 if (ifi && (flags & NFLOG_XML_PHYSDEV)) {
1185 size = snprintf(buf + offset, rem,
1186 "<physoutdev>%u</physoutdev>", ifi);
1187 SNPRINTF_FAILURE(size, rem, offset, len);
1190 if (flags & NFLOG_XML_CTID) {
1193 size = snprintf(buf + offset, rem,
1194 "<ctid>%u</ctid>", ctid);
1195 SNPRINTF_FAILURE(size, rem, offset, len);
1200 if (ret >= 0 && (flags & NFLOG_XML_PAYLOAD)) {
1203 size = snprintf(buf + offset, rem,
"<payload>");
1204 SNPRINTF_FAILURE(size, rem, offset, len);
1206 for (i=0; i<ret; i++) {
1207 size = snprintf(buf + offset, rem,
"%02x",
1209 SNPRINTF_FAILURE(size, rem, offset, len);
1212 size = snprintf(buf + offset, rem,
"</payload>");
1213 SNPRINTF_FAILURE(size, rem, offset, len);
1216 size = snprintf(buf + offset, rem,
"</log>");
1217 SNPRINTF_FAILURE(size, rem, offset, len);