~ubuntu-branches/ubuntu/trusty/linux-armadaxp/trusty

« back to all changes in this revision

Viewing changes to net/netfilter/ipset/ip_set_bitmap_ipmac.c

  • Committer: Package Import Robot
  • Author(s): Michael Casadevall, Bryan Wu, Dann Frazier, Michael Casadeall
  • Date: 2012-03-10 15:00:54 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20120310150054-flugb39zon8vvgwe
Tags: 3.2.0-1600.1
[ Bryan Wu ]
* UBUNTU: import debian/debian.env and debian.armadaxp

[ Dann Frazier ]
* ARM: Armada XP: remove trailing '/' in dirnames in mvRules.mk

[ Michael Casadeall ]
* tools: add some tools for Marvell Armada XP processor
* kernel: timer tick hacking from Marvell
* kernel: Sheeva Errata: add delay on Sheeva when powering down
* net: add Marvell NFP netfilter
* net: socket and skb modifications made by Marvell
* miscdevice: add minor IDs for some Marvell Armada drivers
* fs: introduce memory pool for splice()
* video: EDID detection updates from Marvell Armada XP patchset
* video: backlight: add Marvell Dove LCD backlight driver
* video: display: add THS8200 display driver
* video: framebuffer: add Marvell Dove and Armada XP processor onchip LCD controller driver
* usbtest: add Interrupt transfer testing by Marvell Armada XP code
* usb: ehci: add support for Marvell EHCI controler
* tty/serial: 8250: add support for Marvell Armada XP processor and DeviceTree work
* rtc: add support for Marvell Armada XP onchip RTC controller
* net: pppoe: add Marvell ethernet NFP hook in PPPoE networking driver
* mtd: nand: add support for Marvell Armada XP Nand Flash Controller
* mtd: maps: add Marvell Armada XP specific map driver
* mmc: add support for Marvell Armada XP MMC/SD host controller
* i2c: add support for Marvell Armada XP onchip i2c bus controller
* hwmon: add Kconfig option for Armada XP onchip thermal sensor driver
* dmaengine: add Net DMA support for splice and update Marvell XOR DMA engine driver
* ata: add support for Marvell Armada XP SATA controller and update some quirks
* ARM: add Marvell Armada XP machine to mach-types
* ARM: oprofile: add support for Marvell PJ4B core
* ARM: mm: more ARMv6 switches for Marvell Armada XP
* ARM: remove static declaration to allow compilation
* ARM: alignment access fault trick
* ARM: mm: skip some fault fixing when run on NONE SMP ARMv6 mode during early abort event
* ARM: mm: add Marvell Sheeva CPU Architecture for PJ4B
* ARM: introduce optimized copy operation for Marvell Armada XP
* ARM: SAUCE: hardware breakpoint trick for Marvell Armada XP
* ARM: big endian and little endian tricks for Marvell Armada XP
* ARM: SAUCE: Add Marvell Armada XP build rules to arch/arm/kernel/Makefile
* ARM: vfp: add special handling for Marvell Armada XP
* ARM: add support for Marvell U-Boot
* ARM: add mv_controller_num for ARM PCI drivers
* ARM: add support for local PMUs, general SMP tweaks and cache flushing
* ARM: add Marvell device identifies in glue-proc.h
* ARM: add IPC driver support for Marvell platforms
* ARM: add DMA mapping for Marvell platforms
* ARM: add Sheeva errata and PJ4B code for booting
* ARM: update Kconfig and Makefile to include Marvell Armada XP platforms
* ARM: Armada XP: import LSP from Marvell for Armada XP 3.2 kernel enablement

Show diffs side-by-side

added added

removed removed

Lines of Context:
99
99
/* Base variant */
100
100
 
101
101
static int
102
 
bitmap_ipmac_test(struct ip_set *set, void *value, u32 timeout)
 
102
bitmap_ipmac_test(struct ip_set *set, void *value, u32 timeout, u32 flags)
103
103
{
104
104
        const struct bitmap_ipmac *map = set->data;
105
105
        const struct ipmac *data = value;
117
117
}
118
118
 
119
119
static int
120
 
bitmap_ipmac_add(struct ip_set *set, void *value, u32 timeout)
 
120
bitmap_ipmac_add(struct ip_set *set, void *value, u32 timeout, u32 flags)
121
121
{
122
122
        struct bitmap_ipmac *map = set->data;
123
123
        const struct ipmac *data = value;
146
146
}
147
147
 
148
148
static int
149
 
bitmap_ipmac_del(struct ip_set *set, void *value, u32 timeout)
 
149
bitmap_ipmac_del(struct ip_set *set, void *value, u32 timeout, u32 flags)
150
150
{
151
151
        struct bitmap_ipmac *map = set->data;
152
152
        const struct ipmac *data = value;
212
212
/* Timeout variant */
213
213
 
214
214
static int
215
 
bitmap_ipmac_ttest(struct ip_set *set, void *value, u32 timeout)
 
215
bitmap_ipmac_ttest(struct ip_set *set, void *value, u32 timeout, u32 flags)
216
216
{
217
217
        const struct bitmap_ipmac *map = set->data;
218
218
        const struct ipmac *data = value;
231
231
}
232
232
 
233
233
static int
234
 
bitmap_ipmac_tadd(struct ip_set *set, void *value, u32 timeout)
 
234
bitmap_ipmac_tadd(struct ip_set *set, void *value, u32 timeout, u32 flags)
235
235
{
236
236
        struct bitmap_ipmac *map = set->data;
237
237
        const struct ipmac *data = value;
238
238
        struct ipmac_telem *elem = bitmap_ipmac_elem(map, data->id);
 
239
        bool flag_exist = flags & IPSET_FLAG_EXIST;
239
240
 
240
241
        switch (elem->match) {
241
242
        case MAC_UNSET:
242
 
                if (!data->ether)
 
243
                if (!(data->ether || flag_exist))
243
244
                        /* Already added without ethernet address */
244
245
                        return -IPSET_ERR_EXIST;
245
246
                /* Fill the MAC address and activate the timer */
251
252
                elem->timeout = ip_set_timeout_set(timeout);
252
253
                break;
253
254
        case MAC_FILLED:
254
 
                if (!bitmap_expired(map, data->id))
 
255
                if (!(bitmap_expired(map, data->id) || flag_exist))
255
256
                        return -IPSET_ERR_EXIST;
256
257
                /* Fall through */
257
258
        case MAC_EMPTY:
273
274
}
274
275
 
275
276
static int
276
 
bitmap_ipmac_tdel(struct ip_set *set, void *value, u32 timeout)
 
277
bitmap_ipmac_tdel(struct ip_set *set, void *value, u32 timeout, u32 flags)
277
278
{
278
279
        struct bitmap_ipmac *map = set->data;
279
280
        const struct ipmac *data = value;
337
338
 
338
339
static int
339
340
bitmap_ipmac_kadt(struct ip_set *set, const struct sk_buff *skb,
340
 
                  enum ipset_adt adt, u8 pf, u8 dim, u8 flags)
 
341
                  const struct xt_action_param *par,
 
342
                  enum ipset_adt adt, const struct ip_set_adt_opt *opt)
341
343
{
342
344
        struct bitmap_ipmac *map = set->data;
343
345
        ipset_adtfn adtfn = set->variant->adt[adt];
344
346
        struct ipmac data;
345
347
 
346
348
        /* MAC can be src only */
347
 
        if (!(flags & IPSET_DIM_TWO_SRC))
 
349
        if (!(opt->flags & IPSET_DIM_TWO_SRC))
348
350
                return 0;
349
351
 
350
 
        data.id = ntohl(ip4addr(skb, flags & IPSET_DIM_ONE_SRC));
 
352
        data.id = ntohl(ip4addr(skb, opt->flags & IPSET_DIM_ONE_SRC));
351
353
        if (data.id < map->first_ip || data.id > map->last_ip)
352
354
                return -IPSET_ERR_BITMAP_RANGE;
353
355
 
359
361
        data.id -= map->first_ip;
360
362
        data.ether = eth_hdr(skb)->h_source;
361
363
 
362
 
        return adtfn(set, &data, map->timeout);
 
364
        return adtfn(set, &data, opt_timeout(opt, map), opt->cmdflags);
363
365
}
364
366
 
365
367
static int
366
368
bitmap_ipmac_uadt(struct ip_set *set, struct nlattr *tb[],
367
 
                  enum ipset_adt adt, u32 *lineno, u32 flags)
 
369
                  enum ipset_adt adt, u32 *lineno, u32 flags, bool retried)
368
370
{
369
371
        const struct bitmap_ipmac *map = set->data;
370
372
        ipset_adtfn adtfn = set->variant->adt[adt];
399
401
 
400
402
        data.id -= map->first_ip;
401
403
 
402
 
        ret = adtfn(set, &data, timeout);
 
404
        ret = adtfn(set, &data, timeout, flags);
403
405
 
404
406
        return ip_set_eexist(ret, flags) ? 0 : ret;
405
407
}
577
579
 
578
580
                if (cidr >= 32)
579
581
                        return -IPSET_ERR_INVALID_CIDR;
580
 
                last_ip = first_ip | ~ip_set_hostmask(cidr);
 
582
                ip_set_mask_from_to(first_ip, last_ip, cidr);
581
583
        } else
582
584
                return -IPSET_ERR_PROTOCOL;
583
585
 
622
624
        .features       = IPSET_TYPE_IP | IPSET_TYPE_MAC,
623
625
        .dimension      = IPSET_DIM_TWO,
624
626
        .family         = AF_INET,
625
 
        .revision       = 0,
 
627
        .revision_min   = 0,
 
628
        .revision_max   = 0,
626
629
        .create         = bitmap_ipmac_create,
627
630
        .create_policy  = {
628
631
                [IPSET_ATTR_IP]         = { .type = NLA_NESTED },
632
635
        },
633
636
        .adt_policy     = {
634
637
                [IPSET_ATTR_IP]         = { .type = NLA_NESTED },
635
 
                [IPSET_ATTR_ETHER]      = { .type = NLA_BINARY, .len  = ETH_ALEN },
 
638
                [IPSET_ATTR_ETHER]      = { .type = NLA_BINARY,
 
639
                                            .len  = ETH_ALEN },
636
640
                [IPSET_ATTR_TIMEOUT]    = { .type = NLA_U32 },
637
641
                [IPSET_ATTR_LINENO]     = { .type = NLA_U32 },
638
642
        },