All of lore.kernel.org
 help / color / mirror / Atom feed
* [cilium:pr/netkit-iouring7 3/3] net/core/netdev-genl.c:1149:9: error: 'ifindex' undeclared
@ 2025-11-27  4:31 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-11-27  4:31 UTC (permalink / raw)
  To: Daniel Borkmann; +Cc: oe-kbuild-all, Daniel Borkmann

tree:   https://github.com/cilium/linux.git pr/netkit-iouring7
head:   b0485a3422c57df789879678c6373976fb2bd3e0
commit: b0485a3422c57df789879678c6373976fb2bd3e0 [3/3] foo
config: x86_64-rhel-9.4 (https://download.01.org/0day-ci/archive/20251127/202511270507.SnOvdMP1-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251127/202511270507.SnOvdMP1-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202511270507.SnOvdMP1-lkp@intel.com/

All error/warnings (new ones prefixed by >>):

   net/core/netdev-genl.c: In function 'netdev_nl_queue_create_doit':
   net/core/netdev-genl.c:1143:37: error: 'NETDEV_A_QUEUE_PAIR_QUEUE_TYPE' undeclared (first use in this function); did you mean 'NETDEV_A_QSTATS_QUEUE_TYPE'?
    1143 |         if (nla_get_u32(info->attrs[NETDEV_A_QUEUE_PAIR_QUEUE_TYPE]) !=
         |                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                                     NETDEV_A_QSTATS_QUEUE_TYPE
   net/core/netdev-genl.c:1143:37: note: each undeclared identifier is reported only once for each function it appears in
>> net/core/netdev-genl.c:1149:9: error: 'ifindex' undeclared (first use in this function)
    1149 |         ifindex = nla_get_u32(info->attrs[NETDEV_A_QUEUE_PAIR_SRC_IFINDEX]);
         |         ^~~~~~~
   net/core/netdev-genl.c:1149:43: error: 'NETDEV_A_QUEUE_PAIR_SRC_IFINDEX' undeclared (first use in this function); did you mean 'NETDEV_A_QUEUE_IFINDEX'?
    1149 |         ifindex = nla_get_u32(info->attrs[NETDEV_A_QUEUE_PAIR_SRC_IFINDEX]);
         |                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                                           NETDEV_A_QUEUE_IFINDEX
>> net/core/netdev-genl.c:1151:13: error: assignment to expression with array type
    1151 |         ltb = info->attrs[NETDEV_A_QUEUE_LEASE];
         |             ^
>> net/core/netdev-genl.c:1164:9: error: 'ifindex_lease' undeclared (first use in this function); did you mean 'file_lease'?
    1164 |         ifindex_lease = nla_get_u32(attr[NETDEV_A_LEASE_IFINDEX]);
         |         ^~~~~~~~~~~~~
         |         file_lease
>> net/core/netdev-genl.c:1164:41: error: incompatible type for argument 1 of 'nla_get_u32'
    1164 |         ifindex_lease = nla_get_u32(attr[NETDEV_A_LEASE_IFINDEX]);
         |                                     ~~~~^~~~~~~~~~~~~~~~~~~~~~~~
         |                                         |
         |                                         struct nlattr
   In file included from include/net/rtnetlink.h:7,
                    from include/net/neighbour.h:31,
                    from include/net/dst.h:20,
                    from include/net/sock.h:66,
                    from include/net/inet_sock.h:23,
                    from include/net/ip.h:29,
                    from include/net/busy_poll.h:18,
                    from net/core/netdev-genl.c:6:
   include/net/netlink.h:1732:52: note: expected 'const struct nlattr *' but argument is of type 'struct nlattr'
    1732 | static inline u32 nla_get_u32(const struct nlattr *nla)
         |                               ~~~~~~~~~~~~~~~~~~~~~^~~
   net/core/netdev-genl.c:1166:13: error: assignment to expression with array type
    1166 |         qtb = info->attrs[NETDEV_A_LEASE_QUEUE];
         |             ^
>> net/core/netdev-genl.c:1174:25: error: 'tb' undeclared (first use in this function); did you mean 'ltb'?
    1174 |         if (nla_get_u32(tb[NETDEV_A_QUEUE_TYPE]) != NETDEV_QUEUE_TYPE_RX) {
         |                         ^~
         |                         ltb
>> net/core/netdev-genl.c:1181:13: error: 'dst_ifidx' undeclared (first use in this function); did you mean 'dst_init'?
    1181 |         if (dst_ifidx == src_ifidx) {
         |             ^~~~~~~~~
         |             dst_init
>> net/core/netdev-genl.c:1181:26: error: 'src_ifidx' undeclared (first use in this function)
    1181 |         if (dst_ifidx == src_ifidx) {
         |                          ^~~~~~~~~
>> net/core/netdev-genl.c:1202:13: warning: the address of 'dst_dev' will always evaluate as 'true' [-Waddress]
    1202 |         if (!dst_dev) {
         |             ^
>> net/core/netdev-genl.c:1206:20: error: request for member 'dev' in something not a structure or union
    1206 |         if (dst_dev->dev.parent) {
         |                    ^~
>> net/core/netdev-genl.c:1212:21: error: request for member 'queue_mgmt_ops' in something not a structure or union
    1212 |         if (!dst_dev->queue_mgmt_ops ||
         |                     ^~
   net/core/netdev-genl.c:1213:21: error: request for member 'queue_mgmt_ops' in something not a structure or union
    1213 |             !dst_dev->queue_mgmt_ops->ndo_queue_create) {
         |                     ^~
>> net/core/netdev-genl.c:1219:20: error: request for member 'real_num_rx_queues' in something not a structure or union
    1219 |         if (dst_dev->real_num_rx_queues < 1) {
         |                    ^~
>> net/core/netdev-genl.c:1226:9: error: 'src_dev' undeclared (first use in this function)
    1226 |         src_dev = netdev_get_by_index(genl_info_net(info), src_ifidx,
         |         ^~~~~~~
>> net/core/netdev-genl.c:1256:13: error: 'src_qid' undeclared (first use in this function)
    1256 |         if (src_qid >= src_dev->real_num_rx_queues) {
         |             ^~~~~~~
   In file included from include/uapi/linux/neighbour.h:6,
                    from include/linux/netdevice.h:44,
                    from net/core/netdev-genl.c:3:
   net/core/netdev-genl.c:1259:45: error: 'NETDEV_A_QUEUE_PAIR_SRC_QUEUE_ID' undeclared (first use in this function); did you mean 'NETDEV_A_QSTATS_QUEUE_ID'?
    1259 |                                 info->attrs[NETDEV_A_QUEUE_PAIR_SRC_QUEUE_ID]);
         |                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/netlink.h:145:39: note: in definition of macro 'NL_SET_BAD_ATTR_POLICY'
     145 |                 (extack)->bad_attr = (attr);            \
         |                                       ^~~~
   net/core/netdev-genl.c:1258:17: note: in expansion of macro 'NL_SET_BAD_ATTR'
    1258 |                 NL_SET_BAD_ATTR(info->extack,
         |                 ^~~~~~~~~~~~~~~
>> net/core/netdev-genl.c:1263:9: error: 'src_rxq' undeclared (first use in this function)
    1263 |         src_rxq = __netif_get_rx_queue(src_dev, src_qid);
         |         ^~~~~~~
>> net/core/netdev-genl.c:1271:9: error: 'tmp_rxq' undeclared (first use in this function)
    1271 |         tmp_rxq = __netif_get_rx_queue(dst_dev, dst_dev->real_num_rx_queues - 1);
         |         ^~~~~~~
   net/core/netdev-genl.c:1271:56: error: request for member 'real_num_rx_queues' in something not a structure or union
    1271 |         tmp_rxq = __netif_get_rx_queue(dst_dev, dst_dev->real_num_rx_queues - 1);
         |                                                        ^~
>> net/core/netdev-genl.c:1271:40: error: passing argument 1 of '__netif_get_rx_queue' from incompatible pointer type [-Wincompatible-pointer-types]
    1271 |         tmp_rxq = __netif_get_rx_queue(dst_dev, dst_dev->real_num_rx_queues - 1);
         |                                        ^~~~~~~
         |                                        |
         |                                        struct net_device * (*)(const struct dst_entry *)
   In file included from net/core/netdev-genl.c:9:
   include/net/netdev_rx_queue.h:46:41: note: expected 'struct net_device *' but argument is of type 'struct net_device * (*)(const struct dst_entry *)'
      46 | __netif_get_rx_queue(struct net_device *dev, unsigned int rxq)
         |                      ~~~~~~~~~~~~~~~~~~~^~~
   net/core/netdev-genl.c:1279:22: error: request for member 'queue_mgmt_ops' in something not a structure or union
    1279 |         err = dst_dev->queue_mgmt_ops->ndo_queue_create(dst_dev, &dst_qid);
         |                      ^~
>> net/core/netdev-genl.c:1279:67: error: 'dst_qid' undeclared (first use in this function)
    1279 |         err = dst_dev->queue_mgmt_ops->ndo_queue_create(dst_dev, &dst_qid);
         |                                                                   ^~~~~~~
>> net/core/netdev-genl.c:1286:9: error: 'dst_rxq' undeclared (first use in this function)
    1286 |         dst_rxq = __netif_get_rx_queue(dst_dev, dst_qid);
         |         ^~~~~~~
   net/core/netdev-genl.c:1286:40: error: passing argument 1 of '__netif_get_rx_queue' from incompatible pointer type [-Wincompatible-pointer-types]
    1286 |         dst_rxq = __netif_get_rx_queue(dst_dev, dst_qid);
         |                                        ^~~~~~~
         |                                        |
         |                                        struct net_device * (*)(const struct dst_entry *)
   include/net/netdev_rx_queue.h:46:41: note: expected 'struct net_device *' but argument is of type 'struct net_device * (*)(const struct dst_entry *)'
      46 | __netif_get_rx_queue(struct net_device *dev, unsigned int rxq)
         |                      ~~~~~~~~~~~~~~~~~~~^~~
   net/core/netdev-genl.c:1287:9: error: implicit declaration of function 'netdev_rx_queue_peer'; did you mean 'netdev_rx_queue_lease'? [-Wimplicit-function-declaration]
    1287 |         netdev_rx_queue_peer(src_dev, src_rxq, dst_rxq);
         |         ^~~~~~~~~~~~~~~~~~~~
         |         netdev_rx_queue_lease
   net/core/netdev-genl.c:1289:26: error: 'NETDEV_A_QUEUE_PAIR_DST_QUEUE_ID' undeclared (first use in this function); did you mean 'NETDEV_A_QSTATS_QUEUE_ID'?
    1289 |         nla_put_u32(rsp, NETDEV_A_QUEUE_PAIR_DST_QUEUE_ID, dst_qid);
         |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         |                          NETDEV_A_QSTATS_QUEUE_ID
>> net/core/netdev-genl.c:1293:23: error: passing argument 1 of 'netdev_unlock' from incompatible pointer type [-Wincompatible-pointer-types]
    1293 |         netdev_unlock(dst_dev);
         |                       ^~~~~~~
         |                       |
         |                       struct net_device * (*)(const struct dst_entry *)
   include/linux/netdevice.h:2771:53: note: expected 'struct net_device *' but argument is of type 'struct net_device * (*)(const struct dst_entry *)'
    2771 | static inline void netdev_unlock(struct net_device *dev)
         |                                  ~~~~~~~~~~~~~~~~~~~^~~
   net/core/netdev-genl.c:1303:23: error: passing argument 1 of 'netdev_unlock' from incompatible pointer type [-Wincompatible-pointer-types]
    1303 |         netdev_unlock(dst_dev);
         |                       ^~~~~~~
         |                       |
         |                       struct net_device * (*)(const struct dst_entry *)
   include/linux/netdevice.h:2771:53: note: expected 'struct net_device *' but argument is of type 'struct net_device * (*)(const struct dst_entry *)'
    2771 | static inline void netdev_unlock(struct net_device *dev)
         |                                  ~~~~~~~~~~~~~~~~~~~^~~


vim +/ifindex +1149 net/core/netdev-genl.c

  1122	
  1123	int netdev_nl_queue_create_doit(struct sk_buff *skb, struct genl_info *info)
  1124	{
  1125		//struct netdev_rx_queue *src_rxq, *dst_rxq, *tmp_rxq;
  1126		//u32 src_ifidx, src_qid, dst_ifidx, dst_qid, q_type;
  1127		//struct net_device *src_dev, *dst_dev;
  1128	
  1129		const int qmaxtype = ARRAY_SIZE(netdev_queue_id_nl_policy) - 1;
  1130		const int lmaxtype = ARRAY_SIZE(netdev_lease_nl_policy) - 1;
  1131		struct nlattr *qtb[ARRAY_SIZE(netdev_queue_id_nl_policy)];
  1132		struct nlattr *ltb[ARRAY_SIZE(netdev_lease_nl_policy)];
  1133		netdevice_tracker dev_tracker;
  1134		struct nlattr *attr;
  1135		struct sk_buff *rsp;
  1136		void *hdr;
  1137		int err;
  1138	
  1139		if (GENL_REQ_ATTR_CHECK(info, NETDEV_A_QUEUE_IFINDEX) ||
  1140		    GENL_REQ_ATTR_CHECK(info, NETDEV_A_QUEUE_TYPE) ||
  1141		    GENL_REQ_ATTR_CHECK(info, NETDEV_A_QUEUE_LEASE))
  1142			return -EINVAL;
> 1143		if (nla_get_u32(info->attrs[NETDEV_A_QUEUE_PAIR_QUEUE_TYPE]) !=
  1144		    NETDEV_QUEUE_TYPE_RX) {
  1145			NL_SET_ERR_MSG(info->extack, "Only creation of RX queue currently supported");
  1146			return -EINVAL;
  1147		}
  1148	
> 1149		ifindex = nla_get_u32(info->attrs[NETDEV_A_QUEUE_PAIR_SRC_IFINDEX]);
  1150	
> 1151		ltb = info->attrs[NETDEV_A_QUEUE_LEASE];
  1152		err = nla_parse_nested(ltb, lmaxtype, attr,
  1153				       netdev_queue_id_nl_policy, info->extack);
  1154		if (err < 0)
  1155			return err;
  1156		if (NL_REQ_ATTR_CHECK(info->extack, attr, ltb, NETDEV_A_LEASE_IFINDEX) ||
  1157		    NL_REQ_ATTR_CHECK(info->extack, attr, ltb, NETDEV_A_LEASE_QUEUE))
  1158			return -EINVAL;
  1159		if (ltb[NETDEV_A_LEASE_NETNS_ID]) {
  1160			NL_SET_BAD_ATTR(info->extack, ltb[NETDEV_A_LEASE_NETNS_ID]);
  1161			return -EINVAL;
  1162		}
  1163	
> 1164		ifindex_lease = nla_get_u32(attr[NETDEV_A_LEASE_IFINDEX]);
  1165	
> 1166		qtb = info->attrs[NETDEV_A_LEASE_QUEUE];
  1167		err = nla_parse_nested(qtb, qmaxtype, attr,
  1168				       netdev_queue_id_nl_policy, info->extack);
  1169		if (err < 0)
  1170			return err;
  1171		if (NL_REQ_ATTR_CHECK(info->extack, attr, qtb, NETDEV_A_QUEUE_ID) ||
  1172		    NL_REQ_ATTR_CHECK(info->extack, attr, qtb, NETDEV_A_QUEUE_TYPE))
  1173			return -EINVAL;
> 1174		if (nla_get_u32(tb[NETDEV_A_QUEUE_TYPE]) != NETDEV_QUEUE_TYPE_RX) {
  1175			NL_SET_BAD_ATTR(info->extack, qtb[NETDEV_A_QUEUE_TYPE]);
  1176			return -EINVAL;
  1177		}
  1178	
  1179	
  1180	
> 1181		if (dst_ifidx == src_ifidx) {
  1182			NL_SET_ERR_MSG(info->extack,
  1183				       "Destination driver cannot be same as source driver");
  1184			return -EINVAL;
  1185		}
  1186	
  1187		rsp = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_KERNEL);
  1188		if (!rsp)
  1189			return -ENOMEM;
  1190	
  1191		hdr = genlmsg_iput(rsp, info);
  1192		if (!hdr) {
  1193			err = -EMSGSIZE;
  1194			goto err_genlmsg_free;
  1195		}
  1196	
  1197		/* Locking order is always from the virtual to the physical device
  1198		 * since this is also the same order when applications open the
  1199		 * memory provider later on.
  1200		 */
  1201		dst_dev = netdev_get_by_index_lock(genl_info_net(info), dst_ifidx);
> 1202		if (!dst_dev) {
  1203			err = -ENODEV;
  1204			goto err_genlmsg_free;
  1205		}
> 1206		if (dst_dev->dev.parent) {
  1207			err = -EINVAL;
  1208			NL_SET_ERR_MSG(info->extack,
  1209				       "Destination device is not a virtual device");
  1210			goto err_unlock_dst_dev;
  1211		}
> 1212		if (!dst_dev->queue_mgmt_ops ||
> 1213		    !dst_dev->queue_mgmt_ops->ndo_queue_create) {
  1214			err = -EOPNOTSUPP;
  1215			NL_SET_ERR_MSG(info->extack,
  1216				       "Destination driver does not support queue management operations");
  1217			goto err_unlock_dst_dev;
  1218		}
> 1219		if (dst_dev->real_num_rx_queues < 1) {
  1220			err = -EINVAL;
  1221			NL_SET_ERR_MSG(info->extack,
  1222				       "Destination device must have at least one real RX queue");
  1223			goto err_unlock_dst_dev;
  1224		}
  1225	
> 1226		src_dev = netdev_get_by_index(genl_info_net(info), src_ifidx,
  1227					      &dev_tracker, GFP_KERNEL);
  1228		if (!src_dev) {
  1229			err = -ENODEV;
  1230			goto err_unlock_dst_dev;
  1231		}
  1232		if (!src_dev->dev.parent) {
  1233			err = -EINVAL;
  1234			NL_SET_ERR_MSG(info->extack,
  1235				       "Source device is a virtual device");
  1236			goto err_unlock_dst_dev_src_dev_put;
  1237		}
  1238		if (!netif_device_present(src_dev)) {
  1239			err = -ENODEV;
  1240			NL_SET_ERR_MSG(info->extack,
  1241				       "Source device has been removed from the system");
  1242			goto err_unlock_dst_dev_src_dev_put;
  1243		}
  1244		if (!src_dev->queue_mgmt_ops) {
  1245			err = -EOPNOTSUPP;
  1246			NL_SET_ERR_MSG(info->extack,
  1247				       "Source driver does not support queue management operations");
  1248			goto err_unlock_dst_dev_src_dev_put;
  1249		}
  1250	
  1251		src_dev = netdev_put_lock(src_dev, &dev_tracker);
  1252		if (!src_dev) {
  1253			err = -ENODEV;
  1254			goto err_unlock_dst_dev;
  1255		}
> 1256		if (src_qid >= src_dev->real_num_rx_queues) {
  1257			err = -ERANGE;
> 1258			NL_SET_BAD_ATTR(info->extack,
> 1259					info->attrs[NETDEV_A_QUEUE_PAIR_SRC_QUEUE_ID]);
  1260			goto err_unlock_src_dev;
  1261		}
  1262	
> 1263		src_rxq = __netif_get_rx_queue(src_dev, src_qid);
  1264		if (src_rxq->peer) {
  1265			err = -EBUSY;
  1266			NL_SET_ERR_MSG(info->extack,
  1267				       "Source device queue is already bound");
  1268			goto err_unlock_src_dev;
  1269		}
  1270	
> 1271		tmp_rxq = __netif_get_rx_queue(dst_dev, dst_dev->real_num_rx_queues - 1);
  1272		if (tmp_rxq->peer && tmp_rxq->peer->dev != src_dev) {
  1273			err = -EOPNOTSUPP;
  1274			NL_SET_ERR_MSG(info->extack,
  1275				       "Binding multiple queues from different source devices not supported");
  1276			goto err_unlock_src_dev;
  1277		}
  1278	
> 1279		err = dst_dev->queue_mgmt_ops->ndo_queue_create(dst_dev, &dst_qid);
  1280		if (err) {
  1281			NL_SET_ERR_MSG(info->extack,
  1282				       "Destination device is unable to create a new queue");
  1283			goto err_unlock_src_dev;
  1284		}
  1285	
> 1286		dst_rxq = __netif_get_rx_queue(dst_dev, dst_qid);
> 1287		netdev_rx_queue_peer(src_dev, src_rxq, dst_rxq);
  1288	
  1289		nla_put_u32(rsp, NETDEV_A_QUEUE_PAIR_DST_QUEUE_ID, dst_qid);
  1290		genlmsg_end(rsp, hdr);
  1291	
  1292		netdev_unlock(src_dev);
> 1293		netdev_unlock(dst_dev);
  1294	
  1295		return genlmsg_reply(rsp, info);
  1296	
  1297	err_unlock_dst_dev_src_dev_put:
  1298		netdev_put(src_dev, &dev_tracker);
  1299		goto err_unlock_dst_dev;
  1300	err_unlock_src_dev:
  1301		netdev_unlock(src_dev);
  1302	err_unlock_dst_dev:
  1303		netdev_unlock(dst_dev);
  1304	err_genlmsg_free:
  1305		nlmsg_free(rsp);
  1306		return err;
  1307	}
  1308	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-11-27  4:32 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-27  4:31 [cilium:pr/netkit-iouring7 3/3] net/core/netdev-genl.c:1149:9: error: 'ifindex' undeclared kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.