Manage iprules Supported Types: fwmark
| 20 | |
| 21 | |
| 22 | class CsRule: |
| 23 | """ Manage iprules |
| 24 | Supported Types: |
| 25 | fwmark |
| 26 | """ |
| 27 | |
| 28 | def __init__(self, dev): |
| 29 | self.dev = dev |
| 30 | self.tableNo = 100 + int(dev[3:]) |
| 31 | self.table = "Table_%s" % (dev) |
| 32 | |
| 33 | def addRule(self, rule): |
| 34 | if not self.findRule(rule + " lookup " + self.table): |
| 35 | cmd = "ip rule add " + rule + " table " + self.table |
| 36 | CsHelper.execute(cmd) |
| 37 | logging.info("Added rule %s for %s" % (cmd, self.table)) |
| 38 | |
| 39 | def findRule(self, rule): |
| 40 | for i in CsHelper.execute("ip rule show"): |
| 41 | if rule in i.strip(): |
| 42 | return True |
| 43 | return False |
| 44 | |
| 45 | def addMark(self): |
| 46 | if not self.findMark(): |
| 47 | cmd = "ip rule add fwmark %s table %s" % (self.tableNo, self.table) |
| 48 | CsHelper.execute(cmd) |
| 49 | logging.info("Added fwmark rule for %s" % (self.table)) |
| 50 | |
| 51 | def delMark(self): |
| 52 | if self.findMark(): |
| 53 | cmd = "ip rule delete fwmark %s table %s" % (self.tableNo, self.table) |
| 54 | CsHelper.execute(cmd) |
| 55 | logging.info("Deleting fwmark rule for %s" % (self.table)) |
| 56 | |
| 57 | def findMark(self): |
| 58 | srch = "from all fwmark %s lookup %s" % (hex(self.tableNo), self.table) |
| 59 | for i in CsHelper.execute("ip rule show"): |
| 60 | if srch in i.strip(): |
| 61 | return True |
| 62 | return False |
no outgoing calls