]> git.llucax.com Git - software/pymin.git/blob - services/nat/masq.py
Add GPL v3 license to the project
[software/pymin.git] / services / nat / masq.py
1 # vim: set encoding=utf-8 et sw=4 sts=4 :
2
3 from pymin.seqtools import Sequence
4 from pymin.service.util import ListSubHandler
5
6 __all__ = ('MasqHandler',)
7
8
9 class Masq(Sequence):
10     r"""Masq(dev, src_net) -> Masq instance.
11
12     dev - Netword device to use.
13     src_net - Source network to apply the masquerade (as IP/mask).
14     """
15
16     def __init__(self, dev, src_net):
17         r"Initialize object, see class documentation for details."
18         # TODO Validate
19         self.dev = dev
20         self.src_net = src_net
21
22     def update(self, dev=None, src_net=None):
23         r"update([dev[, ...]]) -> Update the values of a masq (see class doc)."
24         # TODO Validate
25         if dev is not None: self.dev = dev
26         if src_net is not None: self.src_net = src_net
27
28     def __cmp__(self, other):
29         r"Compares two Masq objects."
30         return cmp(self.as_tuple(), other.as_tuple())
31
32     def as_tuple(self):
33         r"Return a tuple representing the masquerade."
34         return (self.dev, self.src_net)
35
36     def as_call_list(self, index=None):
37         cmd = ['-t', 'nat', '-I', 'POSTROUTING']
38         if index is not None:
39             cmd.append(str(index))
40         cmd.extend(('-o', self.dev, '-j', 'MASQUERADE', '-s', self.src_net))
41         return cmd
42
43 class MasqHandler(ListSubHandler):
44     r"""MasqHandler(parent) -> MasqHandler instance.
45
46     This class is a helper for NatHandler to do all the work related to
47     masquerading.
48
49     parent - The parent service handler.
50     """
51
52     handler_help = u"Manage NAT masquerading."
53
54     _cont_subhandler_attr = 'masqs'
55     _cont_subhandler_class = Masq
56