code: def update_iptables(self):
          
  
          # Read the iptables
          iptables_cmds = ['iptables-save', '-c']
          all_rules = dsl.execute(iptables_cmds, root_helper=self._root_helper,
                                  log_output=False)
  
          # For each rule in rule_info update the rule if necessary.
          new_rules = []
          is_modified = False
          for line in all_rules.split('\n'):
              new_line = line
              line_content = line.split()
              # The spoofing rule which includes mac and ip should have
              # -s cidr/32  option for ip address. Otherwise no rule
              # will be modified.
              if '-s' in line_content:
                  tmp_rule_info = list(self.rule_info)
                  for rule in tmp_rule_info:
                      if (rule.mac in line.lower() and
                          rule.chain.lower() in line.lower() and
                              not self._is_ip_in_rule(rule.ip, line_content)):
                          ip_loc = line_content.index('-s') + 1
                          line_content[ip_loc] = rule.ip + '/32'
                          new_line = ' '.join(line_content)
                          LOG.debug('Modified %(old_rule)s. '
                                    'New rule is %(new_rule)s.' % (
                                        {'old_rule': line,
                                         'new_rule': new_line}))
                          is_modified = True
              new_rules.append(new_line)
  
          if is_modified and new_rules:
              # Updated all the rules. Now commit the new rules.
              iptables_cmds = ['iptables-restore', '-c']
              dsl.execute(iptables_cmds, process_input='\n'.join(new_rules),
                          root_helper=self._root_helper, log_output=False)
docs: Update iptables based on information in the rule_info.