dev_api.c 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. #include <linux/netdevice.h>
  3. #include <net/netdev_lock.h>
  4. #include "dev.h"
  5. /**
  6. * dev_change_name() - change name of a device
  7. * @dev: device
  8. * @newname: name (or format string) must be at least IFNAMSIZ
  9. *
  10. * Change name of a device, can pass format strings "eth%d".
  11. * for wildcarding.
  12. *
  13. * Return: 0 on success, -errno on failure.
  14. */
  15. int dev_change_name(struct net_device *dev, const char *newname)
  16. {
  17. int ret;
  18. netdev_lock_ops(dev);
  19. ret = netif_change_name(dev, newname);
  20. netdev_unlock_ops(dev);
  21. return ret;
  22. }
  23. /**
  24. * dev_set_alias() - change ifalias of a device
  25. * @dev: device
  26. * @alias: name up to IFALIASZ
  27. * @len: limit of bytes to copy from info
  28. *
  29. * Set ifalias for a device.
  30. *
  31. * Return: 0 on success, -errno on failure.
  32. */
  33. int dev_set_alias(struct net_device *dev, const char *alias, size_t len)
  34. {
  35. int ret;
  36. netdev_lock_ops(dev);
  37. ret = netif_set_alias(dev, alias, len);
  38. netdev_unlock_ops(dev);
  39. return ret;
  40. }
  41. EXPORT_SYMBOL(dev_set_alias);
  42. /**
  43. * dev_change_flags() - change device settings
  44. * @dev: device
  45. * @flags: device state flags
  46. * @extack: netlink extended ack
  47. *
  48. * Change settings on device based state flags. The flags are
  49. * in the userspace exported format.
  50. *
  51. * Return: 0 on success, -errno on failure.
  52. */
  53. int dev_change_flags(struct net_device *dev, unsigned int flags,
  54. struct netlink_ext_ack *extack)
  55. {
  56. int ret;
  57. netdev_lock_ops(dev);
  58. ret = netif_change_flags(dev, flags, extack);
  59. netdev_unlock_ops(dev);
  60. return ret;
  61. }
  62. EXPORT_SYMBOL(dev_change_flags);
  63. /**
  64. * dev_set_group() - change group this device belongs to
  65. * @dev: device
  66. * @new_group: group this device should belong to
  67. */
  68. void dev_set_group(struct net_device *dev, int new_group)
  69. {
  70. netdev_lock_ops(dev);
  71. netif_set_group(dev, new_group);
  72. netdev_unlock_ops(dev);
  73. }
  74. int dev_set_mac_address_user(struct net_device *dev,
  75. struct sockaddr_storage *ss,
  76. struct netlink_ext_ack *extack)
  77. {
  78. int ret;
  79. down_write(&dev_addr_sem);
  80. netdev_lock_ops(dev);
  81. ret = netif_set_mac_address(dev, ss, extack);
  82. netdev_unlock_ops(dev);
  83. up_write(&dev_addr_sem);
  84. return ret;
  85. }
  86. EXPORT_SYMBOL(dev_set_mac_address_user);
  87. /**
  88. * dev_change_net_namespace() - move device to different nethost namespace
  89. * @dev: device
  90. * @net: network namespace
  91. * @pat: If not NULL name pattern to try if the current device name
  92. * is already taken in the destination network namespace.
  93. *
  94. * This function shuts down a device interface and moves it
  95. * to a new network namespace. On success 0 is returned, on
  96. * a failure a netagive errno code is returned.
  97. *
  98. * Callers must hold the rtnl semaphore.
  99. *
  100. * Return: 0 on success, -errno on failure.
  101. */
  102. int dev_change_net_namespace(struct net_device *dev, struct net *net,
  103. const char *pat)
  104. {
  105. return __dev_change_net_namespace(dev, net, pat, 0, NULL);
  106. }
  107. EXPORT_SYMBOL_GPL(dev_change_net_namespace);
  108. /**
  109. * dev_change_carrier() - change device carrier
  110. * @dev: device
  111. * @new_carrier: new value
  112. *
  113. * Change device carrier
  114. *
  115. * Return: 0 on success, -errno on failure.
  116. */
  117. int dev_change_carrier(struct net_device *dev, bool new_carrier)
  118. {
  119. int ret;
  120. netdev_lock_ops(dev);
  121. ret = netif_change_carrier(dev, new_carrier);
  122. netdev_unlock_ops(dev);
  123. return ret;
  124. }
  125. /**
  126. * dev_change_tx_queue_len() - change TX queue length of a netdevice
  127. * @dev: device
  128. * @new_len: new tx queue length
  129. *
  130. * Return: 0 on success, -errno on failure.
  131. */
  132. int dev_change_tx_queue_len(struct net_device *dev, unsigned long new_len)
  133. {
  134. int ret;
  135. netdev_lock_ops(dev);
  136. ret = netif_change_tx_queue_len(dev, new_len);
  137. netdev_unlock_ops(dev);
  138. return ret;
  139. }
  140. /**
  141. * dev_change_proto_down() - set carrier according to proto_down
  142. * @dev: device
  143. * @proto_down: new value
  144. *
  145. * Return: 0 on success, -errno on failure.
  146. */
  147. int dev_change_proto_down(struct net_device *dev, bool proto_down)
  148. {
  149. int ret;
  150. netdev_lock_ops(dev);
  151. ret = netif_change_proto_down(dev, proto_down);
  152. netdev_unlock_ops(dev);
  153. return ret;
  154. }
  155. /**
  156. * dev_open() - prepare an interface for use
  157. * @dev: device to open
  158. * @extack: netlink extended ack
  159. *
  160. * Takes a device from down to up state. The device's private open
  161. * function is invoked and then the multicast lists are loaded. Finally
  162. * the device is moved into the up state and a %NETDEV_UP message is
  163. * sent to the netdev notifier chain.
  164. *
  165. * Calling this function on an active interface is a nop. On a failure
  166. * a negative errno code is returned.
  167. *
  168. * Return: 0 on success, -errno on failure.
  169. */
  170. int dev_open(struct net_device *dev, struct netlink_ext_ack *extack)
  171. {
  172. int ret;
  173. netdev_lock_ops(dev);
  174. ret = netif_open(dev, extack);
  175. netdev_unlock_ops(dev);
  176. return ret;
  177. }
  178. EXPORT_SYMBOL(dev_open);
  179. /**
  180. * dev_close() - shutdown an interface
  181. * @dev: device to shutdown
  182. *
  183. * This function moves an active device into down state. A
  184. * %NETDEV_GOING_DOWN is sent to the netdev notifier chain. The device
  185. * is then deactivated and finally a %NETDEV_DOWN is sent to the notifier
  186. * chain.
  187. */
  188. void dev_close(struct net_device *dev)
  189. {
  190. netdev_lock_ops(dev);
  191. netif_close(dev);
  192. netdev_unlock_ops(dev);
  193. }
  194. EXPORT_SYMBOL(dev_close);
  195. int dev_eth_ioctl(struct net_device *dev,
  196. struct ifreq *ifr, unsigned int cmd)
  197. {
  198. const struct net_device_ops *ops = dev->netdev_ops;
  199. int ret = -ENODEV;
  200. if (!ops->ndo_eth_ioctl)
  201. return -EOPNOTSUPP;
  202. netdev_lock_ops(dev);
  203. if (netif_device_present(dev))
  204. ret = ops->ndo_eth_ioctl(dev, ifr, cmd);
  205. netdev_unlock_ops(dev);
  206. return ret;
  207. }
  208. EXPORT_SYMBOL(dev_eth_ioctl);
  209. int dev_set_mtu(struct net_device *dev, int new_mtu)
  210. {
  211. int ret;
  212. netdev_lock_ops(dev);
  213. ret = netif_set_mtu(dev, new_mtu);
  214. netdev_unlock_ops(dev);
  215. return ret;
  216. }
  217. EXPORT_SYMBOL(dev_set_mtu);
  218. /**
  219. * dev_disable_lro() - disable Large Receive Offload on a device
  220. * @dev: device
  221. *
  222. * Disable Large Receive Offload (LRO) on a net device. Must be
  223. * called under RTNL. This is needed if received packets may be
  224. * forwarded to another interface.
  225. */
  226. void dev_disable_lro(struct net_device *dev)
  227. {
  228. netdev_lock_ops(dev);
  229. netif_disable_lro(dev);
  230. netdev_unlock_ops(dev);
  231. }
  232. EXPORT_SYMBOL(dev_disable_lro);
  233. /**
  234. * dev_set_promiscuity() - update promiscuity count on a device
  235. * @dev: device
  236. * @inc: modifier
  237. *
  238. * Add or remove promiscuity from a device. While the count in the device
  239. * remains above zero the interface remains promiscuous. Once it hits zero
  240. * the device reverts back to normal filtering operation. A negative inc
  241. * value is used to drop promiscuity on the device.
  242. * Return 0 if successful or a negative errno code on error.
  243. */
  244. int dev_set_promiscuity(struct net_device *dev, int inc)
  245. {
  246. int ret;
  247. netdev_lock_ops(dev);
  248. ret = netif_set_promiscuity(dev, inc);
  249. netdev_unlock_ops(dev);
  250. return ret;
  251. }
  252. EXPORT_SYMBOL(dev_set_promiscuity);
  253. /**
  254. * dev_set_allmulti() - update allmulti count on a device
  255. * @dev: device
  256. * @inc: modifier
  257. *
  258. * Add or remove reception of all multicast frames to a device. While the
  259. * count in the device remains above zero the interface remains listening
  260. * to all interfaces. Once it hits zero the device reverts back to normal
  261. * filtering operation. A negative @inc value is used to drop the counter
  262. * when releasing a resource needing all multicasts.
  263. *
  264. * Return: 0 on success, -errno on failure.
  265. */
  266. int dev_set_allmulti(struct net_device *dev, int inc)
  267. {
  268. int ret;
  269. netdev_lock_ops(dev);
  270. ret = netif_set_allmulti(dev, inc, true);
  271. netdev_unlock_ops(dev);
  272. return ret;
  273. }
  274. EXPORT_SYMBOL(dev_set_allmulti);
  275. /**
  276. * dev_set_mac_address() - change Media Access Control Address
  277. * @dev: device
  278. * @ss: new address
  279. * @extack: netlink extended ack
  280. *
  281. * Change the hardware (MAC) address of the device
  282. *
  283. * Return: 0 on success, -errno on failure.
  284. */
  285. int dev_set_mac_address(struct net_device *dev, struct sockaddr_storage *ss,
  286. struct netlink_ext_ack *extack)
  287. {
  288. int ret;
  289. netdev_lock_ops(dev);
  290. ret = netif_set_mac_address(dev, ss, extack);
  291. netdev_unlock_ops(dev);
  292. return ret;
  293. }
  294. EXPORT_SYMBOL(dev_set_mac_address);
  295. int dev_xdp_propagate(struct net_device *dev, struct netdev_bpf *bpf)
  296. {
  297. int ret;
  298. netdev_lock_ops(dev);
  299. ret = netif_xdp_propagate(dev, bpf);
  300. netdev_unlock_ops(dev);
  301. return ret;
  302. }
  303. EXPORT_SYMBOL_GPL(dev_xdp_propagate);
  304. /**
  305. * netdev_state_change() - device changes state
  306. * @dev: device to cause notification
  307. *
  308. * Called to indicate a device has changed state. This function calls
  309. * the notifier chains for netdev_chain and sends a NEWLINK message
  310. * to the routing socket.
  311. */
  312. void netdev_state_change(struct net_device *dev)
  313. {
  314. netdev_lock_ops(dev);
  315. netif_state_change(dev);
  316. netdev_unlock_ops(dev);
  317. }
  318. EXPORT_SYMBOL(netdev_state_change);
  319. int dev_set_threaded(struct net_device *dev,
  320. enum netdev_napi_threaded threaded)
  321. {
  322. int ret;
  323. netdev_lock(dev);
  324. ret = netif_set_threaded(dev, threaded);
  325. netdev_unlock(dev);
  326. return ret;
  327. }
  328. EXPORT_SYMBOL(dev_set_threaded);