diff options
Diffstat (limited to 'include/linux')
51 files changed, 871 insertions, 234 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index c57e064666e4..7f1c0f00db9b 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
| @@ -192,6 +192,7 @@ header-y += in_route.h | |||
| 192 | header-y += sock_diag.h | 192 | header-y += sock_diag.h |
| 193 | header-y += inet_diag.h | 193 | header-y += inet_diag.h |
| 194 | header-y += unix_diag.h | 194 | header-y += unix_diag.h |
| 195 | header-y += packet_diag.h | ||
| 195 | header-y += inotify.h | 196 | header-y += inotify.h |
| 196 | header-y += input.h | 197 | header-y += input.h |
| 197 | header-y += ioctl.h | 198 | header-y += ioctl.h |
| @@ -359,6 +360,7 @@ header-y += sysctl.h | |||
| 359 | header-y += sysinfo.h | 360 | header-y += sysinfo.h |
| 360 | header-y += taskstats.h | 361 | header-y += taskstats.h |
| 361 | header-y += tcp.h | 362 | header-y += tcp.h |
| 363 | header-y += tcp_metrics.h | ||
| 362 | header-y += telephony.h | 364 | header-y += telephony.h |
| 363 | header-y += termios.h | 365 | header-y += termios.h |
| 364 | header-y += time.h | 366 | header-y += time.h |
diff --git a/include/linux/bcma/bcma_driver_chipcommon.h b/include/linux/bcma/bcma_driver_chipcommon.h index d323a4b4143c..6ba45d2b99db 100644 --- a/include/linux/bcma/bcma_driver_chipcommon.h +++ b/include/linux/bcma/bcma_driver_chipcommon.h | |||
| @@ -100,6 +100,7 @@ | |||
| 100 | #define BCMA_CC_CHIPST_4706_SFLASH_TYPE BIT(2) /* 0: 8b-p/ST-s flash, 1: 16b-p/Atmal-s flash */ | 100 | #define BCMA_CC_CHIPST_4706_SFLASH_TYPE BIT(2) /* 0: 8b-p/ST-s flash, 1: 16b-p/Atmal-s flash */ |
| 101 | #define BCMA_CC_CHIPST_4706_MIPS_BENDIAN BIT(3) /* 0: little, 1: big endian */ | 101 | #define BCMA_CC_CHIPST_4706_MIPS_BENDIAN BIT(3) /* 0: little, 1: big endian */ |
| 102 | #define BCMA_CC_CHIPST_4706_PCIE1_DISABLE BIT(5) /* PCIE1 enable strap pin */ | 102 | #define BCMA_CC_CHIPST_4706_PCIE1_DISABLE BIT(5) /* PCIE1 enable strap pin */ |
| 103 | #define BCMA_CC_CHIPST_5357_NAND_BOOT BIT(4) /* NAND boot, valid for CC rev 38 and/or BCM5357 */ | ||
| 103 | #define BCMA_CC_JCMD 0x0030 /* Rev >= 10 only */ | 104 | #define BCMA_CC_JCMD 0x0030 /* Rev >= 10 only */ |
| 104 | #define BCMA_CC_JCMD_START 0x80000000 | 105 | #define BCMA_CC_JCMD_START 0x80000000 |
| 105 | #define BCMA_CC_JCMD_BUSY 0x80000000 | 106 | #define BCMA_CC_JCMD_BUSY 0x80000000 |
| @@ -266,6 +267,29 @@ | |||
| 266 | #define BCMA_CC_SROM_CONTROL_SIZE_16K 0x00000004 | 267 | #define BCMA_CC_SROM_CONTROL_SIZE_16K 0x00000004 |
| 267 | #define BCMA_CC_SROM_CONTROL_SIZE_SHIFT 1 | 268 | #define BCMA_CC_SROM_CONTROL_SIZE_SHIFT 1 |
| 268 | #define BCMA_CC_SROM_CONTROL_PRESENT 0x00000001 | 269 | #define BCMA_CC_SROM_CONTROL_PRESENT 0x00000001 |
| 270 | /* Block 0x140 - 0x190 registers are chipset specific */ | ||
| 271 | #define BCMA_CC_4706_FLASHSCFG 0x18C /* Flash struct configuration */ | ||
| 272 | #define BCMA_CC_4706_FLASHSCFG_MASK 0x000000ff | ||
| 273 | #define BCMA_CC_4706_FLASHSCFG_SF1 0x00000001 /* 2nd serial flash present */ | ||
| 274 | #define BCMA_CC_4706_FLASHSCFG_PF1 0x00000002 /* 2nd parallel flash present */ | ||
| 275 | #define BCMA_CC_4706_FLASHSCFG_SF1_TYPE 0x00000004 /* 2nd serial flash type : 0 : ST, 1 : Atmel */ | ||
| 276 | #define BCMA_CC_4706_FLASHSCFG_NF1 0x00000008 /* 2nd NAND flash present */ | ||
| 277 | #define BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_MASK 0x000000f0 | ||
| 278 | #define BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_4MB 0x00000010 /* 4MB */ | ||
| 279 | #define BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_8MB 0x00000020 /* 8MB */ | ||
| 280 | #define BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_16MB 0x00000030 /* 16MB */ | ||
| 281 | #define BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_32MB 0x00000040 /* 32MB */ | ||
| 282 | #define BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_64MB 0x00000050 /* 64MB */ | ||
| 283 | #define BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_128MB 0x00000060 /* 128MB */ | ||
| 284 | #define BCMA_CC_4706_FLASHSCFG_1ST_MADDR_SEG_256MB 0x00000070 /* 256MB */ | ||
| 285 | /* NAND flash registers for BCM4706 (corerev = 31) */ | ||
| 286 | #define BCMA_CC_NFLASH_CTL 0x01A0 | ||
| 287 | #define BCMA_CC_NFLASH_CTL_ERR 0x08000000 | ||
| 288 | #define BCMA_CC_NFLASH_CONF 0x01A4 | ||
| 289 | #define BCMA_CC_NFLASH_COL_ADDR 0x01A8 | ||
| 290 | #define BCMA_CC_NFLASH_ROW_ADDR 0x01AC | ||
| 291 | #define BCMA_CC_NFLASH_DATA 0x01B0 | ||
| 292 | #define BCMA_CC_NFLASH_WAITCNT0 0x01B4 | ||
| 269 | /* 0x1E0 is defined as shared BCMA_CLKCTLST */ | 293 | /* 0x1E0 is defined as shared BCMA_CLKCTLST */ |
| 270 | #define BCMA_CC_HW_WORKAROUND 0x01E4 /* Hardware workaround (rev >= 20) */ | 294 | #define BCMA_CC_HW_WORKAROUND 0x01E4 /* Hardware workaround (rev >= 20) */ |
| 271 | #define BCMA_CC_UART0_DATA 0x0300 | 295 | #define BCMA_CC_UART0_DATA 0x0300 |
| @@ -325,6 +349,60 @@ | |||
| 325 | #define BCMA_CC_PLLCTL_ADDR 0x0660 | 349 | #define BCMA_CC_PLLCTL_ADDR 0x0660 |
| 326 | #define BCMA_CC_PLLCTL_DATA 0x0664 | 350 | #define BCMA_CC_PLLCTL_DATA 0x0664 |
| 327 | #define BCMA_CC_SPROM 0x0800 /* SPROM beginning */ | 351 | #define BCMA_CC_SPROM 0x0800 /* SPROM beginning */ |
| 352 | /* NAND flash MLC controller registers (corerev >= 38) */ | ||
| 353 | #define BCMA_CC_NAND_REVISION 0x0C00 | ||
| 354 | #define BCMA_CC_NAND_CMD_START 0x0C04 | ||
| 355 | #define BCMA_CC_NAND_CMD_ADDR_X 0x0C08 | ||
| 356 | #define BCMA_CC_NAND_CMD_ADDR 0x0C0C | ||
| 357 | #define BCMA_CC_NAND_CMD_END_ADDR 0x0C10 | ||
| 358 | #define BCMA_CC_NAND_CS_NAND_SELECT 0x0C14 | ||
| 359 | #define BCMA_CC_NAND_CS_NAND_XOR 0x0C18 | ||
| 360 | #define BCMA_CC_NAND_SPARE_RD0 0x0C20 | ||
| 361 | #define BCMA_CC_NAND_SPARE_RD4 0x0C24 | ||
| 362 | #define BCMA_CC_NAND_SPARE_RD8 0x0C28 | ||
| 363 | #define BCMA_CC_NAND_SPARE_RD12 0x0C2C | ||
| 364 | #define BCMA_CC_NAND_SPARE_WR0 0x0C30 | ||
| 365 | #define BCMA_CC_NAND_SPARE_WR4 0x0C34 | ||
| 366 | #define BCMA_CC_NAND_SPARE_WR8 0x0C38 | ||
| 367 | #define BCMA_CC_NAND_SPARE_WR12 0x0C3C | ||
| 368 | #define BCMA_CC_NAND_ACC_CONTROL 0x0C40 | ||
| 369 | #define BCMA_CC_NAND_CONFIG 0x0C48 | ||
| 370 | #define BCMA_CC_NAND_TIMING_1 0x0C50 | ||
| 371 | #define BCMA_CC_NAND_TIMING_2 0x0C54 | ||
| 372 | #define BCMA_CC_NAND_SEMAPHORE 0x0C58 | ||
| 373 | #define BCMA_CC_NAND_DEVID 0x0C60 | ||
| 374 | #define BCMA_CC_NAND_DEVID_X 0x0C64 | ||
| 375 | #define BCMA_CC_NAND_BLOCK_LOCK_STATUS 0x0C68 | ||
| 376 | #define BCMA_CC_NAND_INTFC_STATUS 0x0C6C | ||
| 377 | #define BCMA_CC_NAND_ECC_CORR_ADDR_X 0x0C70 | ||
| 378 | #define BCMA_CC_NAND_ECC_CORR_ADDR 0x0C74 | ||
| 379 | #define BCMA_CC_NAND_ECC_UNC_ADDR_X 0x0C78 | ||
| 380 | #define BCMA_CC_NAND_ECC_UNC_ADDR 0x0C7C | ||
| 381 | #define BCMA_CC_NAND_READ_ERROR_COUNT 0x0C80 | ||
| 382 | #define BCMA_CC_NAND_CORR_STAT_THRESHOLD 0x0C84 | ||
| 383 | #define BCMA_CC_NAND_READ_ADDR_X 0x0C90 | ||
| 384 | #define BCMA_CC_NAND_READ_ADDR 0x0C94 | ||
| 385 | #define BCMA_CC_NAND_PAGE_PROGRAM_ADDR_X 0x0C98 | ||
| 386 | #define BCMA_CC_NAND_PAGE_PROGRAM_ADDR 0x0C9C | ||
| 387 | #define BCMA_CC_NAND_COPY_BACK_ADDR_X 0x0CA0 | ||
| 388 | #define BCMA_CC_NAND_COPY_BACK_ADDR 0x0CA4 | ||
| 389 | #define BCMA_CC_NAND_BLOCK_ERASE_ADDR_X 0x0CA8 | ||
| 390 | #define BCMA_CC_NAND_BLOCK_ERASE_ADDR 0x0CAC | ||
| 391 | #define BCMA_CC_NAND_INV_READ_ADDR_X 0x0CB0 | ||
| 392 | #define BCMA_CC_NAND_INV_READ_ADDR 0x0CB4 | ||
| 393 | #define BCMA_CC_NAND_BLK_WR_PROTECT 0x0CC0 | ||
| 394 | #define BCMA_CC_NAND_ACC_CONTROL_CS1 0x0CD0 | ||
| 395 | #define BCMA_CC_NAND_CONFIG_CS1 0x0CD4 | ||
| 396 | #define BCMA_CC_NAND_TIMING_1_CS1 0x0CD8 | ||
| 397 | #define BCMA_CC_NAND_TIMING_2_CS1 0x0CDC | ||
| 398 | #define BCMA_CC_NAND_SPARE_RD16 0x0D30 | ||
| 399 | #define BCMA_CC_NAND_SPARE_RD20 0x0D34 | ||
| 400 | #define BCMA_CC_NAND_SPARE_RD24 0x0D38 | ||
| 401 | #define BCMA_CC_NAND_SPARE_RD28 0x0D3C | ||
| 402 | #define BCMA_CC_NAND_CACHE_ADDR 0x0D40 | ||
| 403 | #define BCMA_CC_NAND_CACHE_DATA 0x0D44 | ||
| 404 | #define BCMA_CC_NAND_CTRL_CONFIG 0x0D48 | ||
| 405 | #define BCMA_CC_NAND_CTRL_STATUS 0x0D4C | ||
| 328 | 406 | ||
| 329 | /* Divider allocation in 4716/47162/5356 */ | 407 | /* Divider allocation in 4716/47162/5356 */ |
| 330 | #define BCMA_CC_PMU5_MAINPLL_CPU 1 | 408 | #define BCMA_CC_PMU5_MAINPLL_CPU 1 |
| @@ -415,6 +493,13 @@ | |||
| 415 | /* 4313 Chip specific ChipControl register bits */ | 493 | /* 4313 Chip specific ChipControl register bits */ |
| 416 | #define BCMA_CCTRL_4313_12MA_LED_DRIVE 0x00000007 /* 12 mA drive strengh for later 4313 */ | 494 | #define BCMA_CCTRL_4313_12MA_LED_DRIVE 0x00000007 /* 12 mA drive strengh for later 4313 */ |
| 417 | 495 | ||
| 496 | /* BCM5357 ChipControl register bits */ | ||
| 497 | #define BCMA_CHIPCTL_5357_EXTPA BIT(14) | ||
| 498 | #define BCMA_CHIPCTL_5357_ANT_MUX_2O3 BIT(15) | ||
| 499 | #define BCMA_CHIPCTL_5357_NFLASH BIT(16) | ||
| 500 | #define BCMA_CHIPCTL_5357_I2S_PINS_ENABLE BIT(18) | ||
| 501 | #define BCMA_CHIPCTL_5357_I2CSPI_PINS_ENABLE BIT(19) | ||
| 502 | |||
| 418 | /* Data for the PMU, if available. | 503 | /* Data for the PMU, if available. |
| 419 | * Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU) | 504 | * Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU) |
| 420 | */ | 505 | */ |
| @@ -430,6 +515,26 @@ struct bcma_pflash { | |||
| 430 | u32 window_size; | 515 | u32 window_size; |
| 431 | }; | 516 | }; |
| 432 | 517 | ||
| 518 | #ifdef CONFIG_BCMA_SFLASH | ||
| 519 | struct bcma_sflash { | ||
| 520 | bool present; | ||
| 521 | u32 window; | ||
| 522 | u32 blocksize; | ||
| 523 | u16 numblocks; | ||
| 524 | u32 size; | ||
| 525 | }; | ||
| 526 | #endif | ||
| 527 | |||
| 528 | #ifdef CONFIG_BCMA_NFLASH | ||
| 529 | struct mtd_info; | ||
| 530 | |||
| 531 | struct bcma_nflash { | ||
| 532 | bool present; | ||
| 533 | |||
| 534 | struct mtd_info *mtd; | ||
| 535 | }; | ||
| 536 | #endif | ||
| 537 | |||
| 433 | struct bcma_serial_port { | 538 | struct bcma_serial_port { |
| 434 | void *regs; | 539 | void *regs; |
| 435 | unsigned long clockspeed; | 540 | unsigned long clockspeed; |
| @@ -450,6 +555,12 @@ struct bcma_drv_cc { | |||
| 450 | struct bcma_chipcommon_pmu pmu; | 555 | struct bcma_chipcommon_pmu pmu; |
| 451 | #ifdef CONFIG_BCMA_DRIVER_MIPS | 556 | #ifdef CONFIG_BCMA_DRIVER_MIPS |
| 452 | struct bcma_pflash pflash; | 557 | struct bcma_pflash pflash; |
| 558 | #ifdef CONFIG_BCMA_SFLASH | ||
| 559 | struct bcma_sflash sflash; | ||
| 560 | #endif | ||
| 561 | #ifdef CONFIG_BCMA_NFLASH | ||
| 562 | struct bcma_nflash nflash; | ||
| 563 | #endif | ||
| 453 | 564 | ||
| 454 | int nr_serial_ports; | 565 | int nr_serial_ports; |
| 455 | struct bcma_serial_port serial_ports[4]; | 566 | struct bcma_serial_port serial_ports[4]; |
diff --git a/include/linux/bcma/bcma_regs.h b/include/linux/bcma/bcma_regs.h index 5a71d5719640..6c9cb93ae3de 100644 --- a/include/linux/bcma/bcma_regs.h +++ b/include/linux/bcma/bcma_regs.h | |||
| @@ -11,11 +11,13 @@ | |||
| 11 | #define BCMA_CLKCTLST_HAVEHTREQ 0x00000010 /* HT available request */ | 11 | #define BCMA_CLKCTLST_HAVEHTREQ 0x00000010 /* HT available request */ |
| 12 | #define BCMA_CLKCTLST_HWCROFF 0x00000020 /* Force HW clock request off */ | 12 | #define BCMA_CLKCTLST_HWCROFF 0x00000020 /* Force HW clock request off */ |
| 13 | #define BCMA_CLKCTLST_EXTRESREQ 0x00000700 /* Mask of external resource requests */ | 13 | #define BCMA_CLKCTLST_EXTRESREQ 0x00000700 /* Mask of external resource requests */ |
| 14 | #define BCMA_CLKCTLST_EXTRESREQ_SHIFT 8 | ||
| 14 | #define BCMA_CLKCTLST_HAVEALP 0x00010000 /* ALP available */ | 15 | #define BCMA_CLKCTLST_HAVEALP 0x00010000 /* ALP available */ |
| 15 | #define BCMA_CLKCTLST_HAVEHT 0x00020000 /* HT available */ | 16 | #define BCMA_CLKCTLST_HAVEHT 0x00020000 /* HT available */ |
| 16 | #define BCMA_CLKCTLST_BP_ON_ALP 0x00040000 /* RO: running on ALP clock */ | 17 | #define BCMA_CLKCTLST_BP_ON_ALP 0x00040000 /* RO: running on ALP clock */ |
| 17 | #define BCMA_CLKCTLST_BP_ON_HT 0x00080000 /* RO: running on HT clock */ | 18 | #define BCMA_CLKCTLST_BP_ON_HT 0x00080000 /* RO: running on HT clock */ |
| 18 | #define BCMA_CLKCTLST_EXTRESST 0x07000000 /* Mask of external resource status */ | 19 | #define BCMA_CLKCTLST_EXTRESST 0x07000000 /* Mask of external resource status */ |
| 20 | #define BCMA_CLKCTLST_EXTRESST_SHIFT 24 | ||
| 19 | /* Is there any BCM4328 on BCMA bus? */ | 21 | /* Is there any BCM4328 on BCMA bus? */ |
| 20 | #define BCMA_CLKCTLST_4328A0_HAVEHT 0x00010000 /* 4328a0 has reversed bits */ | 22 | #define BCMA_CLKCTLST_4328A0_HAVEHT 0x00010000 /* 4328a0 has reversed bits */ |
| 21 | #define BCMA_CLKCTLST_4328A0_HAVEALP 0x00020000 /* 4328a0 has reversed bits */ | 23 | #define BCMA_CLKCTLST_4328A0_HAVEALP 0x00020000 /* 4328a0 has reversed bits */ |
| @@ -83,4 +85,6 @@ | |||
| 83 | * (2 ZettaBytes), high 32 bits | 85 | * (2 ZettaBytes), high 32 bits |
| 84 | */ | 86 | */ |
| 85 | 87 | ||
| 88 | #define BCMA_SFLASH 0x1c000000 | ||
| 89 | |||
| 86 | #endif /* LINUX_BCMA_REGS_H_ */ | 90 | #endif /* LINUX_BCMA_REGS_H_ */ |
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h index d426336d92d9..b006ba0a9f42 100644 --- a/include/linux/etherdevice.h +++ b/include/linux/etherdevice.h | |||
| @@ -151,6 +151,17 @@ static inline void eth_broadcast_addr(u8 *addr) | |||
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | /** | 153 | /** |
| 154 | * eth_zero_addr - Assign zero address | ||
| 155 | * @addr: Pointer to a six-byte array containing the Ethernet address | ||
| 156 | * | ||
| 157 | * Assign the zero address to the given address array. | ||
| 158 | */ | ||
| 159 | static inline void eth_zero_addr(u8 *addr) | ||
| 160 | { | ||
| 161 | memset(addr, 0x00, ETH_ALEN); | ||
| 162 | } | ||
| 163 | |||
| 164 | /** | ||
| 154 | * eth_hw_addr_random - Generate software assigned random Ethernet and | 165 | * eth_hw_addr_random - Generate software assigned random Ethernet and |
| 155 | * set device flag | 166 | * set device flag |
| 156 | * @dev: pointer to net_device structure | 167 | * @dev: pointer to net_device structure |
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 21eff418091b..fcb4f8e60c1c 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h | |||
| @@ -45,8 +45,10 @@ struct ethtool_cmd { | |||
| 45 | * bits) in Mbps. Please use | 45 | * bits) in Mbps. Please use |
| 46 | * ethtool_cmd_speed()/_set() to | 46 | * ethtool_cmd_speed()/_set() to |
| 47 | * access it */ | 47 | * access it */ |
| 48 | __u8 eth_tp_mdix; | 48 | __u8 eth_tp_mdix; /* twisted pair MDI-X status */ |
| 49 | __u8 reserved2; | 49 | __u8 eth_tp_mdix_ctrl; /* twisted pair MDI-X control, when set, |
| 50 | * link should be renegotiated if necessary | ||
| 51 | */ | ||
| 50 | __u32 lp_advertising; /* Features the link partner advertises */ | 52 | __u32 lp_advertising; /* Features the link partner advertises */ |
| 51 | __u32 reserved[2]; | 53 | __u32 reserved[2]; |
| 52 | }; | 54 | }; |
| @@ -1229,10 +1231,13 @@ struct ethtool_ops { | |||
| 1229 | #define AUTONEG_DISABLE 0x00 | 1231 | #define AUTONEG_DISABLE 0x00 |
| 1230 | #define AUTONEG_ENABLE 0x01 | 1232 | #define AUTONEG_ENABLE 0x01 |
| 1231 | 1233 | ||
| 1232 | /* Mode MDI or MDI-X */ | 1234 | /* MDI or MDI-X status/control - if MDI/MDI_X/AUTO is set then |
| 1233 | #define ETH_TP_MDI_INVALID 0x00 | 1235 | * the driver is required to renegotiate link |
| 1234 | #define ETH_TP_MDI 0x01 | 1236 | */ |
| 1235 | #define ETH_TP_MDI_X 0x02 | 1237 | #define ETH_TP_MDI_INVALID 0x00 /* status: unknown; control: unsupported */ |
| 1238 | #define ETH_TP_MDI 0x01 /* status: MDI; control: force MDI */ | ||
| 1239 | #define ETH_TP_MDI_X 0x02 /* status: MDI-X; control: force MDI-X */ | ||
| 1240 | #define ETH_TP_MDI_AUTO 0x03 /* control: auto-select */ | ||
| 1236 | 1241 | ||
| 1237 | /* Wake-On-Lan options. */ | 1242 | /* Wake-On-Lan options. */ |
| 1238 | #define WAKE_PHY (1 << 0) | 1243 | #define WAKE_PHY (1 << 0) |
diff --git a/include/linux/filter.h b/include/linux/filter.h index 82b01357af8b..2ded090e10f4 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h | |||
| @@ -74,6 +74,9 @@ struct sock_fprog { /* Required for SO_ATTACH_FILTER. */ | |||
| 74 | #define BPF_LSH 0x60 | 74 | #define BPF_LSH 0x60 |
| 75 | #define BPF_RSH 0x70 | 75 | #define BPF_RSH 0x70 |
| 76 | #define BPF_NEG 0x80 | 76 | #define BPF_NEG 0x80 |
| 77 | #define BPF_MOD 0x90 | ||
| 78 | #define BPF_XOR 0xa0 | ||
| 79 | |||
| 77 | #define BPF_JA 0x00 | 80 | #define BPF_JA 0x00 |
| 78 | #define BPF_JEQ 0x10 | 81 | #define BPF_JEQ 0x10 |
| 79 | #define BPF_JGT 0x20 | 82 | #define BPF_JGT 0x20 |
| @@ -196,10 +199,14 @@ enum { | |||
| 196 | BPF_S_ALU_MUL_K, | 199 | BPF_S_ALU_MUL_K, |
| 197 | BPF_S_ALU_MUL_X, | 200 | BPF_S_ALU_MUL_X, |
| 198 | BPF_S_ALU_DIV_X, | 201 | BPF_S_ALU_DIV_X, |
| 202 | BPF_S_ALU_MOD_K, | ||
| 203 | BPF_S_ALU_MOD_X, | ||
| 199 | BPF_S_ALU_AND_K, | 204 | BPF_S_ALU_AND_K, |
| 200 | BPF_S_ALU_AND_X, | 205 | BPF_S_ALU_AND_X, |
| 201 | BPF_S_ALU_OR_K, | 206 | BPF_S_ALU_OR_K, |
| 202 | BPF_S_ALU_OR_X, | 207 | BPF_S_ALU_OR_X, |
| 208 | BPF_S_ALU_XOR_K, | ||
| 209 | BPF_S_ALU_XOR_X, | ||
| 203 | BPF_S_ALU_LSH_K, | 210 | BPF_S_ALU_LSH_K, |
| 204 | BPF_S_ALU_LSH_X, | 211 | BPF_S_ALU_LSH_X, |
| 205 | BPF_S_ALU_RSH_K, | 212 | BPF_S_ALU_RSH_K, |
diff --git a/include/linux/hash.h b/include/linux/hash.h index b80506bdd733..24df9e70406f 100644 --- a/include/linux/hash.h +++ b/include/linux/hash.h | |||
| @@ -67,4 +67,14 @@ static inline unsigned long hash_ptr(const void *ptr, unsigned int bits) | |||
| 67 | { | 67 | { |
| 68 | return hash_long((unsigned long)ptr, bits); | 68 | return hash_long((unsigned long)ptr, bits); |
| 69 | } | 69 | } |
| 70 | |||
| 71 | static inline u32 hash32_ptr(const void *ptr) | ||
| 72 | { | ||
| 73 | unsigned long val = (unsigned long)ptr; | ||
| 74 | |||
| 75 | #if BITS_PER_LONG == 64 | ||
| 76 | val ^= (val >> 32); | ||
| 77 | #endif | ||
| 78 | return (u32)val; | ||
| 79 | } | ||
| 70 | #endif /* _LINUX_HASH_H */ | 80 | #endif /* _LINUX_HASH_H */ |
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index e02fc682bb68..2385119f8bb0 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
| @@ -1935,36 +1935,6 @@ static inline bool ieee80211_is_public_action(struct ieee80211_hdr *hdr, | |||
| 1935 | } | 1935 | } |
| 1936 | 1936 | ||
| 1937 | /** | 1937 | /** |
| 1938 | * ieee80211_fhss_chan_to_freq - get channel frequency | ||
| 1939 | * @channel: the FHSS channel | ||
| 1940 | * | ||
| 1941 | * Convert IEEE802.11 FHSS channel to frequency (MHz) | ||
| 1942 | * Ref IEEE 802.11-2007 section 14.6 | ||
| 1943 | */ | ||
| 1944 | static inline int ieee80211_fhss_chan_to_freq(int channel) | ||
| 1945 | { | ||
| 1946 | if ((channel > 1) && (channel < 96)) | ||
| 1947 | return channel + 2400; | ||
| 1948 | else | ||
| 1949 | return -1; | ||
| 1950 | } | ||
| 1951 | |||
| 1952 | /** | ||
| 1953 | * ieee80211_freq_to_fhss_chan - get channel | ||
| 1954 | * @freq: the channels frequency | ||
| 1955 | * | ||
| 1956 | * Convert frequency (MHz) to IEEE802.11 FHSS channel | ||
| 1957 | * Ref IEEE 802.11-2007 section 14.6 | ||
| 1958 | */ | ||
| 1959 | static inline int ieee80211_freq_to_fhss_chan(int freq) | ||
| 1960 | { | ||
| 1961 | if ((freq > 2401) && (freq < 2496)) | ||
| 1962 | return freq - 2400; | ||
| 1963 | else | ||
| 1964 | return -1; | ||
| 1965 | } | ||
| 1966 | |||
| 1967 | /** | ||
| 1968 | * ieee80211_dsss_chan_to_freq - get channel center frequency | 1938 | * ieee80211_dsss_chan_to_freq - get channel center frequency |
| 1969 | * @channel: the DSSS channel | 1939 | * @channel: the DSSS channel |
| 1970 | * | 1940 | * |
| @@ -2000,56 +1970,6 @@ static inline int ieee80211_freq_to_dsss_chan(int freq) | |||
| 2000 | return -1; | 1970 | return -1; |
| 2001 | } | 1971 | } |
| 2002 | 1972 | ||
| 2003 | /* Convert IEEE802.11 HR DSSS channel to frequency (MHz) and back | ||
| 2004 | * Ref IEEE 802.11-2007 section 18.4.6.2 | ||
| 2005 | * | ||
| 2006 | * The channels and frequencies are the same as those defined for DSSS | ||
| 2007 | */ | ||
| 2008 | #define ieee80211_hr_chan_to_freq(chan) ieee80211_dsss_chan_to_freq(chan) | ||
| 2009 | #define ieee80211_freq_to_hr_chan(freq) ieee80211_freq_to_dsss_chan(freq) | ||
| 2010 | |||
| 2011 | /* Convert IEEE802.11 ERP channel to frequency (MHz) and back | ||
| 2012 | * Ref IEEE 802.11-2007 section 19.4.2 | ||
| 2013 | */ | ||
| 2014 | #define ieee80211_erp_chan_to_freq(chan) ieee80211_hr_chan_to_freq(chan) | ||
| 2015 | #define ieee80211_freq_to_erp_chan(freq) ieee80211_freq_to_hr_chan(freq) | ||
| 2016 | |||
| 2017 | /** | ||
| 2018 | * ieee80211_ofdm_chan_to_freq - get channel center frequency | ||
| 2019 | * @s_freq: starting frequency == (dotChannelStartingFactor/2) MHz | ||
| 2020 | * @channel: the OFDM channel | ||
| 2021 | * | ||
| 2022 | * Convert IEEE802.11 OFDM channel to center frequency (MHz) | ||
| 2023 | * Ref IEEE 802.11-2007 section 17.3.8.3.2 | ||
| 2024 | */ | ||
| 2025 | static inline int ieee80211_ofdm_chan_to_freq(int s_freq, int channel) | ||
| 2026 | { | ||
| 2027 | if ((channel > 0) && (channel <= 200) && | ||
| 2028 | (s_freq >= 4000)) | ||
| 2029 | return s_freq + (channel * 5); | ||
| 2030 | else | ||
| 2031 | return -1; | ||
| 2032 | } | ||
| 2033 | |||
| 2034 | /** | ||
| 2035 | * ieee80211_freq_to_ofdm_channel - get channel | ||
| 2036 | * @s_freq: starting frequency == (dotChannelStartingFactor/2) MHz | ||
| 2037 | * @freq: the frequency | ||
| 2038 | * | ||
| 2039 | * Convert frequency (MHz) to IEEE802.11 OFDM channel | ||
| 2040 | * Ref IEEE 802.11-2007 section 17.3.8.3.2 | ||
| 2041 | * | ||
| 2042 | * This routine selects the channel with the closest center frequency. | ||
| 2043 | */ | ||
| 2044 | static inline int ieee80211_freq_to_ofdm_chan(int s_freq, int freq) | ||
| 2045 | { | ||
| 2046 | if ((freq > (s_freq + 2)) && (freq <= (s_freq + 1202)) && | ||
| 2047 | (s_freq >= 4000)) | ||
| 2048 | return (freq + 2 - s_freq) / 5; | ||
| 2049 | else | ||
| 2050 | return -1; | ||
| 2051 | } | ||
| 2052 | |||
| 2053 | /** | 1973 | /** |
| 2054 | * ieee80211_tu_to_usec - convert time units (TU) to microseconds | 1974 | * ieee80211_tu_to_usec - convert time units (TU) to microseconds |
| 2055 | * @tu: the TUs | 1975 | * @tu: the TUs |
diff --git a/include/linux/if_arp.h b/include/linux/if_arp.h index f0e69c6e8208..9adcc29f084a 100644 --- a/include/linux/if_arp.h +++ b/include/linux/if_arp.h | |||
| @@ -92,6 +92,7 @@ | |||
| 92 | #define ARPHRD_PHONET 820 /* PhoNet media type */ | 92 | #define ARPHRD_PHONET 820 /* PhoNet media type */ |
| 93 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ | 93 | #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */ |
| 94 | #define ARPHRD_CAIF 822 /* CAIF media type */ | 94 | #define ARPHRD_CAIF 822 /* CAIF media type */ |
| 95 | #define ARPHRD_IP6GRE 823 /* GRE over IPv6 */ | ||
| 95 | 96 | ||
| 96 | #define ARPHRD_VOID 0xFFFF /* Void type, nothing is known */ | 97 | #define ARPHRD_VOID 0xFFFF /* Void type, nothing is known */ |
| 97 | #define ARPHRD_NONE 0xFFFE /* zero header length */ | 98 | #define ARPHRD_NONE 0xFFFE /* zero header length */ |
diff --git a/include/linux/if_link.h b/include/linux/if_link.h index ac173bd2ab65..e4dad4ddf085 100644 --- a/include/linux/if_link.h +++ b/include/linux/if_link.h | |||
| @@ -272,6 +272,22 @@ enum macvlan_mode { | |||
| 272 | 272 | ||
| 273 | #define MACVLAN_FLAG_NOPROMISC 1 | 273 | #define MACVLAN_FLAG_NOPROMISC 1 |
| 274 | 274 | ||
| 275 | /* VXLAN section */ | ||
| 276 | enum { | ||
| 277 | IFLA_VXLAN_UNSPEC, | ||
| 278 | IFLA_VXLAN_ID, | ||
| 279 | IFLA_VXLAN_GROUP, | ||
| 280 | IFLA_VXLAN_LINK, | ||
| 281 | IFLA_VXLAN_LOCAL, | ||
| 282 | IFLA_VXLAN_TTL, | ||
| 283 | IFLA_VXLAN_TOS, | ||
| 284 | IFLA_VXLAN_LEARNING, | ||
| 285 | IFLA_VXLAN_AGEING, | ||
| 286 | IFLA_VXLAN_LIMIT, | ||
| 287 | __IFLA_VXLAN_MAX | ||
| 288 | }; | ||
| 289 | #define IFLA_VXLAN_MAX (__IFLA_VXLAN_MAX - 1) | ||
| 290 | |||
| 275 | /* SR-IOV virtual function management section */ | 291 | /* SR-IOV virtual function management section */ |
| 276 | 292 | ||
| 277 | enum { | 293 | enum { |
| @@ -398,4 +414,22 @@ struct ifla_port_vsi { | |||
| 398 | __u8 pad[3]; | 414 | __u8 pad[3]; |
| 399 | }; | 415 | }; |
| 400 | 416 | ||
| 417 | |||
| 418 | /* IPoIB section */ | ||
| 419 | |||
| 420 | enum { | ||
| 421 | IFLA_IPOIB_UNSPEC, | ||
| 422 | IFLA_IPOIB_PKEY, | ||
| 423 | IFLA_IPOIB_MODE, | ||
| 424 | IFLA_IPOIB_UMCAST, | ||
| 425 | __IFLA_IPOIB_MAX | ||
| 426 | }; | ||
| 427 | |||
| 428 | enum { | ||
| 429 | IPOIB_MODE_DATAGRAM = 0, /* using unreliable datagram QPs */ | ||
| 430 | IPOIB_MODE_CONNECTED = 1, /* using connected QPs */ | ||
| 431 | }; | ||
| 432 | |||
| 433 | #define IFLA_IPOIB_MAX (__IFLA_IPOIB_MAX - 1) | ||
| 434 | |||
| 401 | #endif /* _LINUX_IF_LINK_H */ | 435 | #endif /* _LINUX_IF_LINK_H */ |
diff --git a/include/linux/if_team.h b/include/linux/if_team.h index aa2e167e1ef4..6d88a7f57680 100644 --- a/include/linux/if_team.h +++ b/include/linux/if_team.h | |||
| @@ -67,6 +67,9 @@ struct team_port { | |||
| 67 | struct netpoll *np; | 67 | struct netpoll *np; |
| 68 | #endif | 68 | #endif |
| 69 | 69 | ||
| 70 | s32 priority; /* lower number ~ higher priority */ | ||
| 71 | u16 queue_id; | ||
| 72 | struct list_head qom_list; /* node in queue override mapping list */ | ||
| 70 | long mode_priv[0]; | 73 | long mode_priv[0]; |
| 71 | }; | 74 | }; |
| 72 | 75 | ||
| @@ -105,7 +108,7 @@ struct team_mode_ops { | |||
| 105 | bool (*transmit)(struct team *team, struct sk_buff *skb); | 108 | bool (*transmit)(struct team *team, struct sk_buff *skb); |
| 106 | int (*port_enter)(struct team *team, struct team_port *port); | 109 | int (*port_enter)(struct team *team, struct team_port *port); |
| 107 | void (*port_leave)(struct team *team, struct team_port *port); | 110 | void (*port_leave)(struct team *team, struct team_port *port); |
| 108 | void (*port_change_mac)(struct team *team, struct team_port *port); | 111 | void (*port_change_dev_addr)(struct team *team, struct team_port *port); |
| 109 | void (*port_enabled)(struct team *team, struct team_port *port); | 112 | void (*port_enabled)(struct team *team, struct team_port *port); |
| 110 | void (*port_disabled)(struct team *team, struct team_port *port); | 113 | void (*port_disabled)(struct team *team, struct team_port *port); |
| 111 | }; | 114 | }; |
| @@ -115,6 +118,7 @@ enum team_option_type { | |||
| 115 | TEAM_OPTION_TYPE_STRING, | 118 | TEAM_OPTION_TYPE_STRING, |
| 116 | TEAM_OPTION_TYPE_BINARY, | 119 | TEAM_OPTION_TYPE_BINARY, |
| 117 | TEAM_OPTION_TYPE_BOOL, | 120 | TEAM_OPTION_TYPE_BOOL, |
| 121 | TEAM_OPTION_TYPE_S32, | ||
| 118 | }; | 122 | }; |
| 119 | 123 | ||
| 120 | struct team_option_inst_info { | 124 | struct team_option_inst_info { |
| @@ -131,6 +135,7 @@ struct team_gsetter_ctx { | |||
| 131 | u32 len; | 135 | u32 len; |
| 132 | } bin_val; | 136 | } bin_val; |
| 133 | bool bool_val; | 137 | bool bool_val; |
| 138 | s32 s32_val; | ||
| 134 | } data; | 139 | } data; |
| 135 | struct team_option_inst_info *info; | 140 | struct team_option_inst_info *info; |
| 136 | }; | 141 | }; |
| @@ -182,6 +187,8 @@ struct team { | |||
| 182 | 187 | ||
| 183 | const struct team_mode *mode; | 188 | const struct team_mode *mode; |
| 184 | struct team_mode_ops ops; | 189 | struct team_mode_ops ops; |
| 190 | bool queue_override_enabled; | ||
| 191 | struct list_head *qom_lists; /* array of queue override mapping lists */ | ||
| 185 | long mode_priv[TEAM_MODE_PRIV_LONGS]; | 192 | long mode_priv[TEAM_MODE_PRIV_LONGS]; |
| 186 | }; | 193 | }; |
| 187 | 194 | ||
| @@ -231,7 +238,7 @@ static inline struct team_port *team_get_port_by_index_rcu(struct team *team, | |||
| 231 | return NULL; | 238 | return NULL; |
| 232 | } | 239 | } |
| 233 | 240 | ||
| 234 | extern int team_port_set_team_mac(struct team_port *port); | 241 | extern int team_port_set_team_dev_addr(struct team_port *port); |
| 235 | extern int team_options_register(struct team *team, | 242 | extern int team_options_register(struct team *team, |
| 236 | const struct team_option *option, | 243 | const struct team_option *option, |
| 237 | size_t option_count); | 244 | size_t option_count); |
diff --git a/include/linux/if_tunnel.h b/include/linux/if_tunnel.h index 5efff60b6f56..8c5035ac3142 100644 --- a/include/linux/if_tunnel.h +++ b/include/linux/if_tunnel.h | |||
| @@ -75,6 +75,9 @@ enum { | |||
| 75 | IFLA_GRE_TTL, | 75 | IFLA_GRE_TTL, |
| 76 | IFLA_GRE_TOS, | 76 | IFLA_GRE_TOS, |
| 77 | IFLA_GRE_PMTUDISC, | 77 | IFLA_GRE_PMTUDISC, |
| 78 | IFLA_GRE_ENCAP_LIMIT, | ||
| 79 | IFLA_GRE_FLOWINFO, | ||
| 80 | IFLA_GRE_FLAGS, | ||
| 78 | __IFLA_GRE_MAX, | 81 | __IFLA_GRE_MAX, |
| 79 | }; | 82 | }; |
| 80 | 83 | ||
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h index a810987cb80e..e6ff12dd717b 100644 --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h | |||
| @@ -74,8 +74,6 @@ static inline struct vlan_ethhdr *vlan_eth_hdr(const struct sk_buff *skb) | |||
| 74 | /* found in socket.c */ | 74 | /* found in socket.c */ |
| 75 | extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *)); | 75 | extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *)); |
| 76 | 76 | ||
| 77 | struct vlan_info; | ||
| 78 | |||
| 79 | static inline int is_vlan_dev(struct net_device *dev) | 77 | static inline int is_vlan_dev(struct net_device *dev) |
| 80 | { | 78 | { |
| 81 | return dev->priv_flags & IFF_802_1Q_VLAN; | 79 | return dev->priv_flags & IFF_802_1Q_VLAN; |
| @@ -101,6 +99,8 @@ extern int vlan_vids_add_by_dev(struct net_device *dev, | |||
| 101 | const struct net_device *by_dev); | 99 | const struct net_device *by_dev); |
| 102 | extern void vlan_vids_del_by_dev(struct net_device *dev, | 100 | extern void vlan_vids_del_by_dev(struct net_device *dev, |
| 103 | const struct net_device *by_dev); | 101 | const struct net_device *by_dev); |
| 102 | |||
| 103 | extern bool vlan_uses_dev(const struct net_device *dev); | ||
| 104 | #else | 104 | #else |
| 105 | static inline struct net_device * | 105 | static inline struct net_device * |
| 106 | __vlan_find_dev_deep(struct net_device *real_dev, u16 vlan_id) | 106 | __vlan_find_dev_deep(struct net_device *real_dev, u16 vlan_id) |
| @@ -151,6 +151,11 @@ static inline void vlan_vids_del_by_dev(struct net_device *dev, | |||
| 151 | const struct net_device *by_dev) | 151 | const struct net_device *by_dev) |
| 152 | { | 152 | { |
| 153 | } | 153 | } |
| 154 | |||
| 155 | static inline bool vlan_uses_dev(const struct net_device *dev) | ||
| 156 | { | ||
| 157 | return false; | ||
| 158 | } | ||
| 154 | #endif | 159 | #endif |
| 155 | 160 | ||
| 156 | /** | 161 | /** |
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h index 67f9ddacb70c..d032780d0ce5 100644 --- a/include/linux/inetdevice.h +++ b/include/linux/inetdevice.h | |||
| @@ -104,9 +104,14 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev) | |||
| 104 | #define IN_DEV_ANDCONF(in_dev, attr) \ | 104 | #define IN_DEV_ANDCONF(in_dev, attr) \ |
| 105 | (IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr) && \ | 105 | (IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr) && \ |
| 106 | IN_DEV_CONF_GET((in_dev), attr)) | 106 | IN_DEV_CONF_GET((in_dev), attr)) |
| 107 | #define IN_DEV_ORCONF(in_dev, attr) \ | 107 | |
| 108 | (IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr) || \ | 108 | #define IN_DEV_NET_ORCONF(in_dev, net, attr) \ |
| 109 | (IPV4_DEVCONF_ALL(net, attr) || \ | ||
| 109 | IN_DEV_CONF_GET((in_dev), attr)) | 110 | IN_DEV_CONF_GET((in_dev), attr)) |
| 111 | |||
| 112 | #define IN_DEV_ORCONF(in_dev, attr) \ | ||
| 113 | IN_DEV_NET_ORCONF(in_dev, dev_net(in_dev->dev), attr) | ||
| 114 | |||
| 110 | #define IN_DEV_MAXCONF(in_dev, attr) \ | 115 | #define IN_DEV_MAXCONF(in_dev, attr) \ |
| 111 | (max(IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr), \ | 116 | (max(IPV4_DEVCONF_ALL(dev_net(in_dev->dev), attr), \ |
| 112 | IN_DEV_CONF_GET((in_dev), attr))) | 117 | IN_DEV_CONF_GET((in_dev), attr))) |
| @@ -133,6 +138,8 @@ static inline void ipv4_devconf_setall(struct in_device *in_dev) | |||
| 133 | IN_DEV_ORCONF((in_dev), \ | 138 | IN_DEV_ORCONF((in_dev), \ |
| 134 | PROMOTE_SECONDARIES) | 139 | PROMOTE_SECONDARIES) |
| 135 | #define IN_DEV_ROUTE_LOCALNET(in_dev) IN_DEV_ORCONF(in_dev, ROUTE_LOCALNET) | 140 | #define IN_DEV_ROUTE_LOCALNET(in_dev) IN_DEV_ORCONF(in_dev, ROUTE_LOCALNET) |
| 141 | #define IN_DEV_NET_ROUTE_LOCALNET(in_dev, net) \ | ||
| 142 | IN_DEV_NET_ORCONF(in_dev, net, ROUTE_LOCALNET) | ||
| 136 | 143 | ||
| 137 | #define IN_DEV_RX_REDIRECTS(in_dev) \ | 144 | #define IN_DEV_RX_REDIRECTS(in_dev) \ |
| 138 | ((IN_DEV_FORWARD(in_dev) && \ | 145 | ((IN_DEV_FORWARD(in_dev) && \ |
diff --git a/include/linux/ip6_tunnel.h b/include/linux/ip6_tunnel.h index bf22b0317902..48af63c9a48d 100644 --- a/include/linux/ip6_tunnel.h +++ b/include/linux/ip6_tunnel.h | |||
| @@ -31,4 +31,21 @@ struct ip6_tnl_parm { | |||
| 31 | struct in6_addr raddr; /* remote tunnel end-point address */ | 31 | struct in6_addr raddr; /* remote tunnel end-point address */ |
| 32 | }; | 32 | }; |
| 33 | 33 | ||
| 34 | struct ip6_tnl_parm2 { | ||
| 35 | char name[IFNAMSIZ]; /* name of tunnel device */ | ||
| 36 | int link; /* ifindex of underlying L2 interface */ | ||
| 37 | __u8 proto; /* tunnel protocol */ | ||
| 38 | __u8 encap_limit; /* encapsulation limit for tunnel */ | ||
| 39 | __u8 hop_limit; /* hop limit for tunnel */ | ||
| 40 | __be32 flowinfo; /* traffic class and flowlabel for tunnel */ | ||
| 41 | __u32 flags; /* tunnel flags */ | ||
| 42 | struct in6_addr laddr; /* local tunnel end-point address */ | ||
| 43 | struct in6_addr raddr; /* remote tunnel end-point address */ | ||
| 44 | |||
| 45 | __be16 i_flags; | ||
| 46 | __be16 o_flags; | ||
| 47 | __be32 i_key; | ||
| 48 | __be32 o_key; | ||
| 49 | }; | ||
| 50 | |||
| 34 | #endif | 51 | #endif |
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h index 879db26ec401..0b94e91ed685 100644 --- a/include/linux/ipv6.h +++ b/include/linux/ipv6.h | |||
| @@ -256,6 +256,7 @@ struct inet6_skb_parm { | |||
| 256 | #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE) | 256 | #if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE) |
| 257 | __u16 dsthao; | 257 | __u16 dsthao; |
| 258 | #endif | 258 | #endif |
| 259 | __u16 frag_max_size; | ||
| 259 | 260 | ||
| 260 | #define IP6SKB_XFRM_TRANSFORMED 1 | 261 | #define IP6SKB_XFRM_TRANSFORMED 1 |
| 261 | #define IP6SKB_FORWARDED 2 | 262 | #define IP6SKB_FORWARDED 2 |
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h index 82680541576d..05e3c2c7a8cf 100644 --- a/include/linux/jiffies.h +++ b/include/linux/jiffies.h | |||
| @@ -312,7 +312,13 @@ extern void jiffies_to_timespec(const unsigned long jiffies, | |||
| 312 | extern unsigned long timeval_to_jiffies(const struct timeval *value); | 312 | extern unsigned long timeval_to_jiffies(const struct timeval *value); |
| 313 | extern void jiffies_to_timeval(const unsigned long jiffies, | 313 | extern void jiffies_to_timeval(const unsigned long jiffies, |
| 314 | struct timeval *value); | 314 | struct timeval *value); |
| 315 | |||
| 315 | extern clock_t jiffies_to_clock_t(unsigned long x); | 316 | extern clock_t jiffies_to_clock_t(unsigned long x); |
| 317 | static inline clock_t jiffies_delta_to_clock_t(long delta) | ||
| 318 | { | ||
| 319 | return jiffies_to_clock_t(max(0L, delta)); | ||
| 320 | } | ||
| 321 | |||
| 316 | extern unsigned long clock_t_to_jiffies(unsigned long x); | 322 | extern unsigned long clock_t_to_jiffies(unsigned long x); |
| 317 | extern u64 jiffies_64_to_clock_t(u64 x); | 323 | extern u64 jiffies_64_to_clock_t(u64 x); |
| 318 | extern u64 nsec_to_clock_t(u64 x); | 324 | extern u64 nsec_to_clock_t(u64 x); |
diff --git a/include/linux/mdio.h b/include/linux/mdio.h index 7cccafe50e7b..6c406845f7e2 100644 --- a/include/linux/mdio.h +++ b/include/linux/mdio.h | |||
| @@ -377,5 +377,88 @@ static inline void mdio45_ethtool_gset(const struct mdio_if_info *mdio, | |||
| 377 | extern int mdio_mii_ioctl(const struct mdio_if_info *mdio, | 377 | extern int mdio_mii_ioctl(const struct mdio_if_info *mdio, |
| 378 | struct mii_ioctl_data *mii_data, int cmd); | 378 | struct mii_ioctl_data *mii_data, int cmd); |
| 379 | 379 | ||
| 380 | /** | ||
| 381 | * mmd_eee_cap_to_ethtool_sup_t | ||
| 382 | * @eee_cap: value of the MMD EEE Capability register | ||
| 383 | * | ||
| 384 | * A small helper function that translates MMD EEE Capability (3.20) bits | ||
| 385 | * to ethtool supported settings. | ||
| 386 | */ | ||
| 387 | static inline u32 mmd_eee_cap_to_ethtool_sup_t(u16 eee_cap) | ||
| 388 | { | ||
| 389 | u32 supported = 0; | ||
| 390 | |||
| 391 | if (eee_cap & MDIO_EEE_100TX) | ||
| 392 | supported |= SUPPORTED_100baseT_Full; | ||
| 393 | if (eee_cap & MDIO_EEE_1000T) | ||
| 394 | supported |= SUPPORTED_1000baseT_Full; | ||
| 395 | if (eee_cap & MDIO_EEE_10GT) | ||
| 396 | supported |= SUPPORTED_10000baseT_Full; | ||
| 397 | if (eee_cap & MDIO_EEE_1000KX) | ||
| 398 | supported |= SUPPORTED_1000baseKX_Full; | ||
| 399 | if (eee_cap & MDIO_EEE_10GKX4) | ||
| 400 | supported |= SUPPORTED_10000baseKX4_Full; | ||
| 401 | if (eee_cap & MDIO_EEE_10GKR) | ||
| 402 | supported |= SUPPORTED_10000baseKR_Full; | ||
| 403 | |||
| 404 | return supported; | ||
| 405 | } | ||
| 406 | |||
| 407 | /** | ||
| 408 | * mmd_eee_adv_to_ethtool_adv_t | ||
| 409 | * @eee_adv: value of the MMD EEE Advertisement/Link Partner Ability registers | ||
| 410 | * | ||
| 411 | * A small helper function that translates the MMD EEE Advertisment (7.60) | ||
| 412 | * and MMD EEE Link Partner Ability (7.61) bits to ethtool advertisement | ||
| 413 | * settings. | ||
| 414 | */ | ||
| 415 | static inline u32 mmd_eee_adv_to_ethtool_adv_t(u16 eee_adv) | ||
| 416 | { | ||
| 417 | u32 adv = 0; | ||
| 418 | |||
| 419 | if (eee_adv & MDIO_EEE_100TX) | ||
| 420 | adv |= ADVERTISED_100baseT_Full; | ||
| 421 | if (eee_adv & MDIO_EEE_1000T) | ||
| 422 | adv |= ADVERTISED_1000baseT_Full; | ||
| 423 | if (eee_adv & MDIO_EEE_10GT) | ||
| 424 | adv |= ADVERTISED_10000baseT_Full; | ||
| 425 | if (eee_adv & MDIO_EEE_1000KX) | ||
| 426 | adv |= ADVERTISED_1000baseKX_Full; | ||
| 427 | if (eee_adv & MDIO_EEE_10GKX4) | ||
| 428 | adv |= ADVERTISED_10000baseKX4_Full; | ||
| 429 | if (eee_adv & MDIO_EEE_10GKR) | ||
| 430 | adv |= ADVERTISED_10000baseKR_Full; | ||
| 431 | |||
| 432 | return adv; | ||
| 433 | } | ||
| 434 | |||
| 435 | /** | ||
| 436 | * ethtool_adv_to_mmd_eee_adv_t | ||
| 437 | * @adv: the ethtool advertisement settings | ||
| 438 | * | ||
| 439 | * A small helper function that translates ethtool advertisement settings | ||
| 440 | * to EEE advertisements for the MMD EEE Advertisement (7.60) and | ||
| 441 | * MMD EEE Link Partner Ability (7.61) registers. | ||
| 442 | */ | ||
| 443 | static inline u16 ethtool_adv_to_mmd_eee_adv_t(u32 adv) | ||
| 444 | { | ||
| 445 | u16 reg = 0; | ||
| 446 | |||
| 447 | if (adv & ADVERTISED_100baseT_Full) | ||
| 448 | reg |= MDIO_EEE_100TX; | ||
| 449 | if (adv & ADVERTISED_1000baseT_Full) | ||
| 450 | reg |= MDIO_EEE_1000T; | ||
| 451 | if (adv & ADVERTISED_10000baseT_Full) | ||
| 452 | reg |= MDIO_EEE_10GT; | ||
| 453 | if (adv & ADVERTISED_1000baseKX_Full) | ||
| 454 | reg |= MDIO_EEE_1000KX; | ||
| 455 | if (adv & ADVERTISED_10000baseKX4_Full) | ||
| 456 | reg |= MDIO_EEE_10GKX4; | ||
| 457 | if (adv & ADVERTISED_10000baseKR_Full) | ||
| 458 | reg |= MDIO_EEE_10GKR; | ||
| 459 | |||
| 460 | return reg; | ||
| 461 | } | ||
| 462 | |||
| 380 | #endif /* __KERNEL__ */ | 463 | #endif /* __KERNEL__ */ |
| 381 | #endif /* __LINUX_MDIO_H__ */ | 464 | #endif /* __LINUX_MDIO_H__ */ |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 5f49cc0a107e..01646aa53b0e 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -338,18 +338,16 @@ struct napi_struct { | |||
| 338 | 338 | ||
| 339 | unsigned long state; | 339 | unsigned long state; |
| 340 | int weight; | 340 | int weight; |
| 341 | unsigned int gro_count; | ||
| 341 | int (*poll)(struct napi_struct *, int); | 342 | int (*poll)(struct napi_struct *, int); |
| 342 | #ifdef CONFIG_NETPOLL | 343 | #ifdef CONFIG_NETPOLL |
| 343 | spinlock_t poll_lock; | 344 | spinlock_t poll_lock; |
| 344 | int poll_owner; | 345 | int poll_owner; |
| 345 | #endif | 346 | #endif |
| 346 | |||
| 347 | unsigned int gro_count; | ||
| 348 | |||
| 349 | struct net_device *dev; | 347 | struct net_device *dev; |
| 350 | struct list_head dev_list; | ||
| 351 | struct sk_buff *gro_list; | 348 | struct sk_buff *gro_list; |
| 352 | struct sk_buff *skb; | 349 | struct sk_buff *skb; |
| 350 | struct list_head dev_list; | ||
| 353 | }; | 351 | }; |
| 354 | 352 | ||
| 355 | enum { | 353 | enum { |
| @@ -906,11 +904,12 @@ struct netdev_fcoe_hbainfo { | |||
| 906 | * feature set might be less than what was returned by ndo_fix_features()). | 904 | * feature set might be less than what was returned by ndo_fix_features()). |
| 907 | * Must return >0 or -errno if it changed dev->features itself. | 905 | * Must return >0 or -errno if it changed dev->features itself. |
| 908 | * | 906 | * |
| 909 | * int (*ndo_fdb_add)(struct ndmsg *ndm, struct net_device *dev, | 907 | * int (*ndo_fdb_add)(struct ndmsg *ndm, struct nlattr *tb[], |
| 910 | * unsigned char *addr, u16 flags) | 908 | * struct net_device *dev, |
| 909 | * const unsigned char *addr, u16 flags) | ||
| 911 | * Adds an FDB entry to dev for addr. | 910 | * Adds an FDB entry to dev for addr. |
| 912 | * int (*ndo_fdb_del)(struct ndmsg *ndm, struct net_device *dev, | 911 | * int (*ndo_fdb_del)(struct ndmsg *ndm, struct net_device *dev, |
| 913 | * unsigned char *addr) | 912 | * const unsigned char *addr) |
| 914 | * Deletes the FDB entry from dev coresponding to addr. | 913 | * Deletes the FDB entry from dev coresponding to addr. |
| 915 | * int (*ndo_fdb_dump)(struct sk_buff *skb, struct netlink_callback *cb, | 914 | * int (*ndo_fdb_dump)(struct sk_buff *skb, struct netlink_callback *cb, |
| 916 | * struct net_device *dev, int idx) | 915 | * struct net_device *dev, int idx) |
| @@ -1016,12 +1015,13 @@ struct net_device_ops { | |||
| 1016 | void (*ndo_neigh_destroy)(struct neighbour *n); | 1015 | void (*ndo_neigh_destroy)(struct neighbour *n); |
| 1017 | 1016 | ||
| 1018 | int (*ndo_fdb_add)(struct ndmsg *ndm, | 1017 | int (*ndo_fdb_add)(struct ndmsg *ndm, |
| 1018 | struct nlattr *tb[], | ||
| 1019 | struct net_device *dev, | 1019 | struct net_device *dev, |
| 1020 | unsigned char *addr, | 1020 | const unsigned char *addr, |
| 1021 | u16 flags); | 1021 | u16 flags); |
| 1022 | int (*ndo_fdb_del)(struct ndmsg *ndm, | 1022 | int (*ndo_fdb_del)(struct ndmsg *ndm, |
| 1023 | struct net_device *dev, | 1023 | struct net_device *dev, |
| 1024 | unsigned char *addr); | 1024 | const unsigned char *addr); |
| 1025 | int (*ndo_fdb_dump)(struct sk_buff *skb, | 1025 | int (*ndo_fdb_dump)(struct sk_buff *skb, |
| 1026 | struct netlink_callback *cb, | 1026 | struct netlink_callback *cb, |
| 1027 | struct net_device *dev, | 1027 | struct net_device *dev, |
| @@ -1322,6 +1322,8 @@ struct net_device { | |||
| 1322 | /* phy device may attach itself for hardware timestamping */ | 1322 | /* phy device may attach itself for hardware timestamping */ |
| 1323 | struct phy_device *phydev; | 1323 | struct phy_device *phydev; |
| 1324 | 1324 | ||
| 1325 | struct lock_class_key *qdisc_tx_busylock; | ||
| 1326 | |||
| 1325 | /* group the device belongs to */ | 1327 | /* group the device belongs to */ |
| 1326 | int group; | 1328 | int group; |
| 1327 | 1329 | ||
| @@ -1401,6 +1403,9 @@ static inline void netdev_for_each_tx_queue(struct net_device *dev, | |||
| 1401 | f(dev, &dev->_tx[i], arg); | 1403 | f(dev, &dev->_tx[i], arg); |
| 1402 | } | 1404 | } |
| 1403 | 1405 | ||
| 1406 | extern struct netdev_queue *netdev_pick_tx(struct net_device *dev, | ||
| 1407 | struct sk_buff *skb); | ||
| 1408 | |||
| 1404 | /* | 1409 | /* |
| 1405 | * Net namespace inlines | 1410 | * Net namespace inlines |
| 1406 | */ | 1411 | */ |
| @@ -1553,7 +1558,7 @@ struct packet_type { | |||
| 1553 | #define NETDEV_PRE_TYPE_CHANGE 0x000E | 1558 | #define NETDEV_PRE_TYPE_CHANGE 0x000E |
| 1554 | #define NETDEV_POST_TYPE_CHANGE 0x000F | 1559 | #define NETDEV_POST_TYPE_CHANGE 0x000F |
| 1555 | #define NETDEV_POST_INIT 0x0010 | 1560 | #define NETDEV_POST_INIT 0x0010 |
| 1556 | #define NETDEV_UNREGISTER_BATCH 0x0011 | 1561 | #define NETDEV_UNREGISTER_FINAL 0x0011 |
| 1557 | #define NETDEV_RELEASE 0x0012 | 1562 | #define NETDEV_RELEASE 0x0012 |
| 1558 | #define NETDEV_NOTIFY_PEERS 0x0013 | 1563 | #define NETDEV_NOTIFY_PEERS 0x0013 |
| 1559 | #define NETDEV_JOIN 0x0014 | 1564 | #define NETDEV_JOIN 0x0014 |
| @@ -2227,6 +2232,7 @@ static inline void dev_hold(struct net_device *dev) | |||
| 2227 | * kind of lower layer not just hardware media. | 2232 | * kind of lower layer not just hardware media. |
| 2228 | */ | 2233 | */ |
| 2229 | 2234 | ||
| 2235 | extern void linkwatch_init_dev(struct net_device *dev); | ||
| 2230 | extern void linkwatch_fire_event(struct net_device *dev); | 2236 | extern void linkwatch_fire_event(struct net_device *dev); |
| 2231 | extern void linkwatch_forget_dev(struct net_device *dev); | 2237 | extern void linkwatch_forget_dev(struct net_device *dev); |
| 2232 | 2238 | ||
| @@ -2249,8 +2255,6 @@ extern void netif_carrier_on(struct net_device *dev); | |||
| 2249 | 2255 | ||
| 2250 | extern void netif_carrier_off(struct net_device *dev); | 2256 | extern void netif_carrier_off(struct net_device *dev); |
| 2251 | 2257 | ||
| 2252 | extern void netif_notify_peers(struct net_device *dev); | ||
| 2253 | |||
| 2254 | /** | 2258 | /** |
| 2255 | * netif_dormant_on - mark device as dormant. | 2259 | * netif_dormant_on - mark device as dormant. |
| 2256 | * @dev: network device | 2260 | * @dev: network device |
| @@ -2560,9 +2564,9 @@ extern void __hw_addr_flush(struct netdev_hw_addr_list *list); | |||
| 2560 | extern void __hw_addr_init(struct netdev_hw_addr_list *list); | 2564 | extern void __hw_addr_init(struct netdev_hw_addr_list *list); |
| 2561 | 2565 | ||
| 2562 | /* Functions used for device addresses handling */ | 2566 | /* Functions used for device addresses handling */ |
| 2563 | extern int dev_addr_add(struct net_device *dev, unsigned char *addr, | 2567 | extern int dev_addr_add(struct net_device *dev, const unsigned char *addr, |
| 2564 | unsigned char addr_type); | 2568 | unsigned char addr_type); |
| 2565 | extern int dev_addr_del(struct net_device *dev, unsigned char *addr, | 2569 | extern int dev_addr_del(struct net_device *dev, const unsigned char *addr, |
| 2566 | unsigned char addr_type); | 2570 | unsigned char addr_type); |
| 2567 | extern int dev_addr_add_multiple(struct net_device *to_dev, | 2571 | extern int dev_addr_add_multiple(struct net_device *to_dev, |
| 2568 | struct net_device *from_dev, | 2572 | struct net_device *from_dev, |
| @@ -2574,20 +2578,20 @@ extern void dev_addr_flush(struct net_device *dev); | |||
| 2574 | extern int dev_addr_init(struct net_device *dev); | 2578 | extern int dev_addr_init(struct net_device *dev); |
| 2575 | 2579 | ||
| 2576 | /* Functions used for unicast addresses handling */ | 2580 | /* Functions used for unicast addresses handling */ |
| 2577 | extern int dev_uc_add(struct net_device *dev, unsigned char *addr); | 2581 | extern int dev_uc_add(struct net_device *dev, const unsigned char *addr); |
| 2578 | extern int dev_uc_add_excl(struct net_device *dev, unsigned char *addr); | 2582 | extern int dev_uc_add_excl(struct net_device *dev, const unsigned char *addr); |
| 2579 | extern int dev_uc_del(struct net_device *dev, unsigned char *addr); | 2583 | extern int dev_uc_del(struct net_device *dev, const unsigned char *addr); |
| 2580 | extern int dev_uc_sync(struct net_device *to, struct net_device *from); | 2584 | extern int dev_uc_sync(struct net_device *to, struct net_device *from); |
| 2581 | extern void dev_uc_unsync(struct net_device *to, struct net_device *from); | 2585 | extern void dev_uc_unsync(struct net_device *to, struct net_device *from); |
| 2582 | extern void dev_uc_flush(struct net_device *dev); | 2586 | extern void dev_uc_flush(struct net_device *dev); |
| 2583 | extern void dev_uc_init(struct net_device *dev); | 2587 | extern void dev_uc_init(struct net_device *dev); |
| 2584 | 2588 | ||
| 2585 | /* Functions used for multicast addresses handling */ | 2589 | /* Functions used for multicast addresses handling */ |
| 2586 | extern int dev_mc_add(struct net_device *dev, unsigned char *addr); | 2590 | extern int dev_mc_add(struct net_device *dev, const unsigned char *addr); |
| 2587 | extern int dev_mc_add_global(struct net_device *dev, unsigned char *addr); | 2591 | extern int dev_mc_add_global(struct net_device *dev, const unsigned char *addr); |
| 2588 | extern int dev_mc_add_excl(struct net_device *dev, unsigned char *addr); | 2592 | extern int dev_mc_add_excl(struct net_device *dev, const unsigned char *addr); |
| 2589 | extern int dev_mc_del(struct net_device *dev, unsigned char *addr); | 2593 | extern int dev_mc_del(struct net_device *dev, const unsigned char *addr); |
| 2590 | extern int dev_mc_del_global(struct net_device *dev, unsigned char *addr); | 2594 | extern int dev_mc_del_global(struct net_device *dev, const unsigned char *addr); |
| 2591 | extern int dev_mc_sync(struct net_device *to, struct net_device *from); | 2595 | extern int dev_mc_sync(struct net_device *to, struct net_device *from); |
| 2592 | extern void dev_mc_unsync(struct net_device *to, struct net_device *from); | 2596 | extern void dev_mc_unsync(struct net_device *to, struct net_device *from); |
| 2593 | extern void dev_mc_flush(struct net_device *dev); | 2597 | extern void dev_mc_flush(struct net_device *dev); |
| @@ -2599,8 +2603,7 @@ extern void __dev_set_rx_mode(struct net_device *dev); | |||
| 2599 | extern int dev_set_promiscuity(struct net_device *dev, int inc); | 2603 | extern int dev_set_promiscuity(struct net_device *dev, int inc); |
| 2600 | extern int dev_set_allmulti(struct net_device *dev, int inc); | 2604 | extern int dev_set_allmulti(struct net_device *dev, int inc); |
| 2601 | extern void netdev_state_change(struct net_device *dev); | 2605 | extern void netdev_state_change(struct net_device *dev); |
| 2602 | extern int netdev_bonding_change(struct net_device *dev, | 2606 | extern void netdev_notify_peers(struct net_device *dev); |
| 2603 | unsigned long event); | ||
| 2604 | extern void netdev_features_change(struct net_device *dev); | 2607 | extern void netdev_features_change(struct net_device *dev); |
| 2605 | /* Load a device via the kmod */ | 2608 | /* Load a device via the kmod */ |
| 2606 | extern void dev_load(struct net *net, const char *name); | 2609 | extern void dev_load(struct net *net, const char *name); |
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h index c613cf0d7884..1dcf2a38e51f 100644 --- a/include/linux/netfilter.h +++ b/include/linux/netfilter.h | |||
| @@ -342,7 +342,7 @@ extern int nf_register_afinfo(const struct nf_afinfo *afinfo); | |||
| 342 | extern void nf_unregister_afinfo(const struct nf_afinfo *afinfo); | 342 | extern void nf_unregister_afinfo(const struct nf_afinfo *afinfo); |
| 343 | 343 | ||
| 344 | #include <net/flow.h> | 344 | #include <net/flow.h> |
| 345 | extern void (*ip_nat_decode_session)(struct sk_buff *, struct flowi *); | 345 | extern void (*nf_nat_decode_session_hook)(struct sk_buff *, struct flowi *); |
| 346 | 346 | ||
| 347 | static inline void | 347 | static inline void |
| 348 | nf_nat_decode_session(struct sk_buff *skb, struct flowi *fl, u_int8_t family) | 348 | nf_nat_decode_session(struct sk_buff *skb, struct flowi *fl, u_int8_t family) |
| @@ -350,13 +350,11 @@ nf_nat_decode_session(struct sk_buff *skb, struct flowi *fl, u_int8_t family) | |||
| 350 | #ifdef CONFIG_NF_NAT_NEEDED | 350 | #ifdef CONFIG_NF_NAT_NEEDED |
| 351 | void (*decodefn)(struct sk_buff *, struct flowi *); | 351 | void (*decodefn)(struct sk_buff *, struct flowi *); |
| 352 | 352 | ||
| 353 | if (family == AF_INET) { | 353 | rcu_read_lock(); |
| 354 | rcu_read_lock(); | 354 | decodefn = rcu_dereference(nf_nat_decode_session_hook); |
| 355 | decodefn = rcu_dereference(ip_nat_decode_session); | 355 | if (decodefn) |
| 356 | if (decodefn) | 356 | decodefn(skb, fl); |
| 357 | decodefn(skb, fl); | 357 | rcu_read_unlock(); |
| 358 | rcu_read_unlock(); | ||
| 359 | } | ||
| 360 | #endif | 358 | #endif |
| 361 | } | 359 | } |
| 362 | 360 | ||
diff --git a/include/linux/netfilter/ipset/ip_set.h b/include/linux/netfilter/ipset/ip_set.h index 2edc64cab739..528697b3c152 100644 --- a/include/linux/netfilter/ipset/ip_set.h +++ b/include/linux/netfilter/ipset/ip_set.h | |||
| @@ -190,6 +190,7 @@ enum ip_set_dim { | |||
| 190 | * If changed, new revision of iptables match/target is required. | 190 | * If changed, new revision of iptables match/target is required. |
| 191 | */ | 191 | */ |
| 192 | IPSET_DIM_MAX = 6, | 192 | IPSET_DIM_MAX = 6, |
| 193 | IPSET_BIT_RETURN_NOMATCH = 7, | ||
| 193 | }; | 194 | }; |
| 194 | 195 | ||
| 195 | /* Option flags for kernel operations */ | 196 | /* Option flags for kernel operations */ |
| @@ -198,6 +199,7 @@ enum ip_set_kopt { | |||
| 198 | IPSET_DIM_ONE_SRC = (1 << IPSET_DIM_ONE), | 199 | IPSET_DIM_ONE_SRC = (1 << IPSET_DIM_ONE), |
| 199 | IPSET_DIM_TWO_SRC = (1 << IPSET_DIM_TWO), | 200 | IPSET_DIM_TWO_SRC = (1 << IPSET_DIM_TWO), |
| 200 | IPSET_DIM_THREE_SRC = (1 << IPSET_DIM_THREE), | 201 | IPSET_DIM_THREE_SRC = (1 << IPSET_DIM_THREE), |
| 202 | IPSET_RETURN_NOMATCH = (1 << IPSET_BIT_RETURN_NOMATCH), | ||
| 201 | }; | 203 | }; |
| 202 | 204 | ||
| 203 | #ifdef __KERNEL__ | 205 | #ifdef __KERNEL__ |
| @@ -206,9 +208,15 @@ enum ip_set_kopt { | |||
| 206 | #include <linux/netlink.h> | 208 | #include <linux/netlink.h> |
| 207 | #include <linux/netfilter.h> | 209 | #include <linux/netfilter.h> |
| 208 | #include <linux/netfilter/x_tables.h> | 210 | #include <linux/netfilter/x_tables.h> |
| 211 | #include <linux/stringify.h> | ||
| 209 | #include <linux/vmalloc.h> | 212 | #include <linux/vmalloc.h> |
| 210 | #include <net/netlink.h> | 213 | #include <net/netlink.h> |
| 211 | 214 | ||
| 215 | #define _IP_SET_MODULE_DESC(a, b, c) \ | ||
| 216 | MODULE_DESCRIPTION(a " type of IP sets, revisions " b "-" c) | ||
| 217 | #define IP_SET_MODULE_DESC(a, b, c) \ | ||
| 218 | _IP_SET_MODULE_DESC(a, __stringify(b), __stringify(c)) | ||
| 219 | |||
| 212 | /* Set features */ | 220 | /* Set features */ |
| 213 | enum ip_set_feature { | 221 | enum ip_set_feature { |
| 214 | IPSET_TYPE_IP_FLAG = 0, | 222 | IPSET_TYPE_IP_FLAG = 0, |
| @@ -223,6 +231,8 @@ enum ip_set_feature { | |||
| 223 | IPSET_TYPE_NAME = (1 << IPSET_TYPE_NAME_FLAG), | 231 | IPSET_TYPE_NAME = (1 << IPSET_TYPE_NAME_FLAG), |
| 224 | IPSET_TYPE_IFACE_FLAG = 5, | 232 | IPSET_TYPE_IFACE_FLAG = 5, |
| 225 | IPSET_TYPE_IFACE = (1 << IPSET_TYPE_IFACE_FLAG), | 233 | IPSET_TYPE_IFACE = (1 << IPSET_TYPE_IFACE_FLAG), |
| 234 | IPSET_TYPE_NOMATCH_FLAG = 6, | ||
| 235 | IPSET_TYPE_NOMATCH = (1 << IPSET_TYPE_NOMATCH_FLAG), | ||
| 226 | /* Strictly speaking not a feature, but a flag for dumping: | 236 | /* Strictly speaking not a feature, but a flag for dumping: |
| 227 | * this settype must be dumped last */ | 237 | * this settype must be dumped last */ |
| 228 | IPSET_DUMP_LAST_FLAG = 7, | 238 | IPSET_DUMP_LAST_FLAG = 7, |
| @@ -249,7 +259,7 @@ struct ip_set_type_variant { | |||
| 249 | * returns negative error code, | 259 | * returns negative error code, |
| 250 | * zero for no match/success to add/delete | 260 | * zero for no match/success to add/delete |
| 251 | * positive for matching element */ | 261 | * positive for matching element */ |
| 252 | int (*kadt)(struct ip_set *set, const struct sk_buff * skb, | 262 | int (*kadt)(struct ip_set *set, const struct sk_buff *skb, |
| 253 | const struct xt_action_param *par, | 263 | const struct xt_action_param *par, |
| 254 | enum ipset_adt adt, const struct ip_set_adt_opt *opt); | 264 | enum ipset_adt adt, const struct ip_set_adt_opt *opt); |
| 255 | 265 | ||
| @@ -424,7 +434,8 @@ static inline int nla_put_ipaddr4(struct sk_buff *skb, int type, __be32 ipaddr) | |||
| 424 | return ret; | 434 | return ret; |
| 425 | } | 435 | } |
| 426 | 436 | ||
| 427 | static inline int nla_put_ipaddr6(struct sk_buff *skb, int type, const struct in6_addr *ipaddrptr) | 437 | static inline int nla_put_ipaddr6(struct sk_buff *skb, int type, |
| 438 | const struct in6_addr *ipaddrptr) | ||
| 428 | { | 439 | { |
| 429 | struct nlattr *__nested = ipset_nest_start(skb, type); | 440 | struct nlattr *__nested = ipset_nest_start(skb, type); |
| 430 | int ret; | 441 | int ret; |
diff --git a/include/linux/netfilter/ipset/ip_set_ahash.h b/include/linux/netfilter/ipset/ip_set_ahash.h index b114d35aea5e..ef9acd3c8450 100644 --- a/include/linux/netfilter/ipset/ip_set_ahash.h +++ b/include/linux/netfilter/ipset/ip_set_ahash.h | |||
| @@ -137,50 +137,59 @@ htable_bits(u32 hashsize) | |||
| 137 | #endif | 137 | #endif |
| 138 | 138 | ||
| 139 | #define SET_HOST_MASK(family) (family == AF_INET ? 32 : 128) | 139 | #define SET_HOST_MASK(family) (family == AF_INET ? 32 : 128) |
| 140 | #ifdef IP_SET_HASH_WITH_MULTI | ||
| 141 | #define NETS_LENGTH(family) (SET_HOST_MASK(family) + 1) | ||
| 142 | #else | ||
| 143 | #define NETS_LENGTH(family) SET_HOST_MASK(family) | ||
| 144 | #endif | ||
| 140 | 145 | ||
| 141 | /* Network cidr size book keeping when the hash stores different | 146 | /* Network cidr size book keeping when the hash stores different |
| 142 | * sized networks */ | 147 | * sized networks */ |
| 143 | static void | 148 | static void |
| 144 | add_cidr(struct ip_set_hash *h, u8 cidr, u8 host_mask) | 149 | add_cidr(struct ip_set_hash *h, u8 cidr, u8 nets_length) |
| 145 | { | 150 | { |
| 146 | u8 i; | 151 | int i, j; |
| 147 | |||
| 148 | ++h->nets[cidr-1].nets; | ||
| 149 | |||
| 150 | pr_debug("add_cidr added %u: %u\n", cidr, h->nets[cidr-1].nets); | ||
| 151 | 152 | ||
| 152 | if (h->nets[cidr-1].nets > 1) | 153 | /* Add in increasing prefix order, so larger cidr first */ |
| 153 | return; | 154 | for (i = 0, j = -1; i < nets_length && h->nets[i].nets; i++) { |
| 154 | 155 | if (j != -1) | |
| 155 | /* New cidr size */ | 156 | continue; |
| 156 | for (i = 0; i < host_mask && h->nets[i].cidr; i++) { | 157 | else if (h->nets[i].cidr < cidr) |
| 157 | /* Add in increasing prefix order, so larger cidr first */ | 158 | j = i; |
| 158 | if (h->nets[i].cidr < cidr) | 159 | else if (h->nets[i].cidr == cidr) { |
| 159 | swap(h->nets[i].cidr, cidr); | 160 | h->nets[i].nets++; |
| 161 | return; | ||
| 162 | } | ||
| 163 | } | ||
| 164 | if (j != -1) { | ||
| 165 | for (; i > j; i--) { | ||
| 166 | h->nets[i].cidr = h->nets[i - 1].cidr; | ||
| 167 | h->nets[i].nets = h->nets[i - 1].nets; | ||
| 168 | } | ||
| 160 | } | 169 | } |
| 161 | if (i < host_mask) | 170 | h->nets[i].cidr = cidr; |
| 162 | h->nets[i].cidr = cidr; | 171 | h->nets[i].nets = 1; |
| 163 | } | 172 | } |
| 164 | 173 | ||
| 165 | static void | 174 | static void |
| 166 | del_cidr(struct ip_set_hash *h, u8 cidr, u8 host_mask) | 175 | del_cidr(struct ip_set_hash *h, u8 cidr, u8 nets_length) |
| 167 | { | 176 | { |
| 168 | u8 i; | 177 | u8 i, j; |
| 169 | |||
| 170 | --h->nets[cidr-1].nets; | ||
| 171 | 178 | ||
| 172 | pr_debug("del_cidr deleted %u: %u\n", cidr, h->nets[cidr-1].nets); | 179 | for (i = 0; i < nets_length - 1 && h->nets[i].cidr != cidr; i++) |
| 180 | ; | ||
| 181 | h->nets[i].nets--; | ||
| 173 | 182 | ||
| 174 | if (h->nets[cidr-1].nets != 0) | 183 | if (h->nets[i].nets != 0) |
| 175 | return; | 184 | return; |
| 176 | 185 | ||
| 177 | /* All entries with this cidr size deleted, so cleanup h->cidr[] */ | 186 | for (j = i; j < nets_length - 1 && h->nets[j].nets; j++) { |
| 178 | for (i = 0; i < host_mask - 1 && h->nets[i].cidr; i++) { | 187 | h->nets[j].cidr = h->nets[j + 1].cidr; |
| 179 | if (h->nets[i].cidr == cidr) | 188 | h->nets[j].nets = h->nets[j + 1].nets; |
| 180 | h->nets[i].cidr = cidr = h->nets[i+1].cidr; | ||
| 181 | } | 189 | } |
| 182 | h->nets[i - 1].cidr = 0; | ||
| 183 | } | 190 | } |
| 191 | #else | ||
| 192 | #define NETS_LENGTH(family) 0 | ||
| 184 | #endif | 193 | #endif |
| 185 | 194 | ||
| 186 | /* Destroy the hashtable part of the set */ | 195 | /* Destroy the hashtable part of the set */ |
| @@ -202,14 +211,14 @@ ahash_destroy(struct htable *t) | |||
| 202 | 211 | ||
| 203 | /* Calculate the actual memory size of the set data */ | 212 | /* Calculate the actual memory size of the set data */ |
| 204 | static size_t | 213 | static size_t |
| 205 | ahash_memsize(const struct ip_set_hash *h, size_t dsize, u8 host_mask) | 214 | ahash_memsize(const struct ip_set_hash *h, size_t dsize, u8 nets_length) |
| 206 | { | 215 | { |
| 207 | u32 i; | 216 | u32 i; |
| 208 | struct htable *t = h->table; | 217 | struct htable *t = h->table; |
| 209 | size_t memsize = sizeof(*h) | 218 | size_t memsize = sizeof(*h) |
| 210 | + sizeof(*t) | 219 | + sizeof(*t) |
| 211 | #ifdef IP_SET_HASH_WITH_NETS | 220 | #ifdef IP_SET_HASH_WITH_NETS |
| 212 | + sizeof(struct ip_set_hash_nets) * host_mask | 221 | + sizeof(struct ip_set_hash_nets) * nets_length |
| 213 | #endif | 222 | #endif |
| 214 | + jhash_size(t->htable_bits) * sizeof(struct hbucket); | 223 | + jhash_size(t->htable_bits) * sizeof(struct hbucket); |
| 215 | 224 | ||
| @@ -238,7 +247,7 @@ ip_set_hash_flush(struct ip_set *set) | |||
| 238 | } | 247 | } |
| 239 | #ifdef IP_SET_HASH_WITH_NETS | 248 | #ifdef IP_SET_HASH_WITH_NETS |
| 240 | memset(h->nets, 0, sizeof(struct ip_set_hash_nets) | 249 | memset(h->nets, 0, sizeof(struct ip_set_hash_nets) |
| 241 | * SET_HOST_MASK(set->family)); | 250 | * NETS_LENGTH(set->family)); |
| 242 | #endif | 251 | #endif |
| 243 | h->elements = 0; | 252 | h->elements = 0; |
| 244 | } | 253 | } |
| @@ -271,9 +280,6 @@ ip_set_hash_destroy(struct ip_set *set) | |||
| 271 | (jhash2((u32 *)(data), HKEY_DATALEN/sizeof(u32), initval) \ | 280 | (jhash2((u32 *)(data), HKEY_DATALEN/sizeof(u32), initval) \ |
| 272 | & jhash_mask(htable_bits)) | 281 | & jhash_mask(htable_bits)) |
| 273 | 282 | ||
| 274 | #define CONCAT(a, b, c) a##b##c | ||
| 275 | #define TOKEN(a, b, c) CONCAT(a, b, c) | ||
| 276 | |||
| 277 | /* Type/family dependent function prototypes */ | 283 | /* Type/family dependent function prototypes */ |
| 278 | 284 | ||
| 279 | #define type_pf_data_equal TOKEN(TYPE, PF, _data_equal) | 285 | #define type_pf_data_equal TOKEN(TYPE, PF, _data_equal) |
| @@ -478,7 +484,7 @@ type_pf_add(struct ip_set *set, void *value, u32 timeout, u32 flags) | |||
| 478 | } | 484 | } |
| 479 | 485 | ||
| 480 | #ifdef IP_SET_HASH_WITH_NETS | 486 | #ifdef IP_SET_HASH_WITH_NETS |
| 481 | add_cidr(h, CIDR(d->cidr), HOST_MASK); | 487 | add_cidr(h, CIDR(d->cidr), NETS_LENGTH(set->family)); |
| 482 | #endif | 488 | #endif |
| 483 | h->elements++; | 489 | h->elements++; |
| 484 | out: | 490 | out: |
| @@ -513,7 +519,7 @@ type_pf_del(struct ip_set *set, void *value, u32 timeout, u32 flags) | |||
| 513 | n->pos--; | 519 | n->pos--; |
| 514 | h->elements--; | 520 | h->elements--; |
| 515 | #ifdef IP_SET_HASH_WITH_NETS | 521 | #ifdef IP_SET_HASH_WITH_NETS |
| 516 | del_cidr(h, CIDR(d->cidr), HOST_MASK); | 522 | del_cidr(h, CIDR(d->cidr), NETS_LENGTH(set->family)); |
| 517 | #endif | 523 | #endif |
| 518 | if (n->pos + AHASH_INIT_SIZE < n->size) { | 524 | if (n->pos + AHASH_INIT_SIZE < n->size) { |
| 519 | void *tmp = kzalloc((n->size - AHASH_INIT_SIZE) | 525 | void *tmp = kzalloc((n->size - AHASH_INIT_SIZE) |
| @@ -546,10 +552,10 @@ type_pf_test_cidrs(struct ip_set *set, struct type_pf_elem *d, u32 timeout) | |||
| 546 | const struct type_pf_elem *data; | 552 | const struct type_pf_elem *data; |
| 547 | int i, j = 0; | 553 | int i, j = 0; |
| 548 | u32 key, multi = 0; | 554 | u32 key, multi = 0; |
| 549 | u8 host_mask = SET_HOST_MASK(set->family); | 555 | u8 nets_length = NETS_LENGTH(set->family); |
| 550 | 556 | ||
| 551 | pr_debug("test by nets\n"); | 557 | pr_debug("test by nets\n"); |
| 552 | for (; j < host_mask && h->nets[j].cidr && !multi; j++) { | 558 | for (; j < nets_length && h->nets[j].nets && !multi; j++) { |
| 553 | type_pf_data_netmask(d, h->nets[j].cidr); | 559 | type_pf_data_netmask(d, h->nets[j].cidr); |
| 554 | key = HKEY(d, h->initval, t->htable_bits); | 560 | key = HKEY(d, h->initval, t->htable_bits); |
| 555 | n = hbucket(t, key); | 561 | n = hbucket(t, key); |
| @@ -604,7 +610,7 @@ type_pf_head(struct ip_set *set, struct sk_buff *skb) | |||
| 604 | memsize = ahash_memsize(h, with_timeout(h->timeout) | 610 | memsize = ahash_memsize(h, with_timeout(h->timeout) |
| 605 | ? sizeof(struct type_pf_telem) | 611 | ? sizeof(struct type_pf_telem) |
| 606 | : sizeof(struct type_pf_elem), | 612 | : sizeof(struct type_pf_elem), |
| 607 | set->family == AF_INET ? 32 : 128); | 613 | NETS_LENGTH(set->family)); |
| 608 | read_unlock_bh(&set->lock); | 614 | read_unlock_bh(&set->lock); |
| 609 | 615 | ||
| 610 | nested = ipset_nest_start(skb, IPSET_ATTR_DATA); | 616 | nested = ipset_nest_start(skb, IPSET_ATTR_DATA); |
| @@ -690,7 +696,7 @@ nla_put_failure: | |||
| 690 | } | 696 | } |
| 691 | 697 | ||
| 692 | static int | 698 | static int |
| 693 | type_pf_kadt(struct ip_set *set, const struct sk_buff * skb, | 699 | type_pf_kadt(struct ip_set *set, const struct sk_buff *skb, |
| 694 | const struct xt_action_param *par, | 700 | const struct xt_action_param *par, |
| 695 | enum ipset_adt adt, const struct ip_set_adt_opt *opt); | 701 | enum ipset_adt adt, const struct ip_set_adt_opt *opt); |
| 696 | static int | 702 | static int |
| @@ -783,7 +789,7 @@ type_pf_elem_tadd(struct hbucket *n, const struct type_pf_elem *value, | |||
| 783 | 789 | ||
| 784 | /* Delete expired elements from the hashtable */ | 790 | /* Delete expired elements from the hashtable */ |
| 785 | static void | 791 | static void |
| 786 | type_pf_expire(struct ip_set_hash *h) | 792 | type_pf_expire(struct ip_set_hash *h, u8 nets_length) |
| 787 | { | 793 | { |
| 788 | struct htable *t = h->table; | 794 | struct htable *t = h->table; |
| 789 | struct hbucket *n; | 795 | struct hbucket *n; |
| @@ -798,7 +804,7 @@ type_pf_expire(struct ip_set_hash *h) | |||
| 798 | if (type_pf_data_expired(data)) { | 804 | if (type_pf_data_expired(data)) { |
| 799 | pr_debug("expired %u/%u\n", i, j); | 805 | pr_debug("expired %u/%u\n", i, j); |
| 800 | #ifdef IP_SET_HASH_WITH_NETS | 806 | #ifdef IP_SET_HASH_WITH_NETS |
| 801 | del_cidr(h, CIDR(data->cidr), HOST_MASK); | 807 | del_cidr(h, CIDR(data->cidr), nets_length); |
| 802 | #endif | 808 | #endif |
| 803 | if (j != n->pos - 1) | 809 | if (j != n->pos - 1) |
| 804 | /* Not last one */ | 810 | /* Not last one */ |
| @@ -839,7 +845,7 @@ type_pf_tresize(struct ip_set *set, bool retried) | |||
| 839 | if (!retried) { | 845 | if (!retried) { |
| 840 | i = h->elements; | 846 | i = h->elements; |
| 841 | write_lock_bh(&set->lock); | 847 | write_lock_bh(&set->lock); |
| 842 | type_pf_expire(set->data); | 848 | type_pf_expire(set->data, NETS_LENGTH(set->family)); |
| 843 | write_unlock_bh(&set->lock); | 849 | write_unlock_bh(&set->lock); |
| 844 | if (h->elements < i) | 850 | if (h->elements < i) |
| 845 | return 0; | 851 | return 0; |
| @@ -904,7 +910,7 @@ type_pf_tadd(struct ip_set *set, void *value, u32 timeout, u32 flags) | |||
| 904 | 910 | ||
| 905 | if (h->elements >= h->maxelem) | 911 | if (h->elements >= h->maxelem) |
| 906 | /* FIXME: when set is full, we slow down here */ | 912 | /* FIXME: when set is full, we slow down here */ |
| 907 | type_pf_expire(h); | 913 | type_pf_expire(h, NETS_LENGTH(set->family)); |
| 908 | if (h->elements >= h->maxelem) { | 914 | if (h->elements >= h->maxelem) { |
| 909 | if (net_ratelimit()) | 915 | if (net_ratelimit()) |
| 910 | pr_warning("Set %s is full, maxelem %u reached\n", | 916 | pr_warning("Set %s is full, maxelem %u reached\n", |
| @@ -933,8 +939,8 @@ type_pf_tadd(struct ip_set *set, void *value, u32 timeout, u32 flags) | |||
| 933 | if (j != AHASH_MAX(h) + 1) { | 939 | if (j != AHASH_MAX(h) + 1) { |
| 934 | data = ahash_tdata(n, j); | 940 | data = ahash_tdata(n, j); |
| 935 | #ifdef IP_SET_HASH_WITH_NETS | 941 | #ifdef IP_SET_HASH_WITH_NETS |
| 936 | del_cidr(h, CIDR(data->cidr), HOST_MASK); | 942 | del_cidr(h, CIDR(data->cidr), NETS_LENGTH(set->family)); |
| 937 | add_cidr(h, CIDR(d->cidr), HOST_MASK); | 943 | add_cidr(h, CIDR(d->cidr), NETS_LENGTH(set->family)); |
| 938 | #endif | 944 | #endif |
| 939 | type_pf_data_copy(data, d); | 945 | type_pf_data_copy(data, d); |
| 940 | type_pf_data_timeout_set(data, timeout); | 946 | type_pf_data_timeout_set(data, timeout); |
| @@ -952,7 +958,7 @@ type_pf_tadd(struct ip_set *set, void *value, u32 timeout, u32 flags) | |||
| 952 | } | 958 | } |
| 953 | 959 | ||
| 954 | #ifdef IP_SET_HASH_WITH_NETS | 960 | #ifdef IP_SET_HASH_WITH_NETS |
| 955 | add_cidr(h, CIDR(d->cidr), HOST_MASK); | 961 | add_cidr(h, CIDR(d->cidr), NETS_LENGTH(set->family)); |
| 956 | #endif | 962 | #endif |
| 957 | h->elements++; | 963 | h->elements++; |
| 958 | out: | 964 | out: |
| @@ -986,7 +992,7 @@ type_pf_tdel(struct ip_set *set, void *value, u32 timeout, u32 flags) | |||
| 986 | n->pos--; | 992 | n->pos--; |
| 987 | h->elements--; | 993 | h->elements--; |
| 988 | #ifdef IP_SET_HASH_WITH_NETS | 994 | #ifdef IP_SET_HASH_WITH_NETS |
| 989 | del_cidr(h, CIDR(d->cidr), HOST_MASK); | 995 | del_cidr(h, CIDR(d->cidr), NETS_LENGTH(set->family)); |
| 990 | #endif | 996 | #endif |
| 991 | if (n->pos + AHASH_INIT_SIZE < n->size) { | 997 | if (n->pos + AHASH_INIT_SIZE < n->size) { |
| 992 | void *tmp = kzalloc((n->size - AHASH_INIT_SIZE) | 998 | void *tmp = kzalloc((n->size - AHASH_INIT_SIZE) |
| @@ -1016,9 +1022,9 @@ type_pf_ttest_cidrs(struct ip_set *set, struct type_pf_elem *d, u32 timeout) | |||
| 1016 | struct hbucket *n; | 1022 | struct hbucket *n; |
| 1017 | int i, j = 0; | 1023 | int i, j = 0; |
| 1018 | u32 key, multi = 0; | 1024 | u32 key, multi = 0; |
| 1019 | u8 host_mask = SET_HOST_MASK(set->family); | 1025 | u8 nets_length = NETS_LENGTH(set->family); |
| 1020 | 1026 | ||
| 1021 | for (; j < host_mask && h->nets[j].cidr && !multi; j++) { | 1027 | for (; j < nets_length && h->nets[j].nets && !multi; j++) { |
| 1022 | type_pf_data_netmask(d, h->nets[j].cidr); | 1028 | type_pf_data_netmask(d, h->nets[j].cidr); |
| 1023 | key = HKEY(d, h->initval, t->htable_bits); | 1029 | key = HKEY(d, h->initval, t->htable_bits); |
| 1024 | n = hbucket(t, key); | 1030 | n = hbucket(t, key); |
| @@ -1147,7 +1153,7 @@ type_pf_gc(unsigned long ul_set) | |||
| 1147 | 1153 | ||
| 1148 | pr_debug("called\n"); | 1154 | pr_debug("called\n"); |
| 1149 | write_lock_bh(&set->lock); | 1155 | write_lock_bh(&set->lock); |
| 1150 | type_pf_expire(h); | 1156 | type_pf_expire(h, NETS_LENGTH(set->family)); |
| 1151 | write_unlock_bh(&set->lock); | 1157 | write_unlock_bh(&set->lock); |
| 1152 | 1158 | ||
| 1153 | h->gc.expires = jiffies + IPSET_GC_PERIOD(h->timeout) * HZ; | 1159 | h->gc.expires = jiffies + IPSET_GC_PERIOD(h->timeout) * HZ; |
diff --git a/include/linux/netfilter/nf_conntrack_amanda.h b/include/linux/netfilter/nf_conntrack_amanda.h index 0bb5a6976bf3..4b59a1584959 100644 --- a/include/linux/netfilter/nf_conntrack_amanda.h +++ b/include/linux/netfilter/nf_conntrack_amanda.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | extern unsigned int (*nf_nat_amanda_hook)(struct sk_buff *skb, | 5 | extern unsigned int (*nf_nat_amanda_hook)(struct sk_buff *skb, |
| 6 | enum ip_conntrack_info ctinfo, | 6 | enum ip_conntrack_info ctinfo, |
| 7 | unsigned int protoff, | ||
| 7 | unsigned int matchoff, | 8 | unsigned int matchoff, |
| 8 | unsigned int matchlen, | 9 | unsigned int matchlen, |
| 9 | struct nf_conntrack_expect *exp); | 10 | struct nf_conntrack_expect *exp); |
diff --git a/include/linux/netfilter/nf_conntrack_ftp.h b/include/linux/netfilter/nf_conntrack_ftp.h index 3e3aa08980c3..8faf3f792d13 100644 --- a/include/linux/netfilter/nf_conntrack_ftp.h +++ b/include/linux/netfilter/nf_conntrack_ftp.h | |||
| @@ -18,13 +18,17 @@ enum nf_ct_ftp_type { | |||
| 18 | 18 | ||
| 19 | #define FTP_PORT 21 | 19 | #define FTP_PORT 21 |
| 20 | 20 | ||
| 21 | #define NF_CT_FTP_SEQ_PICKUP (1 << 0) | ||
| 22 | |||
| 21 | #define NUM_SEQ_TO_REMEMBER 2 | 23 | #define NUM_SEQ_TO_REMEMBER 2 |
| 22 | /* This structure exists only once per master */ | 24 | /* This structure exists only once per master */ |
| 23 | struct nf_ct_ftp_master { | 25 | struct nf_ct_ftp_master { |
| 24 | /* Valid seq positions for cmd matching after newline */ | 26 | /* Valid seq positions for cmd matching after newline */ |
| 25 | u_int32_t seq_aft_nl[IP_CT_DIR_MAX][NUM_SEQ_TO_REMEMBER]; | 27 | u_int32_t seq_aft_nl[IP_CT_DIR_MAX][NUM_SEQ_TO_REMEMBER]; |
| 26 | /* 0 means seq_match_aft_nl not set */ | 28 | /* 0 means seq_match_aft_nl not set */ |
| 27 | int seq_aft_nl_num[IP_CT_DIR_MAX]; | 29 | u_int16_t seq_aft_nl_num[IP_CT_DIR_MAX]; |
| 30 | /* pickup sequence tracking, useful for conntrackd */ | ||
| 31 | u_int16_t flags[IP_CT_DIR_MAX]; | ||
| 28 | }; | 32 | }; |
| 29 | 33 | ||
| 30 | struct nf_conntrack_expect; | 34 | struct nf_conntrack_expect; |
| @@ -34,6 +38,7 @@ struct nf_conntrack_expect; | |||
| 34 | extern unsigned int (*nf_nat_ftp_hook)(struct sk_buff *skb, | 38 | extern unsigned int (*nf_nat_ftp_hook)(struct sk_buff *skb, |
| 35 | enum ip_conntrack_info ctinfo, | 39 | enum ip_conntrack_info ctinfo, |
| 36 | enum nf_ct_ftp_type type, | 40 | enum nf_ct_ftp_type type, |
| 41 | unsigned int protoff, | ||
| 37 | unsigned int matchoff, | 42 | unsigned int matchoff, |
| 38 | unsigned int matchlen, | 43 | unsigned int matchlen, |
| 39 | struct nf_conntrack_expect *exp); | 44 | struct nf_conntrack_expect *exp); |
diff --git a/include/linux/netfilter/nf_conntrack_h323.h b/include/linux/netfilter/nf_conntrack_h323.h index 26f9226ea72b..f381020eee92 100644 --- a/include/linux/netfilter/nf_conntrack_h323.h +++ b/include/linux/netfilter/nf_conntrack_h323.h | |||
| @@ -36,12 +36,12 @@ extern void nf_conntrack_h245_expect(struct nf_conn *new, | |||
| 36 | struct nf_conntrack_expect *this); | 36 | struct nf_conntrack_expect *this); |
| 37 | extern void nf_conntrack_q931_expect(struct nf_conn *new, | 37 | extern void nf_conntrack_q931_expect(struct nf_conn *new, |
| 38 | struct nf_conntrack_expect *this); | 38 | struct nf_conntrack_expect *this); |
| 39 | extern int (*set_h245_addr_hook) (struct sk_buff *skb, | 39 | extern int (*set_h245_addr_hook) (struct sk_buff *skb, unsigned int protoff, |
| 40 | unsigned char **data, int dataoff, | 40 | unsigned char **data, int dataoff, |
| 41 | H245_TransportAddress *taddr, | 41 | H245_TransportAddress *taddr, |
| 42 | union nf_inet_addr *addr, | 42 | union nf_inet_addr *addr, |
| 43 | __be16 port); | 43 | __be16 port); |
| 44 | extern int (*set_h225_addr_hook) (struct sk_buff *skb, | 44 | extern int (*set_h225_addr_hook) (struct sk_buff *skb, unsigned int protoff, |
| 45 | unsigned char **data, int dataoff, | 45 | unsigned char **data, int dataoff, |
| 46 | TransportAddress *taddr, | 46 | TransportAddress *taddr, |
| 47 | union nf_inet_addr *addr, | 47 | union nf_inet_addr *addr, |
| @@ -49,40 +49,45 @@ extern int (*set_h225_addr_hook) (struct sk_buff *skb, | |||
| 49 | extern int (*set_sig_addr_hook) (struct sk_buff *skb, | 49 | extern int (*set_sig_addr_hook) (struct sk_buff *skb, |
| 50 | struct nf_conn *ct, | 50 | struct nf_conn *ct, |
| 51 | enum ip_conntrack_info ctinfo, | 51 | enum ip_conntrack_info ctinfo, |
| 52 | unsigned char **data, | 52 | unsigned int protoff, unsigned char **data, |
| 53 | TransportAddress *taddr, int count); | 53 | TransportAddress *taddr, int count); |
| 54 | extern int (*set_ras_addr_hook) (struct sk_buff *skb, | 54 | extern int (*set_ras_addr_hook) (struct sk_buff *skb, |
| 55 | struct nf_conn *ct, | 55 | struct nf_conn *ct, |
| 56 | enum ip_conntrack_info ctinfo, | 56 | enum ip_conntrack_info ctinfo, |
| 57 | unsigned char **data, | 57 | unsigned int protoff, unsigned char **data, |
| 58 | TransportAddress *taddr, int count); | 58 | TransportAddress *taddr, int count); |
| 59 | extern int (*nat_rtp_rtcp_hook) (struct sk_buff *skb, | 59 | extern int (*nat_rtp_rtcp_hook) (struct sk_buff *skb, |
| 60 | struct nf_conn *ct, | 60 | struct nf_conn *ct, |
| 61 | enum ip_conntrack_info ctinfo, | 61 | enum ip_conntrack_info ctinfo, |
| 62 | unsigned char **data, int dataoff, | 62 | unsigned int protoff, unsigned char **data, |
| 63 | int dataoff, | ||
| 63 | H245_TransportAddress *taddr, | 64 | H245_TransportAddress *taddr, |
| 64 | __be16 port, __be16 rtp_port, | 65 | __be16 port, __be16 rtp_port, |
| 65 | struct nf_conntrack_expect *rtp_exp, | 66 | struct nf_conntrack_expect *rtp_exp, |
| 66 | struct nf_conntrack_expect *rtcp_exp); | 67 | struct nf_conntrack_expect *rtcp_exp); |
| 67 | extern int (*nat_t120_hook) (struct sk_buff *skb, struct nf_conn *ct, | 68 | extern int (*nat_t120_hook) (struct sk_buff *skb, struct nf_conn *ct, |
| 68 | enum ip_conntrack_info ctinfo, | 69 | enum ip_conntrack_info ctinfo, |
| 70 | unsigned int protoff, | ||
| 69 | unsigned char **data, int dataoff, | 71 | unsigned char **data, int dataoff, |
| 70 | H245_TransportAddress *taddr, __be16 port, | 72 | H245_TransportAddress *taddr, __be16 port, |
| 71 | struct nf_conntrack_expect *exp); | 73 | struct nf_conntrack_expect *exp); |
| 72 | extern int (*nat_h245_hook) (struct sk_buff *skb, struct nf_conn *ct, | 74 | extern int (*nat_h245_hook) (struct sk_buff *skb, struct nf_conn *ct, |
| 73 | enum ip_conntrack_info ctinfo, | 75 | enum ip_conntrack_info ctinfo, |
| 76 | unsigned int protoff, | ||
| 74 | unsigned char **data, int dataoff, | 77 | unsigned char **data, int dataoff, |
| 75 | TransportAddress *taddr, __be16 port, | 78 | TransportAddress *taddr, __be16 port, |
| 76 | struct nf_conntrack_expect *exp); | 79 | struct nf_conntrack_expect *exp); |
| 77 | extern int (*nat_callforwarding_hook) (struct sk_buff *skb, | 80 | extern int (*nat_callforwarding_hook) (struct sk_buff *skb, |
| 78 | struct nf_conn *ct, | 81 | struct nf_conn *ct, |
| 79 | enum ip_conntrack_info ctinfo, | 82 | enum ip_conntrack_info ctinfo, |
| 83 | unsigned int protoff, | ||
| 80 | unsigned char **data, int dataoff, | 84 | unsigned char **data, int dataoff, |
| 81 | TransportAddress *taddr, | 85 | TransportAddress *taddr, |
| 82 | __be16 port, | 86 | __be16 port, |
| 83 | struct nf_conntrack_expect *exp); | 87 | struct nf_conntrack_expect *exp); |
| 84 | extern int (*nat_q931_hook) (struct sk_buff *skb, struct nf_conn *ct, | 88 | extern int (*nat_q931_hook) (struct sk_buff *skb, struct nf_conn *ct, |
| 85 | enum ip_conntrack_info ctinfo, | 89 | enum ip_conntrack_info ctinfo, |
| 90 | unsigned int protoff, | ||
| 86 | unsigned char **data, TransportAddress *taddr, | 91 | unsigned char **data, TransportAddress *taddr, |
| 87 | int idx, __be16 port, | 92 | int idx, __be16 port, |
| 88 | struct nf_conntrack_expect *exp); | 93 | struct nf_conntrack_expect *exp); |
diff --git a/include/linux/netfilter/nf_conntrack_irc.h b/include/linux/netfilter/nf_conntrack_irc.h index 36282bf71b63..4bb9bae67176 100644 --- a/include/linux/netfilter/nf_conntrack_irc.h +++ b/include/linux/netfilter/nf_conntrack_irc.h | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | 7 | ||
| 8 | extern unsigned int (*nf_nat_irc_hook)(struct sk_buff *skb, | 8 | extern unsigned int (*nf_nat_irc_hook)(struct sk_buff *skb, |
| 9 | enum ip_conntrack_info ctinfo, | 9 | enum ip_conntrack_info ctinfo, |
| 10 | unsigned int protoff, | ||
| 10 | unsigned int matchoff, | 11 | unsigned int matchoff, |
| 11 | unsigned int matchlen, | 12 | unsigned int matchlen, |
| 12 | struct nf_conntrack_expect *exp); | 13 | struct nf_conntrack_expect *exp); |
diff --git a/include/linux/netfilter/nf_conntrack_pptp.h b/include/linux/netfilter/nf_conntrack_pptp.h index 3bbde0c3a8a6..2ab2830316b7 100644 --- a/include/linux/netfilter/nf_conntrack_pptp.h +++ b/include/linux/netfilter/nf_conntrack_pptp.h | |||
| @@ -303,12 +303,14 @@ struct nf_conntrack_expect; | |||
| 303 | extern int | 303 | extern int |
| 304 | (*nf_nat_pptp_hook_outbound)(struct sk_buff *skb, | 304 | (*nf_nat_pptp_hook_outbound)(struct sk_buff *skb, |
| 305 | struct nf_conn *ct, enum ip_conntrack_info ctinfo, | 305 | struct nf_conn *ct, enum ip_conntrack_info ctinfo, |
| 306 | unsigned int protoff, | ||
| 306 | struct PptpControlHeader *ctlh, | 307 | struct PptpControlHeader *ctlh, |
| 307 | union pptp_ctrl_union *pptpReq); | 308 | union pptp_ctrl_union *pptpReq); |
| 308 | 309 | ||
| 309 | extern int | 310 | extern int |
| 310 | (*nf_nat_pptp_hook_inbound)(struct sk_buff *skb, | 311 | (*nf_nat_pptp_hook_inbound)(struct sk_buff *skb, |
| 311 | struct nf_conn *ct, enum ip_conntrack_info ctinfo, | 312 | struct nf_conn *ct, enum ip_conntrack_info ctinfo, |
| 313 | unsigned int protoff, | ||
| 312 | struct PptpControlHeader *ctlh, | 314 | struct PptpControlHeader *ctlh, |
| 313 | union pptp_ctrl_union *pptpReq); | 315 | union pptp_ctrl_union *pptpReq); |
| 314 | 316 | ||
diff --git a/include/linux/netfilter/nf_conntrack_sip.h b/include/linux/netfilter/nf_conntrack_sip.h index 89f2a627f3f0..387bdd02945d 100644 --- a/include/linux/netfilter/nf_conntrack_sip.h +++ b/include/linux/netfilter/nf_conntrack_sip.h | |||
| @@ -37,10 +37,12 @@ struct sdp_media_type { | |||
| 37 | struct sip_handler { | 37 | struct sip_handler { |
| 38 | const char *method; | 38 | const char *method; |
| 39 | unsigned int len; | 39 | unsigned int len; |
| 40 | int (*request)(struct sk_buff *skb, unsigned int dataoff, | 40 | int (*request)(struct sk_buff *skb, unsigned int protoff, |
| 41 | unsigned int dataoff, | ||
| 41 | const char **dptr, unsigned int *datalen, | 42 | const char **dptr, unsigned int *datalen, |
| 42 | unsigned int cseq); | 43 | unsigned int cseq); |
| 43 | int (*response)(struct sk_buff *skb, unsigned int dataoff, | 44 | int (*response)(struct sk_buff *skb, unsigned int protoff, |
| 45 | unsigned int dataoff, | ||
| 44 | const char **dptr, unsigned int *datalen, | 46 | const char **dptr, unsigned int *datalen, |
| 45 | unsigned int cseq, unsigned int code); | 47 | unsigned int cseq, unsigned int code); |
| 46 | }; | 48 | }; |
| @@ -97,19 +99,20 @@ enum sip_header_types { | |||
| 97 | enum sdp_header_types { | 99 | enum sdp_header_types { |
| 98 | SDP_HDR_UNSPEC, | 100 | SDP_HDR_UNSPEC, |
| 99 | SDP_HDR_VERSION, | 101 | SDP_HDR_VERSION, |
| 100 | SDP_HDR_OWNER_IP4, | 102 | SDP_HDR_OWNER, |
| 101 | SDP_HDR_CONNECTION_IP4, | 103 | SDP_HDR_CONNECTION, |
| 102 | SDP_HDR_OWNER_IP6, | ||
| 103 | SDP_HDR_CONNECTION_IP6, | ||
| 104 | SDP_HDR_MEDIA, | 104 | SDP_HDR_MEDIA, |
| 105 | }; | 105 | }; |
| 106 | 106 | ||
| 107 | extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb, | 107 | extern unsigned int (*nf_nat_sip_hook)(struct sk_buff *skb, |
| 108 | unsigned int protoff, | ||
| 108 | unsigned int dataoff, | 109 | unsigned int dataoff, |
| 109 | const char **dptr, | 110 | const char **dptr, |
| 110 | unsigned int *datalen); | 111 | unsigned int *datalen); |
| 111 | extern void (*nf_nat_sip_seq_adjust_hook)(struct sk_buff *skb, s16 off); | 112 | extern void (*nf_nat_sip_seq_adjust_hook)(struct sk_buff *skb, |
| 113 | unsigned int protoff, s16 off); | ||
| 112 | extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb, | 114 | extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb, |
| 115 | unsigned int protoff, | ||
| 113 | unsigned int dataoff, | 116 | unsigned int dataoff, |
| 114 | const char **dptr, | 117 | const char **dptr, |
| 115 | unsigned int *datalen, | 118 | unsigned int *datalen, |
| @@ -117,6 +120,7 @@ extern unsigned int (*nf_nat_sip_expect_hook)(struct sk_buff *skb, | |||
| 117 | unsigned int matchoff, | 120 | unsigned int matchoff, |
| 118 | unsigned int matchlen); | 121 | unsigned int matchlen); |
| 119 | extern unsigned int (*nf_nat_sdp_addr_hook)(struct sk_buff *skb, | 122 | extern unsigned int (*nf_nat_sdp_addr_hook)(struct sk_buff *skb, |
| 123 | unsigned int protoff, | ||
| 120 | unsigned int dataoff, | 124 | unsigned int dataoff, |
| 121 | const char **dptr, | 125 | const char **dptr, |
| 122 | unsigned int *datalen, | 126 | unsigned int *datalen, |
| @@ -125,6 +129,7 @@ extern unsigned int (*nf_nat_sdp_addr_hook)(struct sk_buff *skb, | |||
| 125 | enum sdp_header_types term, | 129 | enum sdp_header_types term, |
| 126 | const union nf_inet_addr *addr); | 130 | const union nf_inet_addr *addr); |
| 127 | extern unsigned int (*nf_nat_sdp_port_hook)(struct sk_buff *skb, | 131 | extern unsigned int (*nf_nat_sdp_port_hook)(struct sk_buff *skb, |
| 132 | unsigned int protoff, | ||
| 128 | unsigned int dataoff, | 133 | unsigned int dataoff, |
| 129 | const char **dptr, | 134 | const char **dptr, |
| 130 | unsigned int *datalen, | 135 | unsigned int *datalen, |
| @@ -132,12 +137,14 @@ extern unsigned int (*nf_nat_sdp_port_hook)(struct sk_buff *skb, | |||
| 132 | unsigned int matchlen, | 137 | unsigned int matchlen, |
| 133 | u_int16_t port); | 138 | u_int16_t port); |
| 134 | extern unsigned int (*nf_nat_sdp_session_hook)(struct sk_buff *skb, | 139 | extern unsigned int (*nf_nat_sdp_session_hook)(struct sk_buff *skb, |
| 140 | unsigned int protoff, | ||
| 135 | unsigned int dataoff, | 141 | unsigned int dataoff, |
| 136 | const char **dptr, | 142 | const char **dptr, |
| 137 | unsigned int *datalen, | 143 | unsigned int *datalen, |
| 138 | unsigned int sdpoff, | 144 | unsigned int sdpoff, |
| 139 | const union nf_inet_addr *addr); | 145 | const union nf_inet_addr *addr); |
| 140 | extern unsigned int (*nf_nat_sdp_media_hook)(struct sk_buff *skb, | 146 | extern unsigned int (*nf_nat_sdp_media_hook)(struct sk_buff *skb, |
| 147 | unsigned int protoff, | ||
| 141 | unsigned int dataoff, | 148 | unsigned int dataoff, |
| 142 | const char **dptr, | 149 | const char **dptr, |
| 143 | unsigned int *datalen, | 150 | unsigned int *datalen, |
diff --git a/include/linux/netfilter/nf_nat.h b/include/linux/netfilter/nf_nat.h index 8df2d13730b2..bf0cc373ffb6 100644 --- a/include/linux/netfilter/nf_nat.h +++ b/include/linux/netfilter/nf_nat.h | |||
| @@ -22,4 +22,12 @@ struct nf_nat_ipv4_multi_range_compat { | |||
| 22 | struct nf_nat_ipv4_range range[1]; | 22 | struct nf_nat_ipv4_range range[1]; |
| 23 | }; | 23 | }; |
| 24 | 24 | ||
| 25 | struct nf_nat_range { | ||
| 26 | unsigned int flags; | ||
| 27 | union nf_inet_addr min_addr; | ||
| 28 | union nf_inet_addr max_addr; | ||
| 29 | union nf_conntrack_man_proto min_proto; | ||
| 30 | union nf_conntrack_man_proto max_proto; | ||
| 31 | }; | ||
| 32 | |||
| 25 | #endif /* _NETFILTER_NF_NAT_H */ | 33 | #endif /* _NETFILTER_NF_NAT_H */ |
diff --git a/include/linux/netfilter/nfnetlink_conntrack.h b/include/linux/netfilter/nfnetlink_conntrack.h index f649f7423ca2..43bfe3e1685b 100644 --- a/include/linux/netfilter/nfnetlink_conntrack.h +++ b/include/linux/netfilter/nfnetlink_conntrack.h | |||
| @@ -142,9 +142,13 @@ enum ctattr_tstamp { | |||
| 142 | 142 | ||
| 143 | enum ctattr_nat { | 143 | enum ctattr_nat { |
| 144 | CTA_NAT_UNSPEC, | 144 | CTA_NAT_UNSPEC, |
| 145 | CTA_NAT_MINIP, | 145 | CTA_NAT_V4_MINIP, |
| 146 | CTA_NAT_MAXIP, | 146 | #define CTA_NAT_MINIP CTA_NAT_V4_MINIP |
| 147 | CTA_NAT_V4_MAXIP, | ||
| 148 | #define CTA_NAT_MAXIP CTA_NAT_V4_MAXIP | ||
| 147 | CTA_NAT_PROTO, | 149 | CTA_NAT_PROTO, |
| 150 | CTA_NAT_V6_MINIP, | ||
| 151 | CTA_NAT_V6_MAXIP, | ||
| 148 | __CTA_NAT_MAX | 152 | __CTA_NAT_MAX |
| 149 | }; | 153 | }; |
| 150 | #define CTA_NAT_MAX (__CTA_NAT_MAX - 1) | 154 | #define CTA_NAT_MAX (__CTA_NAT_MAX - 1) |
diff --git a/include/linux/netfilter/nfnetlink_queue.h b/include/linux/netfilter/nfnetlink_queue.h index 3b1c1360aedf..70ec8c2bc11a 100644 --- a/include/linux/netfilter/nfnetlink_queue.h +++ b/include/linux/netfilter/nfnetlink_queue.h | |||
| @@ -44,6 +44,7 @@ enum nfqnl_attr_type { | |||
| 44 | NFQA_PAYLOAD, /* opaque data payload */ | 44 | NFQA_PAYLOAD, /* opaque data payload */ |
| 45 | NFQA_CT, /* nf_conntrack_netlink.h */ | 45 | NFQA_CT, /* nf_conntrack_netlink.h */ |
| 46 | NFQA_CT_INFO, /* enum ip_conntrack_info */ | 46 | NFQA_CT_INFO, /* enum ip_conntrack_info */ |
| 47 | NFQA_CAP_LEN, /* __u32 length of captured packet */ | ||
| 47 | 48 | ||
| 48 | __NFQA_MAX | 49 | __NFQA_MAX |
| 49 | }; | 50 | }; |
diff --git a/include/linux/netfilter/xt_time.h b/include/linux/netfilter/xt_time.h index 7c37fac576c4..095886019396 100644 --- a/include/linux/netfilter/xt_time.h +++ b/include/linux/netfilter/xt_time.h | |||
| @@ -17,6 +17,9 @@ enum { | |||
| 17 | /* Match against local time (instead of UTC) */ | 17 | /* Match against local time (instead of UTC) */ |
| 18 | XT_TIME_LOCAL_TZ = 1 << 0, | 18 | XT_TIME_LOCAL_TZ = 1 << 0, |
| 19 | 19 | ||
| 20 | /* treat timestart > timestop (e.g. 23:00-01:00) as single period */ | ||
| 21 | XT_TIME_CONTIGUOUS = 1 << 1, | ||
| 22 | |||
| 20 | /* Shortcuts */ | 23 | /* Shortcuts */ |
| 21 | XT_TIME_ALL_MONTHDAYS = 0xFFFFFFFE, | 24 | XT_TIME_ALL_MONTHDAYS = 0xFFFFFFFE, |
| 22 | XT_TIME_ALL_WEEKDAYS = 0xFE, | 25 | XT_TIME_ALL_WEEKDAYS = 0xFE, |
| @@ -24,4 +27,6 @@ enum { | |||
| 24 | XT_TIME_MAX_DAYTIME = 24 * 60 * 60 - 1, | 27 | XT_TIME_MAX_DAYTIME = 24 * 60 * 60 - 1, |
| 25 | }; | 28 | }; |
| 26 | 29 | ||
| 30 | #define XT_TIME_ALL_FLAGS (XT_TIME_LOCAL_TZ|XT_TIME_CONTIGUOUS) | ||
| 31 | |||
| 27 | #endif /* _XT_TIME_H */ | 32 | #endif /* _XT_TIME_H */ |
diff --git a/include/linux/netfilter_ipv4.h b/include/linux/netfilter_ipv4.h index e2b12801378d..b962dfc695ae 100644 --- a/include/linux/netfilter_ipv4.h +++ b/include/linux/netfilter_ipv4.h | |||
| @@ -79,7 +79,6 @@ enum nf_ip_hook_priorities { | |||
| 79 | 79 | ||
| 80 | #ifdef __KERNEL__ | 80 | #ifdef __KERNEL__ |
| 81 | extern int ip_route_me_harder(struct sk_buff *skb, unsigned addr_type); | 81 | extern int ip_route_me_harder(struct sk_buff *skb, unsigned addr_type); |
| 82 | extern int ip_xfrm_me_harder(struct sk_buff *skb); | ||
| 83 | extern __sum16 nf_ip_checksum(struct sk_buff *skb, unsigned int hook, | 82 | extern __sum16 nf_ip_checksum(struct sk_buff *skb, unsigned int hook, |
| 84 | unsigned int dataoff, u_int8_t protocol); | 83 | unsigned int dataoff, u_int8_t protocol); |
| 85 | #endif /*__KERNEL__*/ | 84 | #endif /*__KERNEL__*/ |
diff --git a/include/linux/netfilter_ipv6/Kbuild b/include/linux/netfilter_ipv6/Kbuild index bd095bc075e9..b88c0058bf73 100644 --- a/include/linux/netfilter_ipv6/Kbuild +++ b/include/linux/netfilter_ipv6/Kbuild | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | header-y += ip6_tables.h | 1 | header-y += ip6_tables.h |
| 2 | header-y += ip6t_HL.h | 2 | header-y += ip6t_HL.h |
| 3 | header-y += ip6t_LOG.h | 3 | header-y += ip6t_LOG.h |
| 4 | header-y += ip6t_NPT.h | ||
| 4 | header-y += ip6t_REJECT.h | 5 | header-y += ip6t_REJECT.h |
| 5 | header-y += ip6t_ah.h | 6 | header-y += ip6t_ah.h |
| 6 | header-y += ip6t_frag.h | 7 | header-y += ip6t_frag.h |
diff --git a/include/linux/netfilter_ipv6/ip6t_NPT.h b/include/linux/netfilter_ipv6/ip6t_NPT.h new file mode 100644 index 000000000000..f763355481b5 --- /dev/null +++ b/include/linux/netfilter_ipv6/ip6t_NPT.h | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | #ifndef __NETFILTER_IP6T_NPT | ||
| 2 | #define __NETFILTER_IP6T_NPT | ||
| 3 | |||
| 4 | #include <linux/types.h> | ||
| 5 | #include <linux/netfilter.h> | ||
| 6 | |||
| 7 | struct ip6t_npt_tginfo { | ||
| 8 | union nf_inet_addr src_pfx; | ||
| 9 | union nf_inet_addr dst_pfx; | ||
| 10 | __u8 src_pfx_len; | ||
| 11 | __u8 dst_pfx_len; | ||
| 12 | /* Used internally by the kernel */ | ||
| 13 | __sum16 adjustment; | ||
| 14 | }; | ||
| 15 | |||
| 16 | #endif /* __NETFILTER_IP6T_NPT */ | ||
diff --git a/include/linux/netlink.h b/include/linux/netlink.h index c9fdde2bc73f..f80c56ac4d82 100644 --- a/include/linux/netlink.h +++ b/include/linux/netlink.h | |||
| @@ -153,6 +153,8 @@ struct nlattr { | |||
| 153 | 153 | ||
| 154 | #include <linux/capability.h> | 154 | #include <linux/capability.h> |
| 155 | #include <linux/skbuff.h> | 155 | #include <linux/skbuff.h> |
| 156 | #include <linux/export.h> | ||
| 157 | #include <net/scm.h> | ||
| 156 | 158 | ||
| 157 | struct net; | 159 | struct net; |
| 158 | 160 | ||
| @@ -162,8 +164,8 @@ static inline struct nlmsghdr *nlmsg_hdr(const struct sk_buff *skb) | |||
| 162 | } | 164 | } |
| 163 | 165 | ||
| 164 | struct netlink_skb_parms { | 166 | struct netlink_skb_parms { |
| 165 | struct ucred creds; /* Skb credentials */ | 167 | struct scm_creds creds; /* Skb credentials */ |
| 166 | __u32 pid; | 168 | __u32 portid; |
| 167 | __u32 dst_group; | 169 | __u32 dst_group; |
| 168 | struct sock *ssk; | 170 | struct sock *ssk; |
| 169 | }; | 171 | }; |
| @@ -175,17 +177,27 @@ struct netlink_skb_parms { | |||
| 175 | extern void netlink_table_grab(void); | 177 | extern void netlink_table_grab(void); |
| 176 | extern void netlink_table_ungrab(void); | 178 | extern void netlink_table_ungrab(void); |
| 177 | 179 | ||
| 180 | #define NL_CFG_F_NONROOT_RECV (1 << 0) | ||
| 181 | #define NL_CFG_F_NONROOT_SEND (1 << 1) | ||
| 182 | |||
| 178 | /* optional Netlink kernel configuration parameters */ | 183 | /* optional Netlink kernel configuration parameters */ |
| 179 | struct netlink_kernel_cfg { | 184 | struct netlink_kernel_cfg { |
| 180 | unsigned int groups; | 185 | unsigned int groups; |
| 186 | unsigned int flags; | ||
| 181 | void (*input)(struct sk_buff *skb); | 187 | void (*input)(struct sk_buff *skb); |
| 182 | struct mutex *cb_mutex; | 188 | struct mutex *cb_mutex; |
| 183 | void (*bind)(int group); | 189 | void (*bind)(int group); |
| 184 | }; | 190 | }; |
| 185 | 191 | ||
| 186 | extern struct sock *netlink_kernel_create(struct net *net, int unit, | 192 | extern struct sock *__netlink_kernel_create(struct net *net, int unit, |
| 187 | struct module *module, | 193 | struct module *module, |
| 188 | struct netlink_kernel_cfg *cfg); | 194 | struct netlink_kernel_cfg *cfg); |
| 195 | static inline struct sock * | ||
| 196 | netlink_kernel_create(struct net *net, int unit, struct netlink_kernel_cfg *cfg) | ||
| 197 | { | ||
| 198 | return __netlink_kernel_create(net, unit, THIS_MODULE, cfg); | ||
| 199 | } | ||
| 200 | |||
| 189 | extern void netlink_kernel_release(struct sock *sk); | 201 | extern void netlink_kernel_release(struct sock *sk); |
| 190 | extern int __netlink_change_ngroups(struct sock *sk, unsigned int groups); | 202 | extern int __netlink_change_ngroups(struct sock *sk, unsigned int groups); |
| 191 | extern int netlink_change_ngroups(struct sock *sk, unsigned int groups); | 203 | extern int netlink_change_ngroups(struct sock *sk, unsigned int groups); |
| @@ -193,14 +205,14 @@ extern void __netlink_clear_multicast_users(struct sock *sk, unsigned int group) | |||
| 193 | extern void netlink_clear_multicast_users(struct sock *sk, unsigned int group); | 205 | extern void netlink_clear_multicast_users(struct sock *sk, unsigned int group); |
| 194 | extern void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err); | 206 | extern void netlink_ack(struct sk_buff *in_skb, struct nlmsghdr *nlh, int err); |
| 195 | extern int netlink_has_listeners(struct sock *sk, unsigned int group); | 207 | extern int netlink_has_listeners(struct sock *sk, unsigned int group); |
| 196 | extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 pid, int nonblock); | 208 | extern int netlink_unicast(struct sock *ssk, struct sk_buff *skb, __u32 portid, int nonblock); |
| 197 | extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 pid, | 209 | extern int netlink_broadcast(struct sock *ssk, struct sk_buff *skb, __u32 portid, |
| 198 | __u32 group, gfp_t allocation); | 210 | __u32 group, gfp_t allocation); |
| 199 | extern int netlink_broadcast_filtered(struct sock *ssk, struct sk_buff *skb, | 211 | extern int netlink_broadcast_filtered(struct sock *ssk, struct sk_buff *skb, |
| 200 | __u32 pid, __u32 group, gfp_t allocation, | 212 | __u32 portid, __u32 group, gfp_t allocation, |
| 201 | int (*filter)(struct sock *dsk, struct sk_buff *skb, void *data), | 213 | int (*filter)(struct sock *dsk, struct sk_buff *skb, void *data), |
| 202 | void *filter_data); | 214 | void *filter_data); |
| 203 | extern int netlink_set_err(struct sock *ssk, __u32 pid, __u32 group, int code); | 215 | extern int netlink_set_err(struct sock *ssk, __u32 portid, __u32 group, int code); |
| 204 | extern int netlink_register_notifier(struct notifier_block *nb); | 216 | extern int netlink_register_notifier(struct notifier_block *nb); |
| 205 | extern int netlink_unregister_notifier(struct notifier_block *nb); | 217 | extern int netlink_unregister_notifier(struct notifier_block *nb); |
| 206 | 218 | ||
| @@ -241,12 +253,12 @@ struct netlink_callback { | |||
| 241 | 253 | ||
| 242 | struct netlink_notify { | 254 | struct netlink_notify { |
| 243 | struct net *net; | 255 | struct net *net; |
| 244 | int pid; | 256 | int portid; |
| 245 | int protocol; | 257 | int protocol; |
| 246 | }; | 258 | }; |
| 247 | 259 | ||
| 248 | struct nlmsghdr * | 260 | struct nlmsghdr * |
| 249 | __nlmsg_put(struct sk_buff *skb, u32 pid, u32 seq, int type, int len, int flags); | 261 | __nlmsg_put(struct sk_buff *skb, u32 portid, u32 seq, int type, int len, int flags); |
| 250 | 262 | ||
| 251 | struct netlink_dump_control { | 263 | struct netlink_dump_control { |
| 252 | int (*dump)(struct sk_buff *skb, struct netlink_callback *); | 264 | int (*dump)(struct sk_buff *skb, struct netlink_callback *); |
| @@ -259,11 +271,6 @@ extern int netlink_dump_start(struct sock *ssk, struct sk_buff *skb, | |||
| 259 | const struct nlmsghdr *nlh, | 271 | const struct nlmsghdr *nlh, |
| 260 | struct netlink_dump_control *control); | 272 | struct netlink_dump_control *control); |
| 261 | 273 | ||
| 262 | |||
| 263 | #define NL_NONROOT_RECV 0x1 | ||
| 264 | #define NL_NONROOT_SEND 0x2 | ||
| 265 | extern void netlink_set_nonroot(int protocol, unsigned flag); | ||
| 266 | |||
| 267 | #endif /* __KERNEL__ */ | 274 | #endif /* __KERNEL__ */ |
| 268 | 275 | ||
| 269 | #endif /* __LINUX_NETLINK_H */ | 276 | #endif /* __LINUX_NETLINK_H */ |
diff --git a/include/linux/nfc.h b/include/linux/nfc.h index 6189f27e305b..d908d17da56d 100644 --- a/include/linux/nfc.h +++ b/include/linux/nfc.h | |||
| @@ -183,4 +183,15 @@ struct sockaddr_nfc_llcp { | |||
| 183 | 183 | ||
| 184 | #define NFC_HEADER_SIZE 1 | 184 | #define NFC_HEADER_SIZE 1 |
| 185 | 185 | ||
| 186 | /** | ||
| 187 | * Pseudo-header info for raw socket packets | ||
| 188 | * First byte is the adapter index | ||
| 189 | * Second byte contains flags | ||
| 190 | * - 0x01 - Direction (0=RX, 1=TX) | ||
| 191 | * - 0x02-0x80 - Reserved | ||
| 192 | **/ | ||
| 193 | #define NFC_LLCP_RAW_HEADER_SIZE 2 | ||
| 194 | #define NFC_LLCP_DIRECTION_RX 0x00 | ||
| 195 | #define NFC_LLCP_DIRECTION_TX 0x01 | ||
| 196 | |||
| 186 | #endif /*__LINUX_NFC_H */ | 197 | #endif /*__LINUX_NFC_H */ |
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index 2f3878806403..7df9b500c804 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
| @@ -565,6 +565,19 @@ | |||
| 565 | * %NL80211_ATTR_IFINDEX is now on %NL80211_ATTR_WIPHY_FREQ with | 565 | * %NL80211_ATTR_IFINDEX is now on %NL80211_ATTR_WIPHY_FREQ with |
| 566 | * %NL80211_ATTR_WIPHY_CHANNEL_TYPE. | 566 | * %NL80211_ATTR_WIPHY_CHANNEL_TYPE. |
| 567 | * | 567 | * |
| 568 | * @NL80211_CMD_START_P2P_DEVICE: Start the given P2P Device, identified by | ||
| 569 | * its %NL80211_ATTR_WDEV identifier. It must have been created with | ||
| 570 | * %NL80211_CMD_NEW_INTERFACE previously. After it has been started, the | ||
| 571 | * P2P Device can be used for P2P operations, e.g. remain-on-channel and | ||
| 572 | * public action frame TX. | ||
| 573 | * @NL80211_CMD_STOP_P2P_DEVICE: Stop the given P2P Device, identified by | ||
| 574 | * its %NL80211_ATTR_WDEV identifier. | ||
| 575 | * | ||
| 576 | * @NL80211_CMD_CONN_FAILED: connection request to an AP failed; used to | ||
| 577 | * notify userspace that AP has rejected the connection request from a | ||
| 578 | * station, due to particular reason. %NL80211_ATTR_CONN_FAILED_REASON | ||
| 579 | * is used for this. | ||
| 580 | * | ||
| 568 | * @NL80211_CMD_MAX: highest used command number | 581 | * @NL80211_CMD_MAX: highest used command number |
| 569 | * @__NL80211_CMD_AFTER_LAST: internal use | 582 | * @__NL80211_CMD_AFTER_LAST: internal use |
| 570 | */ | 583 | */ |
| @@ -708,6 +721,11 @@ enum nl80211_commands { | |||
| 708 | 721 | ||
| 709 | NL80211_CMD_CH_SWITCH_NOTIFY, | 722 | NL80211_CMD_CH_SWITCH_NOTIFY, |
| 710 | 723 | ||
| 724 | NL80211_CMD_START_P2P_DEVICE, | ||
| 725 | NL80211_CMD_STOP_P2P_DEVICE, | ||
| 726 | |||
| 727 | NL80211_CMD_CONN_FAILED, | ||
| 728 | |||
| 711 | /* add new commands above here */ | 729 | /* add new commands above here */ |
| 712 | 730 | ||
| 713 | /* used to define NL80211_CMD_MAX below */ | 731 | /* used to define NL80211_CMD_MAX below */ |
| @@ -1251,6 +1269,10 @@ enum nl80211_commands { | |||
| 1251 | * was used to provide the hint. For the different types of | 1269 | * was used to provide the hint. For the different types of |
| 1252 | * allowed user regulatory hints see nl80211_user_reg_hint_type. | 1270 | * allowed user regulatory hints see nl80211_user_reg_hint_type. |
| 1253 | * | 1271 | * |
| 1272 | * @NL80211_ATTR_CONN_FAILED_REASON: The reason for which AP has rejected | ||
| 1273 | * the connection request from a station. nl80211_connect_failed_reason | ||
| 1274 | * enum has different reasons of connection failure. | ||
| 1275 | * | ||
| 1254 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 1276 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
| 1255 | * @__NL80211_ATTR_AFTER_LAST: internal use | 1277 | * @__NL80211_ATTR_AFTER_LAST: internal use |
| 1256 | */ | 1278 | */ |
| @@ -1506,6 +1528,8 @@ enum nl80211_attrs { | |||
| 1506 | 1528 | ||
| 1507 | NL80211_ATTR_USER_REG_HINT_TYPE, | 1529 | NL80211_ATTR_USER_REG_HINT_TYPE, |
| 1508 | 1530 | ||
| 1531 | NL80211_ATTR_CONN_FAILED_REASON, | ||
| 1532 | |||
| 1509 | /* add attributes here, update the policy in nl80211.c */ | 1533 | /* add attributes here, update the policy in nl80211.c */ |
| 1510 | 1534 | ||
| 1511 | __NL80211_ATTR_AFTER_LAST, | 1535 | __NL80211_ATTR_AFTER_LAST, |
| @@ -1575,6 +1599,10 @@ enum nl80211_attrs { | |||
| 1575 | * @NL80211_IFTYPE_MESH_POINT: mesh point | 1599 | * @NL80211_IFTYPE_MESH_POINT: mesh point |
| 1576 | * @NL80211_IFTYPE_P2P_CLIENT: P2P client | 1600 | * @NL80211_IFTYPE_P2P_CLIENT: P2P client |
| 1577 | * @NL80211_IFTYPE_P2P_GO: P2P group owner | 1601 | * @NL80211_IFTYPE_P2P_GO: P2P group owner |
| 1602 | * @NL80211_IFTYPE_P2P_DEVICE: P2P device interface type, this is not a netdev | ||
| 1603 | * and therefore can't be created in the normal ways, use the | ||
| 1604 | * %NL80211_CMD_START_P2P_DEVICE and %NL80211_CMD_STOP_P2P_DEVICE | ||
| 1605 | * commands to create and destroy one | ||
| 1578 | * @NL80211_IFTYPE_MAX: highest interface type number currently defined | 1606 | * @NL80211_IFTYPE_MAX: highest interface type number currently defined |
| 1579 | * @NUM_NL80211_IFTYPES: number of defined interface types | 1607 | * @NUM_NL80211_IFTYPES: number of defined interface types |
| 1580 | * | 1608 | * |
| @@ -1593,6 +1621,7 @@ enum nl80211_iftype { | |||
| 1593 | NL80211_IFTYPE_MESH_POINT, | 1621 | NL80211_IFTYPE_MESH_POINT, |
| 1594 | NL80211_IFTYPE_P2P_CLIENT, | 1622 | NL80211_IFTYPE_P2P_CLIENT, |
| 1595 | NL80211_IFTYPE_P2P_GO, | 1623 | NL80211_IFTYPE_P2P_GO, |
| 1624 | NL80211_IFTYPE_P2P_DEVICE, | ||
| 1596 | 1625 | ||
| 1597 | /* keep last */ | 1626 | /* keep last */ |
| 1598 | NUM_NL80211_IFTYPES, | 1627 | NUM_NL80211_IFTYPES, |
| @@ -2994,12 +3023,18 @@ enum nl80211_ap_sme_features { | |||
| 2994 | * @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested | 3023 | * @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested |
| 2995 | * to work properly to suppport receiving regulatory hints from | 3024 | * to work properly to suppport receiving regulatory hints from |
| 2996 | * cellular base stations. | 3025 | * cellular base stations. |
| 3026 | * @NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL: If this is set, an active | ||
| 3027 | * P2P Device (%NL80211_IFTYPE_P2P_DEVICE) requires its own channel | ||
| 3028 | * in the interface combinations, even when it's only used for scan | ||
| 3029 | * and remain-on-channel. This could be due to, for example, the | ||
| 3030 | * remain-on-channel implementation requiring a channel context. | ||
| 2997 | */ | 3031 | */ |
| 2998 | enum nl80211_feature_flags { | 3032 | enum nl80211_feature_flags { |
| 2999 | NL80211_FEATURE_SK_TX_STATUS = 1 << 0, | 3033 | NL80211_FEATURE_SK_TX_STATUS = 1 << 0, |
| 3000 | NL80211_FEATURE_HT_IBSS = 1 << 1, | 3034 | NL80211_FEATURE_HT_IBSS = 1 << 1, |
| 3001 | NL80211_FEATURE_INACTIVITY_TIMER = 1 << 2, | 3035 | NL80211_FEATURE_INACTIVITY_TIMER = 1 << 2, |
| 3002 | NL80211_FEATURE_CELL_BASE_REG_HINTS = 1 << 3, | 3036 | NL80211_FEATURE_CELL_BASE_REG_HINTS = 1 << 3, |
| 3037 | NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL = 1 << 4, | ||
| 3003 | }; | 3038 | }; |
| 3004 | 3039 | ||
| 3005 | /** | 3040 | /** |
| @@ -3023,4 +3058,15 @@ enum nl80211_probe_resp_offload_support_attr { | |||
| 3023 | NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U = 1<<3, | 3058 | NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U = 1<<3, |
| 3024 | }; | 3059 | }; |
| 3025 | 3060 | ||
| 3061 | /** | ||
| 3062 | * enum nl80211_connect_failed_reason - connection request failed reasons | ||
| 3063 | * @NL80211_CONN_FAIL_MAX_CLIENTS: Maximum number of clients that can be | ||
| 3064 | * handled by the AP is reached. | ||
| 3065 | * @NL80211_CONN_FAIL_BLOCKED_CLIENT: Client's MAC is in the AP's blocklist. | ||
| 3066 | */ | ||
| 3067 | enum nl80211_connect_failed_reason { | ||
| 3068 | NL80211_CONN_FAIL_MAX_CLIENTS, | ||
| 3069 | NL80211_CONN_FAIL_BLOCKED_CLIENT, | ||
| 3070 | }; | ||
| 3071 | |||
| 3026 | #endif /* __LINUX_NL80211_H */ | 3072 | #endif /* __LINUX_NL80211_H */ |
diff --git a/include/linux/of_mdio.h b/include/linux/of_mdio.h index 912c27a0f7ee..6ef49b803efb 100644 --- a/include/linux/of_mdio.h +++ b/include/linux/of_mdio.h | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #include <linux/phy.h> | 12 | #include <linux/phy.h> |
| 13 | #include <linux/of.h> | 13 | #include <linux/of.h> |
| 14 | 14 | ||
| 15 | #ifdef CONFIG_OF | ||
| 15 | extern int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np); | 16 | extern int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np); |
| 16 | extern struct phy_device *of_phy_find_device(struct device_node *phy_np); | 17 | extern struct phy_device *of_phy_find_device(struct device_node *phy_np); |
| 17 | extern struct phy_device *of_phy_connect(struct net_device *dev, | 18 | extern struct phy_device *of_phy_connect(struct net_device *dev, |
| @@ -24,4 +25,36 @@ extern struct phy_device *of_phy_connect_fixed_link(struct net_device *dev, | |||
| 24 | 25 | ||
| 25 | extern struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np); | 26 | extern struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np); |
| 26 | 27 | ||
| 28 | #else /* CONFIG_OF */ | ||
| 29 | int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) | ||
| 30 | { | ||
| 31 | return -ENOSYS; | ||
| 32 | } | ||
| 33 | |||
| 34 | struct phy_device *of_phy_find_device(struct device_node *phy_np) | ||
| 35 | { | ||
| 36 | return NULL; | ||
| 37 | } | ||
| 38 | |||
| 39 | struct phy_device *of_phy_connect(struct net_device *dev, | ||
| 40 | struct device_node *phy_np, | ||
| 41 | void (*hndlr)(struct net_device *), | ||
| 42 | u32 flags, phy_interface_t iface) | ||
| 43 | { | ||
| 44 | return NULL; | ||
| 45 | } | ||
| 46 | |||
| 47 | struct phy_device *of_phy_connect_fixed_link(struct net_device *dev, | ||
| 48 | void (*hndlr)(struct net_device *), | ||
| 49 | phy_interface_t iface) | ||
| 50 | { | ||
| 51 | return NULL; | ||
| 52 | } | ||
| 53 | |||
| 54 | struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np) | ||
| 55 | { | ||
| 56 | return NULL; | ||
| 57 | } | ||
| 58 | #endif /* CONFIG_OF */ | ||
| 59 | |||
| 27 | #endif /* __LINUX_OF_MDIO_H */ | 60 | #endif /* __LINUX_OF_MDIO_H */ |
diff --git a/include/linux/packet_diag.h b/include/linux/packet_diag.h new file mode 100644 index 000000000000..93f5fa94a431 --- /dev/null +++ b/include/linux/packet_diag.h | |||
| @@ -0,0 +1,72 @@ | |||
| 1 | #ifndef __PACKET_DIAG_H__ | ||
| 2 | #define __PACKET_DIAG_H__ | ||
| 3 | |||
| 4 | #include <linux/types.h> | ||
| 5 | |||
| 6 | struct packet_diag_req { | ||
| 7 | __u8 sdiag_family; | ||
| 8 | __u8 sdiag_protocol; | ||
| 9 | __u16 pad; | ||
| 10 | __u32 pdiag_ino; | ||
| 11 | __u32 pdiag_show; | ||
| 12 | __u32 pdiag_cookie[2]; | ||
| 13 | }; | ||
| 14 | |||
| 15 | #define PACKET_SHOW_INFO 0x00000001 /* Basic packet_sk information */ | ||
| 16 | #define PACKET_SHOW_MCLIST 0x00000002 /* A set of packet_diag_mclist-s */ | ||
| 17 | #define PACKET_SHOW_RING_CFG 0x00000004 /* Rings configuration parameters */ | ||
| 18 | #define PACKET_SHOW_FANOUT 0x00000008 | ||
| 19 | |||
| 20 | struct packet_diag_msg { | ||
| 21 | __u8 pdiag_family; | ||
| 22 | __u8 pdiag_type; | ||
| 23 | __u16 pdiag_num; | ||
| 24 | |||
| 25 | __u32 pdiag_ino; | ||
| 26 | __u32 pdiag_cookie[2]; | ||
| 27 | }; | ||
| 28 | |||
| 29 | enum { | ||
| 30 | PACKET_DIAG_INFO, | ||
| 31 | PACKET_DIAG_MCLIST, | ||
| 32 | PACKET_DIAG_RX_RING, | ||
| 33 | PACKET_DIAG_TX_RING, | ||
| 34 | PACKET_DIAG_FANOUT, | ||
| 35 | |||
| 36 | PACKET_DIAG_MAX, | ||
| 37 | }; | ||
| 38 | |||
| 39 | struct packet_diag_info { | ||
| 40 | __u32 pdi_index; | ||
| 41 | __u32 pdi_version; | ||
| 42 | __u32 pdi_reserve; | ||
| 43 | __u32 pdi_copy_thresh; | ||
| 44 | __u32 pdi_tstamp; | ||
| 45 | __u32 pdi_flags; | ||
| 46 | |||
| 47 | #define PDI_RUNNING 0x1 | ||
| 48 | #define PDI_AUXDATA 0x2 | ||
| 49 | #define PDI_ORIGDEV 0x4 | ||
| 50 | #define PDI_VNETHDR 0x8 | ||
| 51 | #define PDI_LOSS 0x10 | ||
| 52 | }; | ||
| 53 | |||
| 54 | struct packet_diag_mclist { | ||
| 55 | __u32 pdmc_index; | ||
| 56 | __u32 pdmc_count; | ||
| 57 | __u16 pdmc_type; | ||
| 58 | __u16 pdmc_alen; | ||
| 59 | __u8 pdmc_addr[MAX_ADDR_LEN]; | ||
| 60 | }; | ||
| 61 | |||
| 62 | struct packet_diag_ring { | ||
| 63 | __u32 pdr_block_size; | ||
| 64 | __u32 pdr_block_nr; | ||
| 65 | __u32 pdr_frame_size; | ||
| 66 | __u32 pdr_frame_nr; | ||
| 67 | __u32 pdr_retire_tmo; | ||
| 68 | __u32 pdr_sizeof_priv; | ||
| 69 | __u32 pdr_features; | ||
| 70 | }; | ||
| 71 | |||
| 72 | #endif | ||
diff --git a/include/linux/pps_kernel.h b/include/linux/pps_kernel.h index 94048547f29a..0cc45ae1afd5 100644 --- a/include/linux/pps_kernel.h +++ b/include/linux/pps_kernel.h | |||
| @@ -116,5 +116,14 @@ static inline void pps_get_ts(struct pps_event_time *ts) | |||
| 116 | 116 | ||
| 117 | #endif /* CONFIG_NTP_PPS */ | 117 | #endif /* CONFIG_NTP_PPS */ |
| 118 | 118 | ||
| 119 | /* Subtract known time delay from PPS event time(s) */ | ||
| 120 | static inline void pps_sub_ts(struct pps_event_time *ts, struct timespec delta) | ||
| 121 | { | ||
| 122 | ts->ts_real = timespec_sub(ts->ts_real, delta); | ||
| 123 | #ifdef CONFIG_NTP_PPS | ||
| 124 | ts->ts_raw = timespec_sub(ts->ts_raw, delta); | ||
| 125 | #endif | ||
| 126 | } | ||
| 127 | |||
| 119 | #endif /* LINUX_PPS_KERNEL_H */ | 128 | #endif /* LINUX_PPS_KERNEL_H */ |
| 120 | 129 | ||
diff --git a/include/linux/ptp_clock_kernel.h b/include/linux/ptp_clock_kernel.h index 945704c2ed65..f2dc6d8fc680 100644 --- a/include/linux/ptp_clock_kernel.h +++ b/include/linux/ptp_clock_kernel.h | |||
| @@ -21,6 +21,8 @@ | |||
| 21 | #ifndef _PTP_CLOCK_KERNEL_H_ | 21 | #ifndef _PTP_CLOCK_KERNEL_H_ |
| 22 | #define _PTP_CLOCK_KERNEL_H_ | 22 | #define _PTP_CLOCK_KERNEL_H_ |
| 23 | 23 | ||
| 24 | #include <linux/device.h> | ||
| 25 | #include <linux/pps_kernel.h> | ||
| 24 | #include <linux/ptp_clock.h> | 26 | #include <linux/ptp_clock.h> |
| 25 | 27 | ||
| 26 | 28 | ||
| @@ -40,7 +42,9 @@ struct ptp_clock_request { | |||
| 40 | * struct ptp_clock_info - decribes a PTP hardware clock | 42 | * struct ptp_clock_info - decribes a PTP hardware clock |
| 41 | * | 43 | * |
| 42 | * @owner: The clock driver should set to THIS_MODULE. | 44 | * @owner: The clock driver should set to THIS_MODULE. |
| 43 | * @name: A short name to identify the clock. | 45 | * @name: A short "friendly name" to identify the clock and to |
| 46 | * help distinguish PHY based devices from MAC based ones. | ||
| 47 | * The string is not meant to be a unique id. | ||
| 44 | * @max_adj: The maximum possible frequency adjustment, in parts per billon. | 48 | * @max_adj: The maximum possible frequency adjustment, in parts per billon. |
| 45 | * @n_alarm: The number of programmable alarms. | 49 | * @n_alarm: The number of programmable alarms. |
| 46 | * @n_ext_ts: The number of external time stamp channels. | 50 | * @n_ext_ts: The number of external time stamp channels. |
| @@ -92,10 +96,12 @@ struct ptp_clock; | |||
| 92 | /** | 96 | /** |
| 93 | * ptp_clock_register() - register a PTP hardware clock driver | 97 | * ptp_clock_register() - register a PTP hardware clock driver |
| 94 | * | 98 | * |
| 95 | * @info: Structure describing the new clock. | 99 | * @info: Structure describing the new clock. |
| 100 | * @parent: Pointer to the parent device of the new clock. | ||
| 96 | */ | 101 | */ |
| 97 | 102 | ||
| 98 | extern struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info); | 103 | extern struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info, |
| 104 | struct device *parent); | ||
| 99 | 105 | ||
| 100 | /** | 106 | /** |
| 101 | * ptp_clock_unregister() - unregister a PTP hardware clock driver | 107 | * ptp_clock_unregister() - unregister a PTP hardware clock driver |
| @@ -110,6 +116,7 @@ enum ptp_clock_events { | |||
| 110 | PTP_CLOCK_ALARM, | 116 | PTP_CLOCK_ALARM, |
| 111 | PTP_CLOCK_EXTTS, | 117 | PTP_CLOCK_EXTTS, |
| 112 | PTP_CLOCK_PPS, | 118 | PTP_CLOCK_PPS, |
| 119 | PTP_CLOCK_PPSUSR, | ||
| 113 | }; | 120 | }; |
| 114 | 121 | ||
| 115 | /** | 122 | /** |
| @@ -117,13 +124,17 @@ enum ptp_clock_events { | |||
| 117 | * | 124 | * |
| 118 | * @type: One of the ptp_clock_events enumeration values. | 125 | * @type: One of the ptp_clock_events enumeration values. |
| 119 | * @index: Identifies the source of the event. | 126 | * @index: Identifies the source of the event. |
| 120 | * @timestamp: When the event occured. | 127 | * @timestamp: When the event occurred (%PTP_CLOCK_EXTTS only). |
| 128 | * @pps_times: When the event occurred (%PTP_CLOCK_PPSUSR only). | ||
| 121 | */ | 129 | */ |
| 122 | 130 | ||
| 123 | struct ptp_clock_event { | 131 | struct ptp_clock_event { |
| 124 | int type; | 132 | int type; |
| 125 | int index; | 133 | int index; |
| 126 | u64 timestamp; | 134 | union { |
| 135 | u64 timestamp; | ||
| 136 | struct pps_event_time pps_times; | ||
| 137 | }; | ||
| 127 | }; | 138 | }; |
| 128 | 139 | ||
| 129 | /** | 140 | /** |
diff --git a/include/linux/rfkill.h b/include/linux/rfkill.h index 6fdf02737e9d..0ec590bb3611 100644 --- a/include/linux/rfkill.h +++ b/include/linux/rfkill.h | |||
| @@ -354,6 +354,37 @@ static inline bool rfkill_blocked(struct rfkill *rfkill) | |||
| 354 | } | 354 | } |
| 355 | #endif /* RFKILL || RFKILL_MODULE */ | 355 | #endif /* RFKILL || RFKILL_MODULE */ |
| 356 | 356 | ||
| 357 | |||
| 358 | #ifdef CONFIG_RFKILL_LEDS | ||
| 359 | /** | ||
| 360 | * rfkill_get_led_trigger_name - Get the LED trigger name for the button's LED. | ||
| 361 | * This function might return a NULL pointer if registering of the | ||
| 362 | * LED trigger failed. Use this as "default_trigger" for the LED. | ||
| 363 | */ | ||
| 364 | const char *rfkill_get_led_trigger_name(struct rfkill *rfkill); | ||
| 365 | |||
| 366 | /** | ||
| 367 | * rfkill_set_led_trigger_name -- set the LED trigger name | ||
| 368 | * @rfkill: rfkill struct | ||
| 369 | * @name: LED trigger name | ||
| 370 | * | ||
| 371 | * This function sets the LED trigger name of the radio LED | ||
| 372 | * trigger that rfkill creates. It is optional, but if called | ||
| 373 | * must be called before rfkill_register() to be effective. | ||
| 374 | */ | ||
| 375 | void rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name); | ||
| 376 | #else | ||
| 377 | static inline const char *rfkill_get_led_trigger_name(struct rfkill *rfkill) | ||
| 378 | { | ||
| 379 | return NULL; | ||
| 380 | } | ||
| 381 | |||
| 382 | static inline void | ||
| 383 | rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name) | ||
| 384 | { | ||
| 385 | } | ||
| 386 | #endif | ||
| 387 | |||
| 357 | #endif /* __KERNEL__ */ | 388 | #endif /* __KERNEL__ */ |
| 358 | 389 | ||
| 359 | #endif /* RFKILL_H */ | 390 | #endif /* RFKILL_H */ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index d23ca6245d54..9c5612f0374b 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -1526,6 +1526,9 @@ struct task_struct { | |||
| 1526 | * cache last used pipe for splice | 1526 | * cache last used pipe for splice |
| 1527 | */ | 1527 | */ |
| 1528 | struct pipe_inode_info *splice_pipe; | 1528 | struct pipe_inode_info *splice_pipe; |
| 1529 | |||
| 1530 | struct page_frag task_frag; | ||
| 1531 | |||
| 1529 | #ifdef CONFIG_TASK_DELAY_ACCT | 1532 | #ifdef CONFIG_TASK_DELAY_ACCT |
| 1530 | struct task_delay_info *delays; | 1533 | struct task_delay_info *delays; |
| 1531 | #endif | 1534 | #endif |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 7632c87da2c9..b33a3a1f205e 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -846,13 +846,16 @@ static inline int skb_shared(const struct sk_buff *skb) | |||
| 846 | * | 846 | * |
| 847 | * NULL is returned on a memory allocation failure. | 847 | * NULL is returned on a memory allocation failure. |
| 848 | */ | 848 | */ |
| 849 | static inline struct sk_buff *skb_share_check(struct sk_buff *skb, | 849 | static inline struct sk_buff *skb_share_check(struct sk_buff *skb, gfp_t pri) |
| 850 | gfp_t pri) | ||
| 851 | { | 850 | { |
| 852 | might_sleep_if(pri & __GFP_WAIT); | 851 | might_sleep_if(pri & __GFP_WAIT); |
| 853 | if (skb_shared(skb)) { | 852 | if (skb_shared(skb)) { |
| 854 | struct sk_buff *nskb = skb_clone(skb, pri); | 853 | struct sk_buff *nskb = skb_clone(skb, pri); |
| 855 | kfree_skb(skb); | 854 | |
| 855 | if (likely(nskb)) | ||
| 856 | consume_skb(skb); | ||
| 857 | else | ||
| 858 | kfree_skb(skb); | ||
| 856 | skb = nskb; | 859 | skb = nskb; |
| 857 | } | 860 | } |
| 858 | return skb; | 861 | return skb; |
diff --git a/include/linux/snmp.h b/include/linux/snmp.h index 00bc189cb395..fdfba235f9f1 100644 --- a/include/linux/snmp.h +++ b/include/linux/snmp.h | |||
| @@ -18,7 +18,14 @@ | |||
| 18 | enum | 18 | enum |
| 19 | { | 19 | { |
| 20 | IPSTATS_MIB_NUM = 0, | 20 | IPSTATS_MIB_NUM = 0, |
| 21 | /* frequently written fields in fast path, kept in same cache line */ | ||
| 21 | IPSTATS_MIB_INPKTS, /* InReceives */ | 22 | IPSTATS_MIB_INPKTS, /* InReceives */ |
| 23 | IPSTATS_MIB_INOCTETS, /* InOctets */ | ||
| 24 | IPSTATS_MIB_INDELIVERS, /* InDelivers */ | ||
| 25 | IPSTATS_MIB_OUTFORWDATAGRAMS, /* OutForwDatagrams */ | ||
| 26 | IPSTATS_MIB_OUTPKTS, /* OutRequests */ | ||
| 27 | IPSTATS_MIB_OUTOCTETS, /* OutOctets */ | ||
| 28 | /* other fields */ | ||
| 22 | IPSTATS_MIB_INHDRERRORS, /* InHdrErrors */ | 29 | IPSTATS_MIB_INHDRERRORS, /* InHdrErrors */ |
| 23 | IPSTATS_MIB_INTOOBIGERRORS, /* InTooBigErrors */ | 30 | IPSTATS_MIB_INTOOBIGERRORS, /* InTooBigErrors */ |
| 24 | IPSTATS_MIB_INNOROUTES, /* InNoRoutes */ | 31 | IPSTATS_MIB_INNOROUTES, /* InNoRoutes */ |
| @@ -26,9 +33,6 @@ enum | |||
| 26 | IPSTATS_MIB_INUNKNOWNPROTOS, /* InUnknownProtos */ | 33 | IPSTATS_MIB_INUNKNOWNPROTOS, /* InUnknownProtos */ |
| 27 | IPSTATS_MIB_INTRUNCATEDPKTS, /* InTruncatedPkts */ | 34 | IPSTATS_MIB_INTRUNCATEDPKTS, /* InTruncatedPkts */ |
| 28 | IPSTATS_MIB_INDISCARDS, /* InDiscards */ | 35 | IPSTATS_MIB_INDISCARDS, /* InDiscards */ |
| 29 | IPSTATS_MIB_INDELIVERS, /* InDelivers */ | ||
| 30 | IPSTATS_MIB_OUTFORWDATAGRAMS, /* OutForwDatagrams */ | ||
| 31 | IPSTATS_MIB_OUTPKTS, /* OutRequests */ | ||
| 32 | IPSTATS_MIB_OUTDISCARDS, /* OutDiscards */ | 36 | IPSTATS_MIB_OUTDISCARDS, /* OutDiscards */ |
| 33 | IPSTATS_MIB_OUTNOROUTES, /* OutNoRoutes */ | 37 | IPSTATS_MIB_OUTNOROUTES, /* OutNoRoutes */ |
| 34 | IPSTATS_MIB_REASMTIMEOUT, /* ReasmTimeout */ | 38 | IPSTATS_MIB_REASMTIMEOUT, /* ReasmTimeout */ |
| @@ -42,8 +46,6 @@ enum | |||
| 42 | IPSTATS_MIB_OUTMCASTPKTS, /* OutMcastPkts */ | 46 | IPSTATS_MIB_OUTMCASTPKTS, /* OutMcastPkts */ |
| 43 | IPSTATS_MIB_INBCASTPKTS, /* InBcastPkts */ | 47 | IPSTATS_MIB_INBCASTPKTS, /* InBcastPkts */ |
| 44 | IPSTATS_MIB_OUTBCASTPKTS, /* OutBcastPkts */ | 48 | IPSTATS_MIB_OUTBCASTPKTS, /* OutBcastPkts */ |
| 45 | IPSTATS_MIB_INOCTETS, /* InOctets */ | ||
| 46 | IPSTATS_MIB_OUTOCTETS, /* OutOctets */ | ||
| 47 | IPSTATS_MIB_INMCASTOCTETS, /* InMcastOctets */ | 49 | IPSTATS_MIB_INMCASTOCTETS, /* InMcastOctets */ |
| 48 | IPSTATS_MIB_OUTMCASTOCTETS, /* OutMcastOctets */ | 50 | IPSTATS_MIB_OUTMCASTOCTETS, /* OutMcastOctets */ |
| 49 | IPSTATS_MIB_INBCASTOCTETS, /* InBcastOctets */ | 51 | IPSTATS_MIB_INBCASTOCTETS, /* InBcastOctets */ |
| @@ -239,6 +241,10 @@ enum | |||
| 239 | LINUX_MIB_TCPCHALLENGEACK, /* TCPChallengeACK */ | 241 | LINUX_MIB_TCPCHALLENGEACK, /* TCPChallengeACK */ |
| 240 | LINUX_MIB_TCPSYNCHALLENGE, /* TCPSYNChallenge */ | 242 | LINUX_MIB_TCPSYNCHALLENGE, /* TCPSYNChallenge */ |
| 241 | LINUX_MIB_TCPFASTOPENACTIVE, /* TCPFastOpenActive */ | 243 | LINUX_MIB_TCPFASTOPENACTIVE, /* TCPFastOpenActive */ |
| 244 | LINUX_MIB_TCPFASTOPENPASSIVE, /* TCPFastOpenPassive*/ | ||
| 245 | LINUX_MIB_TCPFASTOPENPASSIVEFAIL, /* TCPFastOpenPassiveFail */ | ||
| 246 | LINUX_MIB_TCPFASTOPENLISTENOVERFLOW, /* TCPFastOpenListenOverflow */ | ||
| 247 | LINUX_MIB_TCPFASTOPENCOOKIEREQD, /* TCPFastOpenCookieReqd */ | ||
| 242 | __LINUX_MIB_MAX | 248 | __LINUX_MIB_MAX |
| 243 | }; | 249 | }; |
| 244 | 250 | ||
diff --git a/include/linux/ssb/ssb_driver_chipcommon.h b/include/linux/ssb/ssb_driver_chipcommon.h index 1a6b0045b06b..c2b02a5c86ae 100644 --- a/include/linux/ssb/ssb_driver_chipcommon.h +++ b/include/linux/ssb/ssb_driver_chipcommon.h | |||
| @@ -504,7 +504,9 @@ | |||
| 504 | #define SSB_CHIPCO_FLASHCTL_ST_SE 0x02D8 /* Sector Erase */ | 504 | #define SSB_CHIPCO_FLASHCTL_ST_SE 0x02D8 /* Sector Erase */ |
| 505 | #define SSB_CHIPCO_FLASHCTL_ST_BE 0x00C7 /* Bulk Erase */ | 505 | #define SSB_CHIPCO_FLASHCTL_ST_BE 0x00C7 /* Bulk Erase */ |
| 506 | #define SSB_CHIPCO_FLASHCTL_ST_DP 0x00B9 /* Deep Power-down */ | 506 | #define SSB_CHIPCO_FLASHCTL_ST_DP 0x00B9 /* Deep Power-down */ |
| 507 | #define SSB_CHIPCO_FLASHCTL_ST_RSIG 0x03AB /* Read Electronic Signature */ | 507 | #define SSB_CHIPCO_FLASHCTL_ST_RES 0x03AB /* Read Electronic Signature */ |
| 508 | #define SSB_CHIPCO_FLASHCTL_ST_CSA 0x1000 /* Keep chip select asserted */ | ||
| 509 | #define SSB_CHIPCO_FLASHCTL_ST_SSE 0x0220 /* Sub-sector Erase */ | ||
| 508 | 510 | ||
| 509 | /* Status register bits for ST flashes */ | 511 | /* Status register bits for ST flashes */ |
| 510 | #define SSB_CHIPCO_FLASHSTA_ST_WIP 0x01 /* Write In Progress */ | 512 | #define SSB_CHIPCO_FLASHSTA_ST_WIP 0x01 /* Write In Progress */ |
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h index b69bdb1e08b6..a1547ea3920d 100644 --- a/include/linux/stmmac.h +++ b/include/linux/stmmac.h | |||
| @@ -76,7 +76,6 @@ | |||
| 76 | /* Platfrom data for platform device structure's platform_data field */ | 76 | /* Platfrom data for platform device structure's platform_data field */ |
| 77 | 77 | ||
| 78 | struct stmmac_mdio_bus_data { | 78 | struct stmmac_mdio_bus_data { |
| 79 | int bus_id; | ||
| 80 | int (*phy_reset)(void *priv); | 79 | int (*phy_reset)(void *priv); |
| 81 | unsigned int phy_mask; | 80 | unsigned int phy_mask; |
| 82 | int *irqs; | 81 | int *irqs; |
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index eb125a4c30b3..67c789ae719c 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
| @@ -110,6 +110,7 @@ enum { | |||
| 110 | #define TCP_REPAIR_QUEUE 20 | 110 | #define TCP_REPAIR_QUEUE 20 |
| 111 | #define TCP_QUEUE_SEQ 21 | 111 | #define TCP_QUEUE_SEQ 21 |
| 112 | #define TCP_REPAIR_OPTIONS 22 | 112 | #define TCP_REPAIR_OPTIONS 22 |
| 113 | #define TCP_FASTOPEN 23 /* Enable FastOpen on listeners */ | ||
| 113 | 114 | ||
| 114 | struct tcp_repair_opt { | 115 | struct tcp_repair_opt { |
| 115 | __u32 opt_code; | 116 | __u32 opt_code; |
| @@ -246,6 +247,7 @@ static inline unsigned int tcp_optlen(const struct sk_buff *skb) | |||
| 246 | /* TCP Fast Open */ | 247 | /* TCP Fast Open */ |
| 247 | #define TCP_FASTOPEN_COOKIE_MIN 4 /* Min Fast Open Cookie size in bytes */ | 248 | #define TCP_FASTOPEN_COOKIE_MIN 4 /* Min Fast Open Cookie size in bytes */ |
| 248 | #define TCP_FASTOPEN_COOKIE_MAX 16 /* Max Fast Open Cookie size in bytes */ | 249 | #define TCP_FASTOPEN_COOKIE_MAX 16 /* Max Fast Open Cookie size in bytes */ |
| 250 | #define TCP_FASTOPEN_COOKIE_SIZE 8 /* the size employed by this impl. */ | ||
| 249 | 251 | ||
| 250 | /* TCP Fast Open Cookie as stored in memory */ | 252 | /* TCP Fast Open Cookie as stored in memory */ |
| 251 | struct tcp_fastopen_cookie { | 253 | struct tcp_fastopen_cookie { |
| @@ -312,9 +314,14 @@ struct tcp_request_sock { | |||
| 312 | /* Only used by TCP MD5 Signature so far. */ | 314 | /* Only used by TCP MD5 Signature so far. */ |
| 313 | const struct tcp_request_sock_ops *af_specific; | 315 | const struct tcp_request_sock_ops *af_specific; |
| 314 | #endif | 316 | #endif |
| 317 | struct sock *listener; /* needed for TFO */ | ||
| 315 | u32 rcv_isn; | 318 | u32 rcv_isn; |
| 316 | u32 snt_isn; | 319 | u32 snt_isn; |
| 317 | u32 snt_synack; /* synack sent time */ | 320 | u32 snt_synack; /* synack sent time */ |
| 321 | u32 rcv_nxt; /* the ack # by SYNACK. For | ||
| 322 | * FastOpen it's the seq# | ||
| 323 | * after data-in-SYN. | ||
| 324 | */ | ||
| 318 | }; | 325 | }; |
| 319 | 326 | ||
| 320 | static inline struct tcp_request_sock *tcp_rsk(const struct request_sock *req) | 327 | static inline struct tcp_request_sock *tcp_rsk(const struct request_sock *req) |
| @@ -505,14 +512,18 @@ struct tcp_sock { | |||
| 505 | struct tcp_md5sig_info __rcu *md5sig_info; | 512 | struct tcp_md5sig_info __rcu *md5sig_info; |
| 506 | #endif | 513 | #endif |
| 507 | 514 | ||
| 508 | /* TCP fastopen related information */ | ||
| 509 | struct tcp_fastopen_request *fastopen_req; | ||
| 510 | |||
| 511 | /* When the cookie options are generated and exchanged, then this | 515 | /* When the cookie options are generated and exchanged, then this |
| 512 | * object holds a reference to them (cookie_values->kref). Also | 516 | * object holds a reference to them (cookie_values->kref). Also |
| 513 | * contains related tcp_cookie_transactions fields. | 517 | * contains related tcp_cookie_transactions fields. |
| 514 | */ | 518 | */ |
| 515 | struct tcp_cookie_values *cookie_values; | 519 | struct tcp_cookie_values *cookie_values; |
| 520 | |||
| 521 | /* TCP fastopen related information */ | ||
| 522 | struct tcp_fastopen_request *fastopen_req; | ||
| 523 | /* fastopen_rsk points to request_sock that resulted in this big | ||
| 524 | * socket. Used to retransmit SYNACKs etc. | ||
| 525 | */ | ||
| 526 | struct request_sock *fastopen_rsk; | ||
| 516 | }; | 527 | }; |
| 517 | 528 | ||
| 518 | enum tsq_flags { | 529 | enum tsq_flags { |
| @@ -552,6 +563,38 @@ static inline struct tcp_timewait_sock *tcp_twsk(const struct sock *sk) | |||
| 552 | return (struct tcp_timewait_sock *)sk; | 563 | return (struct tcp_timewait_sock *)sk; |
| 553 | } | 564 | } |
| 554 | 565 | ||
| 566 | static inline bool tcp_passive_fastopen(const struct sock *sk) | ||
| 567 | { | ||
| 568 | return (sk->sk_state == TCP_SYN_RECV && | ||
| 569 | tcp_sk(sk)->fastopen_rsk != NULL); | ||
| 570 | } | ||
| 571 | |||
| 572 | static inline bool fastopen_cookie_present(struct tcp_fastopen_cookie *foc) | ||
| 573 | { | ||
| 574 | return foc->len != -1; | ||
| 575 | } | ||
| 576 | |||
| 577 | extern void tcp_sock_destruct(struct sock *sk); | ||
| 578 | |||
| 579 | static inline int fastopen_init_queue(struct sock *sk, int backlog) | ||
| 580 | { | ||
| 581 | struct request_sock_queue *queue = | ||
| 582 | &inet_csk(sk)->icsk_accept_queue; | ||
| 583 | |||
| 584 | if (queue->fastopenq == NULL) { | ||
| 585 | queue->fastopenq = kzalloc( | ||
| 586 | sizeof(struct fastopen_queue), | ||
| 587 | sk->sk_allocation); | ||
| 588 | if (queue->fastopenq == NULL) | ||
| 589 | return -ENOMEM; | ||
| 590 | |||
| 591 | sk->sk_destruct = tcp_sock_destruct; | ||
| 592 | spin_lock_init(&queue->fastopenq->lock); | ||
| 593 | } | ||
| 594 | queue->fastopenq->max_qlen = backlog; | ||
| 595 | return 0; | ||
| 596 | } | ||
| 597 | |||
| 555 | #endif /* __KERNEL__ */ | 598 | #endif /* __KERNEL__ */ |
| 556 | 599 | ||
| 557 | #endif /* _LINUX_TCP_H */ | 600 | #endif /* _LINUX_TCP_H */ |
diff --git a/include/linux/tcp_metrics.h b/include/linux/tcp_metrics.h new file mode 100644 index 000000000000..cb5157b55f32 --- /dev/null +++ b/include/linux/tcp_metrics.h | |||
| @@ -0,0 +1,54 @@ | |||
| 1 | /* tcp_metrics.h - TCP Metrics Interface */ | ||
| 2 | |||
| 3 | #ifndef _LINUX_TCP_METRICS_H | ||
| 4 | #define _LINUX_TCP_METRICS_H | ||
| 5 | |||
| 6 | #include <linux/types.h> | ||
| 7 | |||
| 8 | /* NETLINK_GENERIC related info | ||
| 9 | */ | ||
| 10 | #define TCP_METRICS_GENL_NAME "tcp_metrics" | ||
| 11 | #define TCP_METRICS_GENL_VERSION 0x1 | ||
| 12 | |||
| 13 | enum tcp_metric_index { | ||
| 14 | TCP_METRIC_RTT, | ||
| 15 | TCP_METRIC_RTTVAR, | ||
| 16 | TCP_METRIC_SSTHRESH, | ||
| 17 | TCP_METRIC_CWND, | ||
| 18 | TCP_METRIC_REORDERING, | ||
| 19 | |||
| 20 | /* Always last. */ | ||
| 21 | __TCP_METRIC_MAX, | ||
| 22 | }; | ||
| 23 | |||
| 24 | #define TCP_METRIC_MAX (__TCP_METRIC_MAX - 1) | ||
| 25 | |||
| 26 | enum { | ||
| 27 | TCP_METRICS_ATTR_UNSPEC, | ||
| 28 | TCP_METRICS_ATTR_ADDR_IPV4, /* u32 */ | ||
| 29 | TCP_METRICS_ATTR_ADDR_IPV6, /* binary */ | ||
| 30 | TCP_METRICS_ATTR_AGE, /* msecs */ | ||
| 31 | TCP_METRICS_ATTR_TW_TSVAL, /* u32, raw, rcv tsval */ | ||
| 32 | TCP_METRICS_ATTR_TW_TS_STAMP, /* s32, sec age */ | ||
| 33 | TCP_METRICS_ATTR_VALS, /* nested +1, u32 */ | ||
| 34 | TCP_METRICS_ATTR_FOPEN_MSS, /* u16 */ | ||
| 35 | TCP_METRICS_ATTR_FOPEN_SYN_DROPS, /* u16, count of drops */ | ||
| 36 | TCP_METRICS_ATTR_FOPEN_SYN_DROP_TS, /* msecs age */ | ||
| 37 | TCP_METRICS_ATTR_FOPEN_COOKIE, /* binary */ | ||
| 38 | |||
| 39 | __TCP_METRICS_ATTR_MAX, | ||
| 40 | }; | ||
| 41 | |||
| 42 | #define TCP_METRICS_ATTR_MAX (__TCP_METRICS_ATTR_MAX - 1) | ||
| 43 | |||
| 44 | enum { | ||
| 45 | TCP_METRICS_CMD_UNSPEC, | ||
| 46 | TCP_METRICS_CMD_GET, | ||
| 47 | TCP_METRICS_CMD_DEL, | ||
| 48 | |||
| 49 | __TCP_METRICS_CMD_MAX, | ||
| 50 | }; | ||
| 51 | |||
| 52 | #define TCP_METRICS_CMD_MAX (__TCP_METRICS_CMD_MAX - 1) | ||
| 53 | |||
| 54 | #endif /* _LINUX_TCP_METRICS_H */ | ||
diff --git a/include/linux/tipc_config.h b/include/linux/tipc_config.h index c98928420100..0b1e3f218a36 100644 --- a/include/linux/tipc_config.h +++ b/include/linux/tipc_config.h | |||
| @@ -89,8 +89,8 @@ | |||
| 89 | 89 | ||
| 90 | #define TIPC_CMD_GET_REMOTE_MNG 0x4003 /* tx none, rx unsigned */ | 90 | #define TIPC_CMD_GET_REMOTE_MNG 0x4003 /* tx none, rx unsigned */ |
| 91 | #define TIPC_CMD_GET_MAX_PORTS 0x4004 /* tx none, rx unsigned */ | 91 | #define TIPC_CMD_GET_MAX_PORTS 0x4004 /* tx none, rx unsigned */ |
| 92 | #define TIPC_CMD_GET_MAX_PUBL 0x4005 /* tx none, rx unsigned */ | 92 | #define TIPC_CMD_GET_MAX_PUBL 0x4005 /* obsoleted */ |
| 93 | #define TIPC_CMD_GET_MAX_SUBSCR 0x4006 /* tx none, rx unsigned */ | 93 | #define TIPC_CMD_GET_MAX_SUBSCR 0x4006 /* obsoleted */ |
| 94 | #define TIPC_CMD_GET_MAX_ZONES 0x4007 /* obsoleted */ | 94 | #define TIPC_CMD_GET_MAX_ZONES 0x4007 /* obsoleted */ |
| 95 | #define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* obsoleted */ | 95 | #define TIPC_CMD_GET_MAX_CLUSTERS 0x4008 /* obsoleted */ |
| 96 | #define TIPC_CMD_GET_MAX_NODES 0x4009 /* obsoleted */ | 96 | #define TIPC_CMD_GET_MAX_NODES 0x4009 /* obsoleted */ |
| @@ -115,8 +115,8 @@ | |||
| 115 | #define TIPC_CMD_SET_NODE_ADDR 0x8001 /* tx net_addr, rx none */ | 115 | #define TIPC_CMD_SET_NODE_ADDR 0x8001 /* tx net_addr, rx none */ |
| 116 | #define TIPC_CMD_SET_REMOTE_MNG 0x8003 /* tx unsigned, rx none */ | 116 | #define TIPC_CMD_SET_REMOTE_MNG 0x8003 /* tx unsigned, rx none */ |
| 117 | #define TIPC_CMD_SET_MAX_PORTS 0x8004 /* tx unsigned, rx none */ | 117 | #define TIPC_CMD_SET_MAX_PORTS 0x8004 /* tx unsigned, rx none */ |
| 118 | #define TIPC_CMD_SET_MAX_PUBL 0x8005 /* tx unsigned, rx none */ | 118 | #define TIPC_CMD_SET_MAX_PUBL 0x8005 /* obsoleted */ |
| 119 | #define TIPC_CMD_SET_MAX_SUBSCR 0x8006 /* tx unsigned, rx none */ | 119 | #define TIPC_CMD_SET_MAX_SUBSCR 0x8006 /* obsoleted */ |
| 120 | #define TIPC_CMD_SET_MAX_ZONES 0x8007 /* obsoleted */ | 120 | #define TIPC_CMD_SET_MAX_ZONES 0x8007 /* obsoleted */ |
| 121 | #define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* obsoleted */ | 121 | #define TIPC_CMD_SET_MAX_CLUSTERS 0x8008 /* obsoleted */ |
| 122 | #define TIPC_CMD_SET_MAX_NODES 0x8009 /* obsoleted */ | 122 | #define TIPC_CMD_SET_MAX_NODES 0x8009 /* obsoleted */ |
